Назад | Перейти на главную страницу

Марионетка: в определение передано более одного массива?

Я могу понять согласно 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.

Но на самом деле это только сделает вашу конфигурацию запутанной и трудной для чтения. Просто определите класс, который размещает пакеты так, как вы хотите, и включите этот класс.