【问题标题】:Puppet relationship with a Hash与哈希的木偶关系
【发布时间】:2015-12-09 16:43:59
【问题描述】:

我想按顺序运行以下代码,以便在脚本执行之前计算 servers_string 变量。

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

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Illegal relationship operand, can not form a relationship with a Hash. A Catalog type is required.

代码sn-p:

$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}'"
}

有什么想法吗?谢谢

【问题讨论】:

  • 不确定这是否已经改变,但过去的 $servers_string = "${servers_string}${name}" 会失败。您无法重新定义已声明的变量(它似乎被立即声明为空或填充在该 if 语句中添加逗号)

标签: puppet


【解决方案1】:

一般的资源关系,特别是链运营商是关于资源应用于节点的顺序。它们与目录构建器评估清单文件的顺序无关。

清单总是按从左到右、从上到下的顺序进行评估。您不需要使用链运算符来确保,也不能使用它们来更改它。只需去掉链运算符,就可以了(至少在这方面)。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多