Puppet是否编写在查找成功时运行的命令?

Puppet是否编写在查找成功时运行的命令?,puppet,hiera,Puppet,Hiera,我的傀儡清单中有以下内容,它可以工作: package { lookup('latest_packages'): ensure => latest, } 现在我们添加了另一个选项以确保不存在,此查找可以包含值,但也可以不存在。当hiera数据不存在时,它会导致我的清单失败 package { lookup('latest_packages'): ensure => absent, } 如果该数据不存在,我会在代理上获取以下信息: 错误:无法从远程服务器检索目录:上的错误5

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

package {
  lookup('latest_packages'): ensure => latest,
}
现在我们添加了另一个选项以确保不存在,此查找可以包含值,但也可以不存在。当hiera数据不存在时,它会导致我的清单失败

package {
  lookup('latest_packages'): ensure => absent,
}
如果该数据不存在,我会在代理上获取以下信息:

错误:无法从远程服务器检索目录:上的错误500 服务器:服务器错误:函数lookup()未找到 在节点dev-596e89d2fe5e08410003f2e6上命名为“已删除的_包”


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

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

lookup('removed_packages', Array[String], 'unique', [])
另外,根据您的错误消息,我猜您正在查找的密钥实际上是
已删除的包
,用于
缺席
案例

  • Array[String]
    :确保包列表为字符串数组的数据类型。这有助于防止数据对该资源的意外输入

  • unique
    :组合任意数量的数组和标量值,以返回一个合并并展平的数组,并删除所有重复值。这是好的和有效的

  • []
    :默认值,因此对于不存在的
    已删除的\u包
    键,资源将解析为:

    包{[]:确保=>不存在}

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


谢谢你的回答。有关更多信息,请参阅
lookup()