В данном учебнике пойдёт речь об установке, базовой настройке и основных командах для кроссплатформенного клиент-серверного приложения, позволяющего централизованно управлять конфигурацией программ и операционных систем (как UNIX-подобных, так и семейства Microsoft Windows), установленных на нескольких компьютерах — puppet. Для удобства клиентскую часть будем называть клиентом, серверную — мастером (так как серверная часть программы называется puppetmaster).

Установка

править

Как правило, пакеты puppet входят в стандартные репозитории операционных систем, и называются puppet и puppet-server. Их установка требует наличия ruby.

Базовая настройка

править

Основными файлами конфигурации являются auth.conf, puppet.conf(англ.) и fileserver.conf, расположенные по умолчанию в /etc/puppet или /etc/puppetlabs/puppet

Настройка соединения

править

Для того, чтобы puppet работал:

  • у клиента должна быть возможность соединиться с мастером по IP адресу и имени компьютера (последнее особенно важно, так как SSL сертификаты подписываются с учётом указанного имени). Для этого может потребоваться у клиента в файле /etc/hosts прописать строку с IP адресом и именем host или корректная настройка dns-сервера:
192.168.0.15 puppet-master.domain
  • должны быть открыты исходящие соединения для Puppet на порту 8140 для работы и 8139 для передачи обратных отчётов (или фаервол полностью отключен);
  • должны быть синхронизированы часы (из практических соображений, так как часть команд может задаваться с привязкой ко времени и используемое SSL шифрование тоже имеет привязку к времени существования сертификатов).

Настройка клиентов

править

Для того чтобы клиенту знать, где собственно искать мастера, необходимо в файле puppet.conf добавить строку:

[agent]
server = puppet-master.domain
node_name = cert
certname = workstation

вы заставите клиента при аутентификации на мастере всегда представляться как workstation. Данная настройка упрощает управление, позволяя задавать имена, соответствующие определённой целевой группе клиентов.

Запрос сертификата у сервера и тестовый запуск puppet (без активации службы), но при этом происходит подключение к серверу и применение всех доступных конфигураций можно выполнить как:

puppet agent --test

Подписывание сертификатов

править

В первой попытке соединиться с мастером клиенту будет отказано по причине отсутствия подписанного SSL сертификата, поэтому, получив отказ, клиент оставит запрос на его получение. Посмотреть список запросов можно с помощью команды:

puppet cert --list

Подписать сертификат и, соответственно, разрешить доступ клиенту можно командой:

puppet cert sign puppet-client.domain

где «puppet-client.domain» — имя клиента. Удалить сертификат с сервера:

puppet cert clean puppet-client.domain

В версиях менее третьей надо было использовать эти команды в двух вариантах, заменив puppet cert = puppetca.

puppet.conf

править

Может содержать следующие настройки:

  • node_name — определяет, как мастер будет идентифицировать клиента для использования в манифестах, а также определяет переменные hostname, fqdn и domain. Возможные значения cert (использует значение certname) и facter (использует hostname клиента). По умолчанию : cert.
  • manifest — входной манифест который открывает puppet. По умолчанию: $manifestdir/site.pp.
  • manifestdir — папка, где мастер ищет манифесты. По умолчанию: $confdir/manifests.
  • runinterval — количество секунд, через которое клиент будет опрашивать мастера. По умолчанию: 1800 (30 минут).
  • puppetport — порт, по которому происходит обмен. По умолчанию: 8139.
  • puppetdlockfile — адрес, по которому размещается lock — файл, запрещающий запуск нескольких копий puppet на клиенте. По умолчанию: $statedir/puppetdlock.
  • templatedir — папка, где мастер ищет шаблоны.
  • modulepath — папка, где мастер ищет модули.

Консольные команды

