Puppet Best practice: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 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-конфигов==

Версия 11: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}\""
        }
      }
    }
  } 

Вариант 3=

Редакирование ini-конфигов

Custom Facts и пример использования