如何在Puppet中迭代数组

Pap*_*cel 24 puppet

我想迭代一个存储为Facter事实的数组,并为数组的每个元素创建一个新的系统用户和一个目录,最后对AWS进行API调用.

事实的例子: my_env => [shared1,shared2,shared3]

我的问题是如何迭代木偶中的数组?

我已经尝试过Ruby DSL,但还没有成功让它工作......谢谢!

its*_*uce 71

这可能会有效,具体取决于您正在做什么

# Assuming fact my_env => [ shared1, shared2, shared3 ]

define my_resource {
  file { "/var/tmp/$name":
    ensure => directory,
    mode   => '0600',
  }
  user { $name:
    ensure => present,
  }
}
my_resource { $my_env: }
Run Code Online (Sandbox Code Playgroud)

如果您的要求很简单,它将起作用,如果没有,Puppet很难做到这一点.基于对声明性语言如何工作的误解,Puppet开发人员对迭代有不合理的偏见.

如果这种资源不适合您,也许您可​​以更好地了解您尝试从阵列中设置哪些资源属性?

编辑:

随着Puppet 4,这个可悲的缺陷终于被修复了.目前的情况记录在这里.正如文档所述,您将在许多旧代码中找到上述解决方案的示例.

  • @brianG由于使用该值的方式.它用于创建特定命名的文件.Puppet中的标题是符号名称,可以使依赖关系和收集器更容易(或更直观)使用.这是具体用法,名称更合适.更改puppet资源的标题不会改变对系统所做的实际更改,您应该在创建定义的类型时记住这一点. (2认同)

小智 21

从puppet 3.2开始,可以使用"future"解析器,如下所示:

$my_env = [ 'shared1', 'shared2', 'shared3', ]
each($my_env) |$value| {
  file { "/var/tmp/$value":
    ensure => directory,
    mode => 0600,
  }
  user { $value:
    ensure -> present,
  }
}
Run Code Online (Sandbox Code Playgroud)

另见:http://docs.puppetlabs.com/puppet/3/reference/lang_experimental_3_2.html#background-the-puppet-future-parser