править
  • puppet apply --configprint modulepath — выводит значение конкретной настройки puppet.conf (в данном случае modulepath), если ввести --configprint all можно получить полный текущий конфиг. (И сохранить перед тем как начать что-то править…)
  • puppet resource <type> <id> — позволяет получить описание ресурса определённого типа <type> с идентификатором <id> сразу на декларативном языке puppet. Например puppet resource user root. Тип ресурса user а его идентификатор (адрес) root
  • puppet describe -s <type> — позволяет получить описание типа, имеющихся для него команд.
  • puppet apply <my_test_manifest.pp> — выполняет указанный манифест.
  • puppet apply -e «include undeclaredclass» — выполнит незадекларированный класс undeclaredclass, находящийся в одном из написанных вами модулей (естественно, расположенном в папке $modulepath).

Манифесты

править

Их иногда называют рецептами, представляют собой текстовые файлы с расширением .pp (По умолчанию выполняется $confdir/manifests/site.pp). В манифесте могут и должны содержаться:

  • Классы (class)
  • Узлы (node)
  • Ресурсы (то есть типы file, user и др.)
  • Ссылки на другие манифесты (import)

Встроенные переменные

править

Встроенные переменные становятся доступными благодаря утилите facter, устанавливаемой вместе с puppet, которая берёт информацию из системы. Если набрать в командной строке facter, то можно получить полный список доступных переменных. Вот некоторые из них:

  • $operatingsystem — операционная система.
  • $fqdn — полное доменное имя.
  • $hostname — имя хоста.
  • $ipaddress — IP адрес.
  • $osfamily — семейство операционных систем.
  • $is_virtual — запущена ли ОС в виртуальной машине.

Гид по языку

править
  • Условие
if condition {
  block of code
}
elsif condition {
  block of code
}
else {
  block of code
}
  • Перечисление
case $operatingsystem {
      centos, redhat: { $apache = "httpd" }
      debian, ubuntu: { $apache = "apache2" }
      default: { fail("Unrecognized operating system for webserver") }
}
  • Выбор
$apache = $operatingsystem ? {
      centos                => 'httpd',
      redhat                => 'httpd',
      /(?i)(ubuntu|debian)/ => "apache2",
      default               => undef,
}
  • Атрибуты по умолчанию
Exec { path => '/usr/bin:/bin:/usr/sbin:/sbin' }
exec { 'echo this works': }

Классы

править
  • Наследование классов
class unix {
      file { '/etc/passwd':
            owner => 'root',
            group => 'root',
            mode  => '0644',
      }
      file { '/etc/shadow':
            owner => 'root',
            group => 'root',
            mode  => '0440',
      }
}
class freebsd inherits unix {
      File['/etc/passwd', '/etc/shadow'] { group => 'wheel', owner => undef }
}

При вызове класса freebsd для файлов атрибут group изменится на wheel, а вот атрибут owner не будет проверяться вообще. Значение атрибутов можно не заменять а добавлять:

class apache {
      service { 'apache': require => Package['httpd'] }
}
class apache-ssl inherits apache {
      # host certificate is required for SSL to function
      Service['apache'] { require +> File['apache.pem'] }
}
  • Зависимости между классами
class apache {
      service { 'apache': require => Class['squid'] }
}

Но таких конструкций лучше избегать, так как это может привести к циклам. Следующий пример позволяет этого избежать и сохраняет правило, когда один ресурс объявляется только один раз:

class myservice {
      service { foo: ensure => running }
}
class otherstuff {
      include myservice
      file { '/foo': notify => Service[foo] }
}
  • Параметризированные классы
class apache($version , $home = '/var/www') {
      # Содержимое класса
}
node webserver {
      class { 'apache': version => '1.3.13' }
}

Основные типы

править

Общие атрибуты

править
  • before — определяет, что данный ресурс должен отработать до какого-то другого. Задаётся в виде метапараметра: Type['title']. Можно задавать массив метапараметров [Type1['title1'],Type2['title2']]. В метапараметрах (или ссылках на ресурсы) тип ресурса обязательно указывается с большой буквы.
  • notify — создаёт отношение, аналогичное before, но определяет, что следующий ресурс отработает только после того, как данный изменится. Задаётся метапараметром.
  • require — определяет, что данный ресурс должен отработать только после другого. Задаётся метапараметром.
  • subscribe — создаёт отношение, аналогичное require, но определяет, что данный ресурс должен отработать только после того, как ресурс, на который подписались, изменится. Задаётся метапараметром.
  • schedule — определяет расписание (интервал) для запуска данного ресурса. См. тип shedule.
  • noop — определяет, должен ли отработать данный ресурс. Равно true (по умолчанию) или false.

