如果查找成功,Puppet会编写一个运行的命令吗?

时间:2018-04-16 14:51:46

标签: puppet hiera

我的木偶清单中有以下内容,它有效:

package {
  lookup('latest_packages'): ensure => latest,
}

现在我们要添加另一个选项以确保不存在,此查找可以包含值,但也可以不存在。当hiera数据不存在时,它会导致我的清单失败。

package {
  lookup('latest_packages'): ensure => absent,
}

如果该数据不存在,我会在代理上找回这个:

  

错误:无法从远程服务器检索目录:错误500开启   SERVER:服务器错误:函数lookup()没有找到值   name' removed_pa​​ckages'在节点dev-596e89d2fe5e08410003f2e6

如果查找找到值,我怎样才能将其设置为仅运行?我是否需要将包函数包装在条件?

1 个答案:

答案 0 :(得分:2)

这里成功的最快途径可能是使用lookup函数的默认值参数。我们还可以添加数据类型和合并行为,以帮助集中查找:

lookup('removed_packages', Array[String], 'unique', [])

此外,根据您的错误消息,我猜您正在查找的密钥实际上是removed_packages案例的absent

  • Array[String]:保证您的包列表的数据类型将是一个字符串数组。这有助于防止数据对此资源产生不必要的输入。

  • unique:组合任意数量的数组和标量值,以返回已删除所有重复值的合并和展平数组。这很好而且效率很高。

  • []:默认值,因此对于不存在的removed_packages密钥,资源将解析为:

    package { []: ensure => absent }

    这将是您目录中良性且成功编译的资源。