如何在木偶清单中筛选哈希



你能帮帮我吗?我在木偶清单中从 hiera 获得字典,然后尝试过滤它们并以 args 的形式传入 python 脚本。但不知道该怎么做。

我的希拉:

myclass::server_conf:
 'first_serv':
   'serv_name': 'testname'
   'serv_hostname': 'testhost'
   'test_url': 'test@url.com'
 'second_serv':
   'serv_name': 'testname2'
   'serv_hostname': 'testhost2'
   'test_url': 'test@url.com2'

我的木偶清单(我从 hiera 中的值中获取哈希):

 $server_conf = hiera_hash('myclass::server_conf', {})

因此,我有:

{"first_serv"=>{"serv_name"=>"testname", "serv_hostname"=>"testhost", "test_url"=>"test@url.com"}, "second_serv"=>{"serv_name"=>"serv2", "serv_name"=>"testname2", "serv_hostname"=>"testhost2", "test_url"=>"test@url.com2"}}

然后我想从这个列表中只选择值:

'testname' 'testhost' 'test@url.com' 'testname2' 'testhost2' 'test@url.com2'

我正在尝试使用地图功能来做到这一点:

$transforrmed_data = map(server_conf) |$key,$value| { $value }

并收到错误:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not match |$key,$value| at /manifests/server.pp:26 on node test.node

我该如何解决这个问题?我还需要转移到另一个变量"testname2"testhost2"test@url.com2"并将其传递给exec命令资源。

谢谢!

看起来在

Ask PuppetLabs论坛上有一个很好的例子:在清单中迭代来自hiera的嵌套哈希。

该解决方案使用运行 exec 的已定义类型。然后使用 create_resources() 自动迭代哈希,这会将哈希转换为一组资源并将它们添加到目录中。此函数可以轻松地一次从 Hiera 数据源创建许多资源,而不必编写自己的循环函数。它最好与定义的类型一起使用,因为它们可以多次实现。

我已经根据您的目的调整了他们的例子:

define run_my_exec($serv_name, $serv_hostname, $test_url) {
  notify { "$serv_name": }
}
$server_conf = hiera_hash('myclass::server_conf', {})
create_resources( run_my_exec, $server_conf )

此外,在 puppet 中使用 exec 是一种代码气味。并不是说它总是不好的,但通常是解决问题的最不优雅的方式。例如,此可执行文件是否正在配置您的服务器?如果是这样,也许使用模板来编写配置文件会更好。以下是该类型的傀儡文档中对高管的另一个看法:

警告:使用高管集合来管理现有资源类型未涵盖的资源是一种普遍趋势。这适用于简单的任务,但是一旦你的exec堆变得足够复杂,以至于你真的必须考虑了解正在发生的事情,你应该考虑开发一个自定义资源类型,因为它将更加可预测和可维护。

相关内容

  • 没有找到相关文章

最新更新