Записывает определённое сообщение в лог. Не выводит никакой информации пользователю.

  • name — Тэг на Ваше усмотрение, задаёт имя сообщения.
  • message — Текст, который будет отправлен в лог. Если не задан, puppet по умолчанию считывает из заголовка ресурса.
  • withpath — Показывать или нет полный путь к объекту, если включено, то в логе будет 2 строки: само сообщение и ещё полный путь по вложениям откуда оно запускалось. Равно true или false (в мануалах пишут что по умолчанию равно false, но на практике наблюдается обратное).

Позволяет управлять файлами и директориями.

  • ensure — проверка на существование файла и его тип. Имеет значения present (существует), absent (отсутствует), file (является файлом), directory (является директорией), link (является ссылкой).
  • path — Полный адрес к файлу. Если не задан, puppet по умолчанию считывает из заголовка ресурса.
  • source — Откуда качать файл. Это адрес на мастере puppet:/// или локальный.
  • mode — Права на файл (например, 0740). Должны задаваться числовым значением. Работает так же и с директориями.
  • target — Символьная ссылка (когда задано ensure => link).
  • recurse — Определяет, обрабатывать директорию рекурсивно с подкаталогами и всем содержимым (когда задано ensure => directory). Равно true, false или remote. Remote — указывает, что надо перебрать рекурсивно каталог на сервере и обработать на клиенте все найденные на сервере файлы. Рекурсивно на клиенте каталог обрабатываться не будет.
  • recurselimit — Определяет, как глубоко уходить в подкаталоги. Может принимать значения /^[0-9]+$/ (натуральные числа).
  • owner — Пользователь-владелец файла, задаётся по имени или UID.
  • group — Группа-владелец файла, задаётся по имени или GID.
  • content — Задаёт строку, устанавливаемую в качестве содержимого файла. Наиболее полезны в работе с шаблонами, но вы также можете использовать функции файлового вывода (консольные команды).
  • purge — Удалять ли файлы из директории которых нет на мастере у клиента (работает когда recurse => true). Равно true (в директории будут только те файлы что есть на мастере, остальные удалятся) или false (синхронизируются те файлы, что есть на сервере, остальные останутся без изменений).
  • mtime — проверка на время последнего изменения файла.
  • ctime — проверка на время последнего изменения владельца или прав доступа к файлу.
  • backup — Нужно ли делать бэкап файла перед его заменой. Равно false (не надо делать резервной копии), .ваш_текст_начинающийся_с_точки (сделает резервную копию в том же месте где и был файл добавлением к нему суффикса .ваш_текст_начинающийся_с_точки), ваш_текст_без_точки_вначале (сархивирует в filebucket с именем ваш_текст_без_точки_вначале).
  • force — позволяет выполнить операцию даже если она уничтожит одну или несколько директорий. Требуется использовать: совместно с параметром purge (будут также удаляться и поддиректории), когда необходимо заменить директорию файлом или ссылкой, и когда удаляется директория (ensure => absent). Равно true или false.
  • checksum — Алгоритм подсчета контрольной суммы при определении изменения содержимого файла.
    Значение по умолчанию: md5.
    Возможные значения: md5, md5lite, mtime, ctime, none.
  • ignore — Параметр определяющий игнорируемые файлы при рекурсивной обработке каталога.
    Используется стандартный встроенный движок ruby. К примеру полностью поддерживаются метасимволы вроде [a-z]*.
    Совпадения исползующие вхождение в подкаталоги, вроде */*, игнорируются (**в оригинале: Matches that would descend into the directory structure are ignored, e.g., */*).
  • links — Как обрабатывать символические ссылки во время обработки файлов.
    Возможные значения:
    • follow — будет скопирован указанный по ссылке файл
    • manage — будет скопирована сама ссылка
    • ignore — ссылка будет проигнорирована
  • provider — Конкретный бэкенд используемый этим ресурсом. Скорее всего вам не придется использовать этот параметр, т.к. puppet определит этот параметр в соответствии с платформой
    Возможные значения: posix, windows
  • replace — Заменить ли файл или символическую ссылку, которая уже существует в локальной системе, но содержание которого не соответствует тому, что источник или содержание атрибут определяет.
    Установка этого значения в false позволяет инициализировать файловые ресурсы без перезаписи при изменениях в будущем.
    Обратите внимание, что это влияет только на содержимое; Puppet будет по-прежнему управлять владельца и права.
    Значение по умолчанию true.
    Возможные значения true, false, yes, no.
  • selinux_ignore_defaults — If this is set then Puppet will not ask SELinux (via matchpathcon) to supply defaults for the SELinux attributes (seluser, selrole, seltype, and selrange). In general, you should leave this set at its default and only set it to true when you need Puppet to not try to fix SELinux labels automatically. Valid values are true, false.
  • selrange — (Property: This attribute represents concrete state on the target system.) What the SELinux range component of the context of the file should be. Any valid SELinux range component is accepted. For example s0 or SystemHigh. If not specified it defaults to the value returned by matchpathcon for the file, if any exists. Only valid on systems with SELinux support enabled and that have support for MCS (Multi-Category Security).
  • selrole — (Property: This attribute represents concrete state on the target system.) What the SELinux role component of the context of the file should be. Any valid SELinux role component is accepted. For example role_r. If not specified it defaults to the value returned by matchpathcon for the file, if any exists. Only valid on systems with SELinux support enabled.
  • seltype — (Property: This attribute represents concrete state on the target system.) What the SELinux type component of the context of the file should be. Any valid SELinux type component is accepted. For example tmp_t. If not specified it defaults to the value returned by matchpathcon for the file, if any exists. Only valid on systems with SELinux support enabled.
  • seluser — (Property: This attribute represents concrete state on the target system.) What the SELinux user component of the context of the file should be. Any valid SELinux user component is accepted. For example user_u. If not specified it defaults to the value returned by matchpathcon for the file, if any exists. Only valid on systems with SELinux support enabled.
  • show_diff — Отображать ли различия при изменении файла. Значение по умолчанию true. Этот параметр полезен для файлов включающих пароли, и другие секретные данные, которые в противном случае были бы включены в логи Puppet, и другие небезопасные выводы.
    Если глобальный параметр `show_diff` равен false, то различия не будут отображаться даже если далее он будет объявлен как true.
    Возможные значения true, false, yes, no.
  • source — Источник, из которого будут копироваться данные в локальную систему. Значением могут быть как URI к удаленным файлам, так и полные пути в локальной системе (в т.ч. и в подключенных NFS и Samba шарах)
    Этот атрибут является взаимоисключающим с content и target.
    Доступные URI могут быть puppet and file.
    Puppet URI будут брать файлы из встроенного в puppet файлового сервера, и как правило имеют формат:
    puppet:///modules/name_of_module/filename
    При этом будут взяты файлы из модуля на puppet-master-е(или локального модуля, при использовании pupper apply).
    Предположив, что modulepath ссылается на /etc/puppetlabs/puppet/modules, в приведенном выше примере получим полный адрес
    /etc/puppetlabs/puppet/modules/name_of_module/files/filename.
    В отличие от content, атрибут source может быть использован для рекурсивного копирования директории, если атрибут recurse выставлен как true или remote.
    Если директория-источник сдержит символическую ссылку, используйте атрибут links чтоб указать - нужно ли воссоздать ссылку, или следовать за ней.
    Возможно указать несколько источников в виде массива. В этом случае puppet будет использовать первый существующий источник. Подобное может понадобиться для использования различных файлов на разных системах (дополнительно смотрите sourceselect):
