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

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Puppet]]
 
=Тут собраны интересные и не очень решения для паппета=
 
=Тут собраны интересные и не очень решения для паппета=
 
==Редактирование строк==
 
==Редактирование строк==
Строка 61: Строка 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
  }
}