У меня есть пара сотен одноразовых серверов с разными файлами конфигурации, которые должны находиться в каталоге. Копии файлов хранятся на мастере марионетки.
В одном из моих классов у меня есть набор конфигураций по умолчанию, которые всегда отправляются на узел, например:
file { "/etc/someprogram/config/000-default":
ensure => "present",
owner => "root",
group => "root",
mode => 0764,
source => "puppet:///modules/someprogram/000-default",
}
Я хотел бы иметь что-то вроде этого:
$filearray = directory listing of /etc/puppet/modules/someprogram/files/$fqdn
with each file as an element into array
$filearray.each(
file { "/etc/someprogram/config/$filename":
ensure => "present",
owner => "root",
group => "root",
mode => 0764,
source => "puppet:///modules/someprogram/files/$fqdn/$filename",
}
)
Я не очень знаком с марионеткой, но у меня такое впечатление, что это невозможно.
Вы можете делать то, что пытаетесь, с помощью этого:
file { "/etc/someprogram/config":
ensure => directory,
recurse => remote,
source => "puppet:///modules/someprogram/files/$fqdn"
#Other options
}
Это скопирует все файлы из $ fqdn в / etc / someprogram / config, перезаписав их, если они уже существуют.
Если вы хотите определить несколько файлов в каталоге без повторения всего каталога, вы можете использовать массив - например:
$myfiles = [ "/my/dir/file1", "/my/dir/file2", ]
file { $myfiles:
ensure => "present",
owner => "root",
group => "root",
mode => 0644,
source => "puppet:///modules/someprogram/$fqdn/$name",
}
Конечно, с длинными путями к "/ my / dir" или к большому количеству файлов это будет немного громоздко, поэтому в этом случае вам лучше создать определение, включающее путь к каталогу, и просто передать массив имена файлов к нему.
Вот пример того, как я это делаю:
file {
[
'/sys/block/sda/queue/scheduler',
'/sys/block/sdb/queue/scheduler',
'/sys/block/sdc/queue/scheduler',
'/sys/block/sdd/queue/scheduler',
'/sys/block/sde/queue/scheduler',
'/sys/block/sdf/queue/scheduler'
]:
ensure => 'file',
content => 'deadline',
group => '0',
mode => '644',
owner => '0',
type => 'file',
}
В приведенном выше примере я назначаю планировщик ввода-вывода крайнего срока каждому из дисков на данном сервере через Puppet.