file { "/etc/nfs.conf":
  source => [
    "puppet:///modules/nfs/conf.$host",
    "puppet:///modules/nfs/conf.$operatingsystem",
    "puppet:///modules/nfs/conf"
  ]
}
  • source_permissions — Как puppet должен скопировать права, владельца и группу, оригинального source целевому file, когда эти значения явно не указаны соответствующими атрибутами. (Во всех случаях явные разрешения будут иметь приоритет.)
    Возможные значения:
    • use (the default) заставляет Puppet применять владельца, группу и разрешения source на все обрабатываемые файлы.
    • use_when_creating задавать разрешения в соответствии с sourceтолько при создании файлов; права уже существующих файлов изменяться не будут.
    • ignore не наследовать права от source при обработке файлов. При создании новых файлов без явных разрешений, поведение при получении разрешений будут зависеть от конкретной платформы. На POSIX, Puppet будет использовать значение umask пользователя, от которого он запускается. На Windows, Puppet будет использовать DACL по умолчанию ассоциированный с пользователем от которого он запускается.
  • sourceselect — Значение по умолчанию - first.
    При рекурсивном копировании директорий, в случае если источников несколько - по умолчанию копируются файли из первого доступного источника. Если этому параметру задать значение all, то копироваться будут файлы из всех доступных источников.
    Если указанный файл существует в более чем одного источника, будет использоваться версия из самого раннего источника в списке.
    Доступные значения first, all.
  • type — (Property: This attribute represents concrete state on the target system.)
    A read-only state to check the file type.

