Puppet 编写一个在查找成功时运行的命令



我的木偶清单中有以下内容,它可以工作:

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

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

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

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

错误:无法从远程服务器检索目录:错误 500 打开 服务器:服务器错误:函数查找((找不到 的值 节点 dev-596e89d2fe5e08410003f2e6 上的名称"removed_packages">

如何将它设置为仅在查找找到值时才运行?我是否需要将包函数包装在条件函数中?

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

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

另外,根据您的错误消息,我猜测您正在查找的密钥实际上removed_packages适用于absent情况。

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

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

  • [] :默认值,以便对于不存在的removed_packages键,资源将解析为:

    package { []: ensure => absent }

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

最新更新