Puppet Best practice: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
| (не показано 5 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
| + | [[Категория:Puppet]] |
||
=Тут собраны интересные и не очень решения для паппета= |
=Тут собраны интересные и не очень решения для паппета= |
||
==Редактирование строк== |
==Редактирование строк== |
||
| Строка 4: | Строка 5: | ||
На паппетлабсе есть решение 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') { |
||
| Строка 28: | Строка 30: | ||
line => "dummy", |
line => "dummy", |
||
} |
} |
||
| + | </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=== |
||
| + | Еще работает вот так: (Живой пример) |
||
| + | <PRE> |
||
| + | 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'], } |
||
</PRE> |
</PRE> |
||
| Строка 33: | Строка 62: | ||
==Custom Facts и пример использования== |
==Custom Facts и пример использования== |
||
| + | ==Debian add repo== |
||
| + | <PRE> |
||
| + | 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 |
||
| + | } |
||
| + | } |
||
| + | </PRE> |
||
Текущая версия на 09:05, 30 октября 2023
Тут собраны интересные и не очень решения для паппета
Редактирование строк
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
}
}