Puppet Best practice: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
На паппетлабсе есть решение http://projects.puppetlabs.com/projects/puppet/wiki/Simple_Text_Patterns/5 |
На паппетлабсе есть решение http://projects.puppetlabs.com/projects/puppet/wiki/Simple_Text_Patterns/5 |
||
===Вариант 1 - с паппетлабса=== |
===Вариант 1 - с паппетлабса=== |
||
+ | Этот вариант содержит как минимум 1 баг - плохо применим для строк содержащих кавычки. Очень плохо применим. |
||
<PRE> |
<PRE> |
||
define line($file, $line, $ensure = 'present') { |
define line($file, $line, $ensure = 'present') { |
||
Строка 29: | Строка 30: | ||
} |
} |
||
</PRE> |
</PRE> |
||
+ | ===Вариант 2 - "патченый с паппетлабса"=== |
||
+ | Тут без примера - отмечу что можно sed-ом вместо перла сделать так что бы работало ИЛИ для одинарной или для двойной кавычки но не для обоих одновременно. У меня по-крайне мере не получилось. |
||
+ | Что- то вроде такого: (Обратить внимание на экранирование) |
||
+ | <PRE> |
||
+ | 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}\"" |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | </PRE> |
||
+ | ===Вариант 3==== |
||
==Редакирование ini-конфигов== |
==Редакирование ini-конфигов== |
Версия 10:27, 17 сентября 2013
Тут собраны интересные и не очень решения для паппета
Редактирование строк
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}\"" } } } }