J'ai quelques centaines de cent serveurs unique qui ont des fichiers de configuration différents qui doivent être présents dans un répertoire. Des copies des fichiers résident sur le maître de marionnettes.
Dans l'une de mes classes, j'ai un ensemble par défaut de configurations qui sont toujours poussées au nœud, comme:
file { "/etc/someprogram/config/000-default":
ensure => "present",
owner => "root",
group => "root",
mode => 0764,
source => "puppet:///modules/someprogram/000-default",
}
Ce que j'aimerais avoir est quelque chose comme ça:
$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",
}
)
Je ne connais pas la marionnette mais je reçois l'impression qu'il n'y a pas de moyen de le faire.
Vous pouvez faire ce que vous essayez avec ceci:
file { "/etc/someprogram/config":
ensure => directory,
recurse => remote,
source => "puppet:///modules/someprogram/files/$fqdn"
#Other options
}
Cela copiera tous les fichiers en $ FQDN à/etc/certains professionnels/config, écraser si elles existent déjà.
Si vous souhaitez définir plusieurs fichiers dans un répertoire sans recouverte de l'ensemble du répertoire, vous pouvez utiliser un tableau - comme celui-ci:
$myfiles = [ "/my/dir/file1", "/my/dir/file2", ]
file { $myfiles:
ensure => "present",
owner => "root",
group => "root",
mode => 0644,
source => "puppet:///modules/someprogram/$fqdn/$name",
}
Bien sûr, avec de longues chemins vers "/ My/Dir" ou beaucoup de fichiers, il serait un peu lourd, donc dans ce cas, vous feriez mieux de créer une définition qui comprenait le chemin de répertoire, et passez simplement le tableau de Noms de fichiers à elle.
Voici un exemple de la façon dont je fais cela:
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',
}
Dans l'exemple ci-dessus, j'attribuai le planificateur d'E/S délais à chacun des disques d'un serveur donné via la marionnette.