Марионетка - Модуль
В Puppet модуль можно определить как набор ресурсов, классов, файлов, определения и шаблонов. Puppet поддерживает простое перераспределение модулей, что очень помогает с точки зрения модульности кода, так как можно написать определенный универсальный модуль и использовать его несколько раз с очень небольшим количеством простых изменений кода. Например, это включит конфигурацию сайта по умолчанию в / etc / puppet с модулями, поставляемыми собственно Puppet в / etc / share / puppet.
Конфигурация модуля
В любом модуле Puppet у нас есть два раздела, которые помогают определять структуру кода и управлять обозначениями.
Путь поиска модулей настраивается с использованием списка каталогов, разделенных двоеточиями, в puppetmasterd или же masterd, последний раздел главного файла конфигурации Puppet с modulepath параметр.
[puppetmasterd]
...
modulepath = /var/lib/puppet/modules:/data/puppet/modules
Параметры управления доступом для модулей файлового сервера в fileserver.conf, конфигурация пути для этого модуля всегда игнорируется, и при указании пути будет выдано предупреждение.
Путь поиска можно добавить во время выполнения, установив переменную среды PUPPETLAB, которая также должна быть списком переменных, разделенных двоеточиями.
Источник модулей
Puppet поддерживает другое место для хранения модулей. Любой модуль может храниться в другой файловой системе любой конкретной машины. Однако все пути, по которым хранятся модули, должны быть указаны в переменной конфигурации, известной какmodulepath который, как правило, представляет собой переменную пути, по которой Puppet сканирует все каталоги модулей и загружает их при загрузке.
Разумный путь по умолчанию можно настроить как -
/etc/puppet/modules:/usr/share/puppet:/var/lib/modules.
В качестве альтернативы каталог / etc / puppet можно создать как специальный анонимный модуль, поиск в котором всегда выполняется в первую очередь.
Именование модулей
Puppet следует тем же стандартам именования конкретного модуля, в которых имя модуля должно быть обычными словами, соответствующими [- \\ w +] (буква, слово, число, подчеркивание и тире) и не содержать разделителя пространства имен:: или /. Хотя это может быть разрешено в отношении иерархии модулей, для новых модулей это не может быть вложено.
Модуль Внутренняя организация
Когда пользователь создает новый модуль в Puppet, он следует той же структуре и содержит манифест, распределенный файл, плагины и шаблоны, расположенные в определенной структуре каталогов, как показано в следующем коде.
MODULE_PATH/
downcased_module_name/
files/
manifests/
init.pp
lib/
puppet/
parser/
functions
provider/
type/
facter/
templates/
README
Каждый раз, когда создается модуль, он содержит init.ppфайл манифеста в указанном месте исправления внутри каталога манифестов. Этот файл манифеста является файлом по умолчанию, который выполняется первым в любом конкретном модуле и содержит коллекцию всех классов, связанных с этим конкретным модулем. Дополнительные.ppфайл можно добавить прямо в папку манифестов. Если мы добавляем дополнительные файлы .pp, они должны быть названы в честь класса.
Одной из ключевых функций, достигаемых с помощью модулей, является совместное использование кода. Модуль по своей природе должен быть самодостаточным, что означает, что можно включить любой модуль из любого места и поместить его в путь к модулю, который загружается при загрузке Puppet. С помощью модулей можно получить модульность в кодировании инфраструктуры Puppet.
пример
Рассмотрим модуль autofs, который устанавливает фиксированную карту auto.homes и генерирует auto.master из шаблонов.
class autofs {
package { autofs: ensure => latest }
service { autofs: ensure => running }
file { "/etc/auto.homes":
source => "puppet://$servername/modules/autofs/auto.homes"
}
file { "/etc/auto.master":
content => template("autofs/auto.master.erb")
}
}
В файловой системе будут следующие файлы.
MODULE_PATH/
autofs/
manifests/
init.pp
files/
auto.homes
templates/
auto.master.erb
Поиск модуля
Puppet следует предварительно определенной структуре, в которой он содержит несколько каталогов и подкаталогов в определенной структуре. Эти каталоги содержат файлы различного типа, которые требуются модулю для выполнения определенных действий. Небольшая закулисная магия гарантирует, что правильный файл связан с правильным контекстом. Все поиски модулей выполняются в пределах пути к модулям - списка каталогов, разделенных двоеточиями.
Для ссылок на файлы на файловом сервере используется аналогичная ссылка, так что ссылка на puppet: //$servername/modules/autofs/auto.homes преобразуется в файл autofs / files / auto.homes в пути к модулю.
Чтобы модуль можно было использовать как с клиентом командной строки, так и с мастером марионетки, можно использовать URL-адрес пути from puppet: ///. т.е. URL без явного имени сервера. Такой URL немного отличается отPuppet и puppetd. Puppet ищет бессерверный URL-адрес в локальной файловой системе.
Файлы шаблонов ищутся так же, как в манифестах и файлах: упоминание шаблона («autofs / auto.master.erb») заставит кукловода сначала искать файл в $templatedir/autofs/auto.master.erb а потом autofs/templates/auto.master.erbна пути к модулю. Все, что есть в Puppet, доступно для всех версий Puppet. Это называется автоматической загрузкой модуля. Puppet попытается автоматически загрузить классы и определения из модуля.