Puppet 具有哈希的傀儡关系

Puppet 具有哈希的傀儡关系,puppet,Puppet,我希望按顺序运行以下代码,以便在执行脚本之前计算servers\u字符串变量 不幸的是,puppet失败,出现以下错误: 错误:无法从远程服务器检索目录:服务器上的错误400:评估错误:非法关系操作数,无法与哈希形成关系。需要目录类型。 代码片段: $servers = [{ name => 'toto', ip => '10.0.0.1'}, { name => 'titi', ip => '10.0.0.2' }] $servers.each | Hash $ser

我希望按顺序运行以下代码,以便在执行脚本之前计算
servers\u字符串
变量

不幸的是,puppet失败,出现以下错误:

错误:无法从远程服务器检索目录:服务器上的错误400:评估错误:非法关系操作数,无法与哈希形成关系。需要目录类型。

代码片段:

$servers = [{ name => 'toto', ip => '10.0.0.1'}, { name => 'titi', ip =>  '10.0.0.2' }]
$servers.each | Hash $server | {
  if $servers_string != "" {
    $servers_string = "${servers_string},"
  }

  $name = $server['name']
  $servers_string = "${servers_string}${name}"
}->

file { '/my/path/myscript.sh':
    ensure => file,
    mode   => '0700',
    owner  => 'root',
    group  => 'root',
    source => "puppet:///modules/${module_name}/install.sh --servers '${servers_string}'"
}

有什么想法吗?感谢

一般来说,资源关系,特别是链式操作符,是关于将资源应用于节点的顺序的。它们与目录生成器计算清单文件的顺序无关


清单总是按照从左到右、从上到下的顺序进行计算。您不需要使用连锁运营商来确保,也不能使用他们来更改它。只需删除chain操作符,您就可以了(至少在这方面)。

不确定这是否已更改,但
$servers\u string=“${servers\u string}${name}”
过去会失败。您无法重新定义已声明的变量(该变量似乎在bat之外声明为空或在添加逗号的if语句中填充)