我正在設定一個迪維什使用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::vault
s 的任何類別相同的資料。
例如,建立一個適合使用的結構創建資源:
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'))
模板可以載入相同的哈希值並迭代其鍵等。