Как я могу получить доступ к элементам массива в манифестах марионетки, то есть создать цикл for / while? Скажем, у меня есть в моих nodes.pp
Name [ 'testserver', 'floor1', 'floor3' ],
Как я могу перебрать это, чтобы при определении своего файлового ресурса я мог перебирать каждый и обеспечивать наличие правильных файловых ресурсов для каждого элемента?
Спасибо Дэн
Невозможно создать цикл в традиционном смысле слова, но вы, вероятно, все равно сможете достичь того, чего собираетесь. Массив, используемый в качестве заголовка ресурса, будет автоматически расширен.
Итак, для простого случая у вас будет просто массив вроде
$packages = [ 'httpd', 'mysql', 'puppet' ]
Затем используйте это в ресурсе, например:
package { $packages:
ensure => installed,
}
Для более сложных случаев вы можете использовать определенный тип. Я не совсем уверен, куда вы идете со своим примером - дайте мне знать, если это не имеет смысла для вашего варианта использования.
Скажем, например, вы отправляете массив [ 'testserver', 'floor1', 'floor3' ]
и что вам нужно сделать с этим списком, так это создать файл по адресу /etc/foo/testserver
(для первого элемента), затем запустите exec
чтобы что-то настроить, когда это будет сделано.
define datafiles {
file { "/etc/foo/${title}":
ensure => present,
content => $title,
}
exec { "setup-${title}":
command => "/usr/local/bin/something -a /etc/foo/${title}",
require => File["/etc/foo/${title}"],
}
}
Затем использование массива в заголовке определенного типа расширит его, создав ресурсы файла и exec для каждого члена массива.
$names = [ 'testserver', 'floor1', 'floor3' ]
datafiles { $names: }