获取给定types的资源列表

我正在使用傀儡build立一个强大的备份系统。 Dirvish有一个Vault的概念 – 一个自包含的目录,其中包含备份数据和configuration以及如何备份。 这些保pipe库可以在文件系统中的任何地方,所以你需要明确地列出它们在主dirvishconfiguration文件中。

我用木偶做的这种方式复制了有关保pipe库的信息,首先将它们创build为资源,然后将一系列保pipe库名称传递给主驱动器资源。

# 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类在模板中使用vaultsvariables

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

我怎样才能删除这个重复?

如果将configuration数据移动到Hiera,模板可以使用与任何类声明实际dirvish::vault相同的数据。

例如,创build一个适用于create_resources的结构 :

 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')) 

该模板可以加载相同的散列并迭代其键等。

我认为你最好的select是使用一个concat模块,像这样或者一些拆分configuration,如果dirvish支持的话(每个vault都会创build自己的configuration文件,然后包含在主configuration中)。 使用飞船操作员可以查看目录,但是这只允许您设置资源之间的顺序或设置类内保险库的属性。 不可能做$vaults = Dirvish::Vault <| |> $vaults = Dirvish::Vault <| |>

作为最后的手段,你也可以用ruby破解一些东西。 types实例似乎在运行的早期通过autorequire 。 你可以保存这个参考,然后做一些讨厌的事情。