Запустить puppet exec useradd если только пользователя не существует
Posted in Новости on 13 августа, 2013 by adminexec { «create_testuser»:
command => «/usr/sbin/useradd testuser»,
unless => «/usr/bin/id testuser» }
exec { «create_testuser»:
command => «/usr/sbin/useradd testuser»,
unless => «/usr/bin/id testuser» }
exec { «mkdir_test» :
command => «/bin/mkdir /tmp/test»,
creates => «/tmp/test» }
Puppet кроме системных переменных использует facter, в нем существует переменная, отдающая название ОС — lsbdistcodename
итак, пишем скрипт :
if $lsbdistcodename == "wheezy" {
exec { "echo":
command => "/bin/touch WHEEZY" }
}
if $lsbdistcodename == "squeeze" {
exec { "echo":
command => "/bin/touch SQUEEZE" }
}
Баг заключается в том, что при внесении в конфиг конструкции :
class { 'mysql::server': config_hash => { 'root_password' => 'PASS' } }
class { 'mysql::db': { 'mydb':
user => 'user',
password => 'password',
host => 'localhost',
grant => ['all'] } }
Отрабатывает только класс установки MySQL сервера и задания root пароля, но далее ни ошибок, ни явных зависимостей невыполненных даже в дебаг моде не видно, код просто игнорируется.
Баг зарегистрирован, но до сих пор не закрыт http://projects.puppetlabs.com/issues/15690
Фикс :
добавляем и на master сервер и на node сервер в блок [main] :
[main]
pluginsync = true
После установки MySQL поддержки плагина для puppet и при апдейте конфигурации на клиенте возникает ошибка :
Unsupported osfamily: operatingsystem: Debian, module mysql only support osfamily RedHat, Debian, and FreeBSD, or operatingsystem Amazon at /etc/puppet/modules/mysql/manifests/params.pp:111 on node
То есть по сути система определилась верно, но отрабатывать правильно модуль не хочет. В ходе расследования было выявлено, что имя системы берется из переменной окружения osfamily утилиты facter.
Хотя утилита и показывает верную ОС, но проблемы это не решило до тех пор, пока я не обновил facter до версии 1.6.9 из backports
apt-get install facter -t squeeze-backports