Установка группы файлов с puppet и hiera
У меня есть марионеточный конфиг, который правильно устанавливает файл. Я хочу установить несколько файлов. Конфигурация выглядит примерно так (в той части, которая здесь важна):
$stuff = hiera('stuff')
$site_filename = $stuff['site_file']
file { "/path/to/my/file/called/$site_filename":
ensure => present,
owner => 'the-owner',
group => 'the-group',
mode => 644,
source => "puppet:///modules/this-module/$site_filename",
require => [Package['something'],
User['someone']]
}
file { "/path/to/my/symlink/called/$site_filename":
ensure => 'link',
target => "/path/to/my/file/called/$site_filename",
require => Package['something'],
}
Прекрасно работает, правильный файл установлен на правильном хосте. Но теперь я хотел бы установить переменное количество (очень похожих) файлов, причем на каждом хосте это число будет разным.
Мои файлы hiera в настоящее время выглядят так:
stuff:
site_file: "hey-i-am-the-site-file-on-host-awesomeness"
В принципе, я хочу сказать что-то вроде этого:
stuff:
site_file: ["hey-i-am-the-site-file-on-host-awesomeness",
"i-am-also-a-site-file-for-awesomeness",
"do-not-forget-me-too",
"someday-you-will-want-me-as-well"]
И здесь я пересекаю границы своих знаний о марионетках и иера. Я понимаю, что когда я думаю, что должен повторить в марионетке, я, вероятно, ошибаюсь, но я немного запутался, как это сделать.
Любые указатели о том, как это сделать или что читать, чтобы узнать?
1 ответ
Puppet 4 и имеет некоторые итерационные функции, которые могут быть применимы здесь, и они доступны также в недавней Puppet 3 с включенным будущим парсером. Однако они не доступны в Puppet 3 без будущего парсера, поэтому вам нужно другое решение.
Классический способ решения таких проблем состоит в том, чтобы полагаться на тот факт, что объявление ресурса, в котором заголовок является массивом (литерал или переменная со значением массива), объявляет отдельный ресурс для каждого элемента массива. Это часто сочетается с определенным типом в качестве ресурса для прямого объявления. Эта комбинация примерно эквивалентна циклу foreach над элементами массива с телом определенного типа в качестве тела. Пример:
define mymodule::sitefile() {
file { "/path/to/my/file/called/$title":
ensure => present,
owner => 'the-owner',
group => 'the-group',
mode => 644,
source => "puppet:///modules/mymodule/$title",
require => [Package['something'], User['someone']]
}
file { "/path/to/my/symlink/called/$title":
ensure => 'link',
target => "/path/to/my/file/called/$title",
require => Package['something']
}
}
# ...
$stuff = hiera('stuff')
mymodule::sitefile { $stuff['site_file']: }