Estou montando umdirvixesistema de backup usando fantoche. Dirvish tem o conceito de cofre - um diretório independente que contém os dados de backup e a configuração do que e como fazer backup. Esses vaults podem estar em qualquer lugar do sistema de arquivos, então você precisa listá-los explicitamente no arquivo de configuração do dirvish mestre.
A maneira como fiz isso com o puppet duplica as informações sobre os cofres, primeiro criando-os como recursos e, em seguida, passando uma série de nomes de cofres para o recurso dirvish mestre.
# 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']
}
A dirvish::vault
classe se parece com isso
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"]
}
}
A dirvish
classe usa a vaults
variável em um modelo
Runall:
<% vaults.each do |vault| -%>
<%= vault %>
<% end -%>
Como posso remover essa duplicação?
Responder1
Se você mover seus dados de configuração para Hiera, o modelo poderá usar os mesmos dados que qualquer classe que declare os dirvish::vault
s reais.
Por exemplo, crie uma estrutura que possa ser usada comcriar_recursos:
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',
E no manifesto:
create_resources('dirvish::vault', hiera('dirvish_vaults'), hiera('dirvish_vault_defaults'))
O modelo pode carregar o mesmo hash e iterar suas chaves, etc.
Responder2
Acho que sua melhor opção é usar um módulo concat, comoesseou alguma configuração dividida, se o dirvish suportar (cada vault criaria seu próprio arquivo de configuração que seria incluído na configuração principal). É possível dar uma espiada no catálogo com ooperador de nave espacial, mas isso permitiria apenas definir a ordem entre os recursos ou definir propriedades dos vaults dentro da classe. Não é possível fazer algo parecido $vaults = Dirvish::Vault <| |>
.
Como último recurso, você também pode hackear algo em Ruby. A instância do tipo parece ter passado pelo catálogo no início da execução, no autorequire
. Você pode salvar a referência nesse ponto e fazer coisas desagradáveis depois.