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

标签 puppet hiera

我的 puppet list 中有以下内容并且它有效:

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

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

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

如果该数据不存在,我会在代理上得到此信息:

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Function lookup() did not find a value for the name 'removed_packages' on node dev-596e89d2fe5e08410003f2e6

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

最佳答案

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

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

此外,根据您的错误消息,我猜测您正在查找的 key 实际上是 removed_pa​​ckages 对于 absent 情况。

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

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

  • []:默认值,因此对于不存在的 removed_pa​​ckages 键,资源将解析为:

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

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

关于Puppet 编写一个在查找成功时运行的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49860269/

相关文章:

puppet 查找失败,需要一个敏感值,得到字符串

puppet - 如何通过 Puppet 配置 Ubuntu UFW?

rspec - 如何覆盖 rspec-puppet 中的 hiera_data?

escaping - Puppet - 为 Hiera 转义 YAML 变量

puppet - 我的 Vagrant 机器支持 Augeas 吗?

mysql - 为什么 puppet 在 MySQL 重启时删除 Travis CI 中的数据库?

ruby - 工头与 puppet node.rb 错误 404 未找到

puppet - puppet 中的子模块?

puppet - 取消 Puppet 中一行的注释

puppet - 如何使用 Hiera 使用文件的 'content' 属性构建配置文件?