取得給定類型的資源列表

取得給定類型的資源列表

我正在設定一個迪維什使用puppet備份系統。 Dirvish 有保管庫的概念 - 一個獨立的目錄,其中包含備份資料以及備份內容和備份方式的配置。這些保管庫可以位於檔案系統中的任何位置,因此您需要在主 dirvish 設定檔中明確列出它們。

我使用 puppet 完成此操作的方式複製了有關保管庫的信息,首先將它們創建為資源,然後將保管庫名稱數組傳遞給主 dirvish 資源。

  # Dirvish vaults, alphabetically sorted
  dirvish::vault { 'server-a-full':
    client      => 'server-a',
    tree        => '/',
    backup_root => $dirvish_backup_root
  }

  dirvish::vault { 'server-b-example.com':
    client       => 'server-b',
    tree         => '/srv/www/vhosts/example.com/backup',
    rsync_option => '--copy-unsafe-links',
    backup_root  => $dirvish_backup_root
  }

  # TODO - we duplicate the vault definitions here, but I don't 
  # see a better way right now
  class {'dirvish': 
    backup_root => $dirvish_backup_root,
    vaults      => ['server-a-full', 'server-b-example.com']
  }

這個dirvish::vault類別看起來像這樣

define dirvish::vault($tree, $client, $exclude = [], $rsync_option = '', $backup_root) {
  file {"$backup_root/$name/dirvish/default.conf":
    ensure => present,
    content => template("dirvish/vault.conf.erb"),
    require => File["$backup_root/$name/dirvish"]
  }
}

該類別dirvish使用vaults模板中的變數

Runall:
<% vaults.each do |vault| -%>
        <%= vault %>
<% end -%>

我怎麼才能刪除這個重複項?

答案1

如果將設定資料移至 Hiera,範本可以使用與聲明實際dirvish::vaults 的任何類別相同的資料。

例如,建立一個適合使用的結構創建資源

dirvish_vault_defaults:
  backup_root: "<backup-root-value>"

dirvish_vaults:
  'server-a-full':
    client: 'server-a',
    tree: '/',
  'server-b-example.com':
    client: 'server-b',
    tree: '/srv/www/vhosts/example.com/backup',
    rsync_option: '--copy-unsafe-links',

在清單中:

create_resources('dirvish::vault', hiera('dirvish_vaults'), hiera('dirvish_vault_defaults'))

模板可以載入相同的哈希值並迭代其鍵等。

答案2

我認為你最好的選擇是使用 concat 模組,例如或一些分割配置,如果 dirvish 支援的話(每個保管庫將建立自己的配置文件,然後將其包含在主配置中)。可以使用以下命令查看目錄太空船操作員,但這只允許您設定資源之間的順序或設定類內保管庫的屬性。不可能做類似的事情$vaults = Dirvish::Vault <| |>

作為最後的手段,您還可以在 ruby​​ 中破解一些東西。類型實例似乎在運行早期就通過了目錄,在autorequire.您可以在此時保存參考,然後再做一些討厭的事情。

相關內容