В зависимости от системы клиента, установщик пакетов выбирается автоматически и имеет определённые свойства, полное описание на сайте docs.puppetlabs.com(англ.).

  • name — имя пакета. Если не задан, puppet по умолчанию считывает из заголовка ресурса.
  • ensure — состояние данного пакета, равно present (или installed, то есть пакет установлен), absent (отсутствует), latest (установлен и является последней версией), purged, held (только для некоторых установщиков пакетов).
  • provider — можно вручную указать установщика пакетов из возможных aix, appdmg, apple, apt, aptitude, aptrpm, blastwave, dpkg, fink, freebsd, gem, hpux, macports, msi, nim, openbsd, pacman, pip, pkg, pkgdmg, pkgutil, portage, ports, portupgrade, rpm, rug, sun, sunfreeware, up2date, urpmi, yum (по умолчанию для operatingsystem == fedora, centos, redhat), zypper.
  • source — дополнительно можно указать где взять пакет, это может быть URL или как в управлении файлами адрес puppet:///.

Позволяет управлять подключенными репозиториями, посредством изменения /etc/yum.conf. Большинство параметров аналогичны man yum.conf.

  • baseurl — URL данного репозитория. Значение absent удалит данные репозиторий из файла полностью. Возможные значения absent и по маске /.*/.
  • cost — cтоимость данного репозитория. Значение absent удалит данные репозиторий из файла полностью. Возможные значения absent и по маске /\d+/.
  • descr
  • enabled
  • enablegroups
  • exclude
  • failovermethod
  • gpgcheck
  • gpgkey
  • http_caching
  • include
  • includepkgs
  • keepalive
  • metadata_expire
  • mirrorlist
  • name
  • priority
  • protect
  • proxy
  • proxy_password
  • proxy_username
  • timeout

Позволяет управлять системными службами.

  • enable — включена ли служба на автозагрузку, равно true, false, manual.
  • ensure — текущее состояние, равно stopped (или false), running (или true).
  • start, stop, restart, status — позволяет задать соответственно команды на старт, остановку, перезапуск и проверку статуса вручную. Заданные команды будут использоваться при изменении статуса с помощью команды ensure. Для атрибута status команда должна возвращать 0 если служба запущена и работает без ошибок, и возвращать ненулевое значение в остальных случаях.
  • binary — путь к службе (демону). Используется только в системах, которые не поддерживают init скрипт.

