Я могу понять согласно 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']: }
Однако есть ли способ передать более одного массива, чтобы сделать то же самое? Например, если бы я хотел, чтобы некоторые библиотеки груши были установлены, а некоторые отсутствовали, могу ли я это сделать?
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']
}
Во-первых, возможно ли что-то подобное, или есть лучшие способы сделать что-то подобное с многомерными массивами или чем-то еще?
Любая помощь будет принята с благодарностью, я считаю, что документации марионеток немного не хватает в этой области.
Ура
Не думаю, что ты действительно можешь делать то, о чем говоришь. Вы бы просто передали один и тот же большой массив обоим вещам, и в вашем примере похоже, что вы хотите перебрать два массива одновременно.
И что еще более важно, даже если бы вы могли, это действительно некрасиво и трудно читать. Чтобы понять, какие вещи должны отсутствовать или присутствовать, нужно внимательно прочитать.
Следующий синтаксис будет работать с марионеткой, его гораздо легче читать без путаницы, гораздо проще вносить изменения позже и, вероятно, в любом случае на самом деле меньше символов:
php::pear {
['ldap', 'mysql', 'sqlite', 'tidy', 'xmlrpc']:
ensure => 'installed';
['ps','snmp']:
ensure => 'absent';
}
Да, этого можно добиться, вложив массивы ([ ['ldap', 'installed'], ['mysql', 'installed'],...
) и настройка functions.
Но на самом деле это только сделает вашу конфигурацию запутанной и трудной для чтения. Просто определите класс, который размещает пакеты так, как вы хотите, и включите этот класс.