Назад | Перейти на главную страницу

марионетка и манифест петли

Как я могу получить доступ к элементам массива в манифестах марионетки, то есть создать цикл 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: }