Позволяет выполнять консольные команды, скрипты непосредственно при запуске puppet.

  • command — команда для запуска. Если опущена, равна заголовку. Адрес команд должен быть задан полностью, если не прописаны пути для поиска в атрибуте path.
  • path — пути для поиска команд. Можно задать сразу несколько разделяя их двоеточием ':'. Чтобы не указывать этот параметр у каждого ресурса exec, можно задать этот параметр по умолчанию в самом начале манифеста, например, так: Exec { path => '/usr/bin:/bin:/usr/sbin:/sbin' }.
  • cwd — текущая директория (переменная окружения $PWD в bash). Если директория не существует, команда не запустится.
  • creates — файл, который создаёт команда. Если атрибут задан, то команда не запустится, если файл существует.
  • environment — любые другие переменные окружения, которые необходимя для запуска команды. Имеет преимущество над арибутом path, то есть данную переменную можно переопределить.
  • group, user — группа и пользователь с правами которых выполнять данную команду.
  • logoutput — включать ли вывод команды в лог, равно true, false и on_failure (только в случае выхода с ошибкой).
  • onlyif — задаёт проверочную команду. Основная команда (атрибут command) будет выполнена, только если эта команда выполнится без ошибок (код выхода будет 0), например:
exec { "logrotate":
  path   => "/usr/bin:/usr/sbin:/bin",
  onlyif => "test `du /var/log/messages | cut -f1` -gt 100000"
}

При этом onlyif может проверять массив команд и выполнить основную команду только тогда, когда все команды массива выполнятся:

onlyif => ["test -f /tmp/file1", "test -f /tmp/file2"]

Позволяет управлять планировщиком cron в Linux. К сожалению, удалить или изменить созданные вами вручную задания не сможет, так как определяет свои задания по вставляемому перед ними комментарию.

  • command — команда, которую будет выполнять cron.
  • ensure — управляет наличием задания, равно present или absent.
  • hour — час, равно от 0 до 23. Время здесь и далее в типе cron может быть задано как '2', ['2-4'], ['2,4'], '*/2' (последнее если только ваш cron поддерживает подобное указание). По умолчанию равно *.
  • minute — минута, равно от 0 до 59.
  • month — месяц, равно от 1 до 12 или от january до december.
  • weekday — день недели, равно от 0 до 7 (0 и 7 — это воскресенье) или от monday до sunday.
  • name — имя задания. Если не задан, puppet по умолчанию считывает из заголовка ресурса.
  • user — пользователь, в задания которого оно будет включено.

Определяет расписания отработки ресурсов. К ресурсу расписание может быть присвоено с помощью одноименного параметра (schedule) В настоящее время, расписания могут использоваться только для того, чтобы предотвратить применение ресурса. Они не позволяют выполняться ресурсу вне заданных рамок и не могут назначить время когда ресурс будет запущен (для этого необходимо ипользовать scheduled_task или cron).
Каждый раз, когда puppet отрабатывает манифесты, она проверяет, попадает ли текущий момент времени в указанное расписание. Если попадает, то ресурс отработает, иначе будет просто пропущен. При этом puppet НЕ создаст себе никакого задания отработать ресурс в будущем. То есть если создать расписание «Х» скажем ежедневно с 12:20 до 12:30, а по умолчанию puppet применяет конфигурацию раз в 30 минут, а компьютер был включен в 12:10… то следующий раз puppet отработает в 12:40 и все ресурсы, которым было назначено расписание «Х», просто не сработают. Или puppet будет отрабатывать какой-нибудь ресурс продолжительное время (загружать файлы или т. п.) с 12:15 по 12:35, и данное расписание тоже «выпадет» и может вообще никогда не сработает.
Поэтому, лучше использовать широкие расписания… (с интервалом в несколько часов). Например, чтобы запускать задание 1 раз в сутки между 2 и 4 часами утра надо задать следующее расписание:

schedule { 'maint':
  range  => "2 - 4",
  period => daily,
  repeat => 1,
}
  • period — Период повторения. Равно hourly, daily, weekly, monthly, never (никогда, то есть параметр repeat задаст сколько всего раз выполнится данный ресурс).
  • periodmatch — Конкретизирует параметр period. Равно number (когда учитываются количество срабатываний в течение определённого период, например, в час) или distance (когда учитывается срабатывание через определённый период).
  • range — Интервал времени суток, в который действует расписание. Задаётся как «HH:MM:SS — HH:MM:SS» (кавычки тоже нужны), минуты и секунды могут быть опущены.
  • repeat — Как часто срабатывать в указанный период. Должно задаваться целым числом. По умолчанию: 1.

