傀儡和清单循环

Dan*_*Dan 2 puppet

如何访问人偶清单中数组的元素,即创建 for/while 循环?假设我在我的 nodes.pp 中有

Name [ 'testserver', 'floor1', 'floor3' ],
Run Code Online (Sandbox Code Playgroud)

如何迭代它,以便在定义文件资源时可以迭代每个并确保每个元素都存在正确的文件资源?

谢谢丹

Sha*_*den 8

没有办法在传统意义上进行循环,但您可能仍然可以实现您的目标。一个数组,当用作资源标题时,会自动展开。

所以对于一个简单的情况,你只需要一个数组

$packages = [ 'httpd', 'mysql', 'puppet' ]
Run Code Online (Sandbox Code Playgroud)

然后在资源中使用它,例如:

package { $packages:
  ensure => installed,
}
Run Code Online (Sandbox Code Playgroud)

对于更复杂的情况,您可以使用定义的类型。我不太确定你的例子要去哪里 - 如果这对你的用例没有意义,请告诉我。

比如说,你要发送一个数组,[ 'testserver', 'floor1', 'floor3' ]你需要对这个列表做的是在/etc/foo/testserver(对于第一个元素)创建一个文件,然后在exec完成后运行 an来设置一些东西。

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}"],
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,在定义类型的标题中使用数组将扩展它,为数组的每个成员创建文件和 exec 资源。

$names = [ 'testserver', 'floor1', 'floor3' ]
datafiles { $names: }
Run Code Online (Sandbox Code Playgroud)