Puppet:向定义传递了多个数组?

Puppet:向定义传递了多个数组?

我可以理解http://docs.puppetlabs.com/guides/language_guide.html我可以将一个数组传递给定义。

define php::pear() {
        package { "`php-${name}": ensure => installed }
}

php::pear { ['ldap', 'mysql', 'ps', 'snmp', 'sqlite', 'tidy', 'xmlrpc']: }

但是,有没有办法可以传递多个数组来执行相同的操作?例如,如果我想安装一些 pear 库,而不想安装一些,我可以这样做吗?

define php::pear($ensure) {
    package { "`php-${name}": ensure => $ensure }
}

php::pear { ['ldap', 'mysql', 'ps', 'snmp', 'sqlite', 'tidy', 'xmlrpc']: 
    ensure => ['installed', 'installed', 'absent', 'absent', 'installed', 'installed', 'installed']
}

首先,这样的事情可能吗,或者是否有更好的方法使用多维数组等来做这样的事情?

任何帮助都将不胜感激,我发现木偶文档在这方面有所欠缺。

干杯

答案1

我认为你无法真正做到你所说的。你最终只会将同一个大数组传递给两个东西,而在你的示例中,你似乎想要同时迭代两个数组。

更重要的是,即使你能做到,这也太丑陋和难以阅读了。需要仔细阅读才能弄清楚哪些东西应该缺失或存在。

以下语法可以与 puppet 一起使用,更容易阅读且不会造成混淆,以后更容易进行更改,并且实际上字符数可能更少:

php::pear {
  ['ldap', 'mysql', 'sqlite', 'tidy', 'xmlrpc']: 
    ensure => 'installed';
  ['ps','snmp']:
    ensure => 'absent';
}

答案2

是的,您可以通过嵌套数组([ ['ldap', 'installed'], ['mysql', 'installed'],...)和调整函数来实现这一点。

但实际上,这只会让您的配置变得混乱且难以阅读。只需定义一个类,将包按您的需要放置,然后包含该类即可。

相关内容