puppet 和 manifest 循环

puppet 和 manifest 循环

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

Name [ 'testserver', 'floor1', 'floor3' ],

我如何对其进行迭代,以便当我定义文件资源时,我可以对其进行迭代并确保每个元素都有正确的文件资源?

谢谢丹

答案1

没有办法以传统方式进行循环,但您仍然可以实现您想要的目标。数组在用作资源标题时将自动扩展。

因此,对于一个简单的情况,你只需要一个像这样的数组

$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}"],
  }
}

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

$names = [ 'testserver', 'floor1', 'floor3' ]
datafiles { $names: }

相关内容