Puppet manifests. Part 3

Липень 17th, 2016 | Теґи: , , ,

Третя серія. Продовження першої та другої.

 
 
Resource: NOTIFY(BEFORE, SUBSCRIBE).

Notify. В нього є два застосування:
– Як повноцінний ресурс: виведення додаткової інформації в лог про те, що виконує puppet

# cat /etc/puppet/modules/user/manifests/notice1.pp
class user::notice1 {
  notify { 'NotifyName':
    message => 'Notify message!', # вказує, яке повідомлення буде виведено. Можна передавати параметри.
    withpath => true, # чи вказувати повних шлях до цього ресурсу
  }
}
# cat /etc/puppet/manifests/site.pp
node /puppet.*/ {
  include user::notice1
}
node default {
}

В лог буде виведено дане повідомлення:

Jul 17 10:10:20 localhost puppet-agent[4520]: (/Stage[main]/User::Notice1/Notify[NotifyName]/message) Notify message!
Jul 17 10:10:20 localhost puppet-agent[4520]: (/Stage[main]/User::Notice1/Notify[NotifyName]/message) defined 'message' as 'Notify message!'

– Як атбирут ресурсу: задає відношення одного ресурсу до другого. Вказує, що даний ресурс має пріоритетне значення відносно наступного, вказаного в директиві notify.

# ls -la /var/puppet/sshd_config_centos
-rw-r--r--. 1 root root 4360 Jul 17 10:28 /var/puppet/sshd_config_centos

# cat /etc/puppet/modules/user/manifests/notice2.pp
class user::notice2 {
  file { '/etc/ssh/sshd_config':
    ensure => file,
    mode => 600,
    source => 'puppet:///files/sshd_config_centos',
    notify => Service['sshd'],
  }
  service { 'sshd':
    ensure    => running,
    enable    => true,
    subscribe => File['/etc/ssh/sshd_config'],
  }
}
# cat /etc/puppet/manifests/site.pp
node /puppet.*/ {
  include user::notice2
}
node default {
}

Тут subscribe вказує на те, що процес sshd повинен перезапуститися лише при зміні файлу /etc/ssh/sshd_config. В іншому випадку цей ресурс ігнорується.

Before вказує ж на прямо протилежне відносно параметра notify.

# cat /etc/puppet/modules/user/manifests/notice3.pp
class user::notice3 {
  file { '/tmp/postfix_disable':
    ensure => file,
    content => 'stopping postfix',
    before => Service['postfix'],
  }
  service { 'postfix':
    ensure    => stopped,
    enable    => false,
  }
}
# cat /etc/puppet/manifests/site.pp
node /puppet.*/ {
  include user::notice3
}
node default {
}

Тобто, тут зупинка postfix буде виконана лише після створення файлу, незалежно від того, як вони записані одне відносно іншого.

 
 
Resource: YUMREPO.

Керування налаштуваннями yum репозиторіїв.
1. Створення репозиторію.

# cat /etc/puppet/modules/yum/manifests/ius.pp
class yum::ius {
  yumrepo { "IUS":
    baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemmajrelease/$architecture",
    descr => "IUS Community repository",
    enabled => 1,
    gpgcheck => 0,
   }
}
# cat /etc/puppet/manifests/site.pp
node /puppet.*/ {
  include yum::ius
}
node default {
}

Це створить на машині-агенті файл /etc/yum.repos.d/IUS.repo зі вказаним вище змістом.
Весь список атрибутів тут.
2. Видалення репозиторію.
Тут лише через видалення файлу робиться…

# cat /etc/puppet/modules/yum/manifests/ius.pp
class yum::ius {
  file { '/etc/yum.repos.d/IUS.repo':
    ensure => absent,
  }
}

 
 
Resource: EXEC.

Виконання команд чи скриптів безпосередньо з допомогою puppet.

# cat /etc/puppet/modules/exec/manifests/ssh_restart.pp
class exec::ssh_restart {
  exec { 'restart_sshd':
   command => 'systemctl restart sshd',
   provider => 'shell', #цей параметр обов'язковий, якщо команда в onlyif консольна. В документації "забули" про цю дрібничку, через яку навіть їхні приклади не працюють :)
   onlyif => 'test -f /tmp/restart_sshd', # сервіс перезапуститься лише при наявності цього файлу на клієнті
  }

  file { '/tmp/restart_sshd':
    ensure => absent,
    require => Exec['restart_sshd'], # лише якщо спрацював попередній ресурс, цей спрацює також, і видалить файл.
  }
}
# cat /etc/puppet/manifests/site.pp
node /puppet.*/ {
  include exec::ssh_restart
}
node default {
}

Весь список параметрів тут.

 
 
Resource: SHEDULE.

# cat /etc/puppet/modules/exec/manifests/shedule.pp
class exec::shedule {
  schedule { 'everyminute':
    period => hourly, #Період повторення. Може бути hourly, daily, weekly, monthly, never
    repeat => 60, #кількість повторень за цей період. В цьому випадку буде виконуватися кожну хвилину
  }
  schedule { 'every3minutes':
    period => hourly,
    repeat => 20, #кожні 3 хвилини
  }
  exec { 'date': # завдання буде виконуватися кожну хвилину
    command => 'echo `date` >> /tmp/sheduled',
    provider => 'shell',
    schedule => 'everyminute',
  }
  file { '/tmp/sheduled2': #наступні 2 завдання будуть виконуватися кожні 3 хвилини.
    ensure => file,
    content => 'simple file content',
    schedule => 'every3minutes',
  }
  exec { 'date3':
    command => 'echo `date` >> /tmp/sheduled3',
    provider => 'shell',
    schedule => 'every3minutes',
  }
}
# cat /etc/puppet/manifests/site.pp
node /puppet.*/ {
  include exec::shedule
}
node default {
}

 
 
Загалом, цього цілком достатньо, щоб повністю автоматизувати конфігурацію серверів з допомогою puppet.

Ще немає коментарів.