Puppet Best practice
Материал из noname.com.ua
Тут собраны интересные и не очень решения для паппета
Редактирование строк
100% универсального решения я не знаю. На паппетлабсе есть решение http://projects.puppetlabs.com/projects/puppet/wiki/Simple_Text_Patterns/5
Вариант 1 - с паппетлабса
Этот вариант содержит как минимум 1 баг - плохо применим для строк содержащих кавычки. Очень плохо применим.
define line($file, $line, $ensure = 'present') { case $ensure { default : { err ( "unknown ensure value ${ensure}" ) } present: { exec { "/bin/echo '${line}' >> '${file}'": unless => "/bin/grep -qFx '${line}' '${file}'" } } absent: { exec { "/usr/bin/perl -ni -e 'print unless /^\\Q${line}\\E\$/' '${file}'": onlyif => "/bin/grep -qFx '${line}' '${file}'" } } } }
Usage example: Add ‘dummy’ to the list of automatically loaded modules
file { "/etc/modules": ensure => present, } line { dummy_module: file => "/etc/modules", line => "dummy", }
Вариант 2 - "патченый с паппетлабса"
Тут без примера - отмечу что можно sed-ом вместо перла сделать так что бы работало ИЛИ для одинарной или для двойной кавычки но не для обоих одновременно. У меня по-крайне мере не получилось. Что- то вроде такого: (Обратить внимание на экранирование)
define line($file, $line, $ensure = 'present') { case $ensure { default : { err ( "unknown ensure value ${ensure}" ) } present: { exec { "/bin/echo \"${line}\" >> \"${file}\"": unless => "/bin/grep -qFx \"${line}\" \"${file}\"" } } absent: { exec { "/bin/sed -i \"/${line}/d\" \"${file}\"": onlyif =>"/bin/grep -qFx \"${line}\" \"${file}\"" } } } }
Вариант 3
Еще работает вот так: (Живой пример)
file_line{'savanna' : path => $settings_py, line => "HORIZON_CONFIG['dashboards'].append('savanna')", ensure => $line_in_settings_py_ensure, } file_line{'savannadashboard' : path => $settings_py, line => "INSTALLED_APPS.append('savannadashboard')", ensure => $line_in_settings_py_ensure, } file_line{'savannaurl' : path => $local_settings, line => "${savanna_url_string}", ensure => $line_in_settings_py_ensure, notify => Service['httpd'], }
Редакирование ini-конфигов
Custom Facts и пример использования
Debian add repo
node "sirmax-kvm" { apt::source { 'heat': location => 'http://127.0.0.1/debian/heat/', release => 'precise', repos => 'main', include_src => false, } apt::key { 'heat': key => 'D50582E6', key_source => 'http://172.18.196.75/debian/heat/pubilc_key', } apt::source { 'grizzly': location => 'http://ubuntu-cloud.archive.canonical.com/ubuntu', release => 'precise-updates/grizzly', repos => 'main', include_src => false, key => '5EDB1B62EC4926EA', key_server => 'keyserver.ubuntu.com', #pin => '-10', #include_src => true } }