Например, давайте попробуем разрешить Puppet установить opengeo-suite.
Чтобы сделать что-то вроде
wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -
echo "deb http://apt.opengeo.org/suite/v3/ubuntu lucid main" >> /etc/apt/sources.list
мы можем использовать
exec {'getKey':
command => "wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -",
}
exec {'addRepo':
command => "echo "deb http://apt.opengeo.org/suite/v3/ubuntu lucid main" >> /etc/apt/sources.list",
}
Вопрос 1: Если мы снова запустим сценарий марионетки, разве wget и echo не будут запущены дважды? У нас будет дублированное репо в /etc/apt/sources.d
. Бег package { "opengeo-suite": }
дважды не пытается установить пакет дважды, он просто гарантирует, что он установлен.
Вопрос 2: Делать apt-get install opengeo-suite
есть несколько предложений для пользовательского ввода. Будет ли Puppet каким-то образом знать, какой ввод будет использоваться по умолчанию, или произойдет сбой?
Если вы не предотвратите это, команды будут запускаться при каждом запуске марионетки, включая несколько записей в sources.list
. Этого не должно происходить, поскольку Puppet ожидает, что exec
звонки идемпотентны. Один из способов обойти это - создать "проверочные" файлы и запустить exec
только если контрольного файла нет. Видеть документ чтобы узнать, как это сделать. Также обратите внимание, что существуют пользовательские модули для поддержки подходящих репозиториев с Puppet.
Я не использовал Puppet в системе на основе apt (пока), но полагаю, что Puppet или модуль apt, который я связал выше, достаточно умен, чтобы справиться с этим. Если не, посмотри это.
Вы можете использовать onlyif в exec. Тест должен вернуть истину, чтобы выполнить команду, в вашем случае см. Ниже (PUBLIC_KEY_ID, это идентификатор ключа поставщика apt)
exec {'getKey':
command => "wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -",
onlyif => "test `apt-key list |grep PUBLIC_KEY_ID | wc -l ` -eq 0"
}
exec {'addRepo':
command => "echo "deb http://apt.opengeo.org/suite/v3/ubuntu lucid main" /etc/apt/sources.list",
onlyif => "test `grep http://apt.opengeo.org/suite/v3/ubuntu /etc/apt/sources.list | wc -l ` -eq 0"
}