Позволяет управлять пользователями.

  • name — Если не задан, puppet по умолчанию считывает из заголовка ресурса.
  • uid — UID пользователя. Должен задаваться цифрой, если опущено, то задаётся автоматически (или остаётся без изменений, если пользователь уже существует).
  • ensure — проверка статуса пользователя, равно present (существует), absent (отсутствует), role.
  • gid — Основная группа пользователя. Задаётся по имени или GID.
  • groups — Массив дополнительных групп пользователя, через запятую. !!!Не надо включать группу, заданную как gid.
  • home — Домашняя директория пользователя.
  • shell — Оболочка пользователя (например, /bin/bash)
  • managehome — Создавать ли домашнюю директорию при создании пользователя; Если не указано true - вам придется создавать ее вручную. true или false

Позволяет управлять группами пользователей.

  • name — Если не задан, puppet по умолчанию считывает из заголовка ресурса.
  • gid — GID группы. Должен задаваться цифрой, если опущено, то задаётся автоматически (или остаётся без изменений, если группа уже существует).
  • ensure — проверка статуса группы, равно present (существует), absent (отсутствует).

Модули

править

Модули — это возможность использовать классы и функции в puppet. Модуль — это всего лишь директория с предопреденённой структурой каталогов и файлов. Выглядит структура модуля примерно так: {имя_модуля}/

   files/ - содержит различные файлы
   lib/ - содержит плагины, например, особые переменные (facts) или типы ресурсов (может вы создадите свой file_yours тип)
   manifests/ - хранит все манифесты
       init.pp - должен быть обязательно
       {класс1}.pp
       {определяемый_тип}.pp
       {класс1}/
           {под_класс1}.pp
           {под_класс2}.pp
   templates/ - содержит используемые шаблоны "*.erb"
   tests/

Обращение в коде puppet к классам будет выглядеть как:

имя_модуля { ... }
имя_модуля::класс1 { ... }
имя_модуля::класс1::под_класс1 { ... }

Для того, чтобы модуль вообще заработал достаточно иметь папку с именем модуля, папку с манифестами и начальным манифестом init.pp.
По аналогии выстраиваем под_под_классы и под_под_…под_классы, пока не надоест.
Требуется, чтобы в каждом из файлов «класс1» … «под_класс1» был один и только один класс с соответствующим именем: «имя_модуля::класс1» … «имя_модуля::класс1::под_класс1». При этом файл init.pp должен содержать класс с именем «имя_модуля».
Получить доступ к файлам модуля можно, например, по адресу puppet:///modules/имя_модуля/.
Из директории lib можно запускать исполняемые файлы с Ruby-кодом, чтобы расширить возможности Puppet и Facter (поставщика переменных).

Environments

править

Окружения (environments) нужны для полного разделения конфигураций. У каждого окружения свои модули и манифесты. Это можно сравнить с использованием разных серверов puppet master.

История

править
  • До версии 3.5 для указания окружений использовались только переменные manifest и modulepath («config file environments», в противоположность «directory environments», которые появились в версии 3.5) [1]
  • С версии 3.6 «config file environments» устарели [2].
  • В версии 3.7 «directory environments» включены по умолчанию в Puppet Enterprise, но не в Open Source[3].
  • С версии 4.0 в случае неиспользования окружений будет выдаваться предупреждение.

Если не указано, с версии 4.0 будет использоваться окружение production.

Именование

править

Имя окружения должно состоять из строчных букв, цифр и подчёркивания, начинаться с буквы. Нельзя использовать main, master, agent, user [4]. Пример имён окружений: production и testing.

Подключение

править

В версиях 3.5, 3.6, 3.7 Open Source, 3.8 для использования «directory environments» прописываем в секцию [main] или [master] файла /etc/puppet/puppet.conf:

environmentpath = $confdir/environments

В более новых версиях указывать ничего не нужно.

В конфигурации агента (секция [agent] в файле /etc/puppet/puppet.conf) надо указать, какое окружение он будет использовать, например:

environment = testing

Использование

править

После подключения, используются манифесты из каталога окружения, например, /etc/puppet/environments/production/manifests/.

В манифестах можно использовать переменную $environment с именем текущего окружения.

Примечания

править

См. также

править