遍历人偶清单中深度嵌套的 hiera 哈希
Iterate over a deeply nested hiera hash in puppet manifest
我正在为我的网络服务器构建一个结构。我在 hiera 中进行了设置,但我似乎无法让 puppet 返回正确的类型。
在common.yaml
vhosts:
hostname:
sitename:
app_url: value
app_type: value
每个虚拟主机和多个虚拟主机有多个站点。在我的清单中,我将创建文件夹结构和其他设置任务,但目前我什至无法让它遍历网站。
当前清单:
define application($app_name, $app_url) {
notice("App Type: ${app_type}")
notice("App Url: ${app_url}")
}
$vhosts = hiera('vhosts')
$vhosts.each |$vhost| {
create_resources(application, $vhost)
}
我得到的错误是 create_resources
需要哈希。但是,如果我键入 cast $vhost
,我会发现它不是哈希而是元组。
我是如何从我的 yaml 散列中得到元组的?有没有更好的方法来迭代此数据集以获得我需要的内容?
第二个示例中的 https://docs.puppet.com/puppet/latest/reference/function.html#each 解释了为什么你有一个元组。
给定一个 Hiera 哈希:
vhosts:
hostname:
sitename:
app_url: value
app_type: value
您可以像下面这样对其进行迭代:
hiera_hash('vhosts').each |String $hostname, Hash $hostname_hash| {
# $hostname is 'hostname'
# $hostname_hash is { hostname => { sitename => { app_url => value, app_type => value } } }
$hostname_hash.each |String $sitename, Hash $sitename_hash| {
# $sitename is 'sitename'
# $sitename_hash is { sitename => { app_url => value, app_type => value } }
$sitename_hash.each |String $key, String $value| {
# first loop $key is app_url and $value is 'value'
# second loop $key is app_type and $value is 'value'
}
}
}
当然,您可以随时访问哈希值,例如
hiera_hash('vhosts')['hostname']['sitename']['app_url']
这将导致 value
。
如果您正在尝试create_resources()
,那么您可能希望将散列构建为资源散列的散列。例如,希拉:
packages:
gcc:
ensure: installed
gfortran:
ensure: absent
使用木偶:
create_resources(hiera_hash('packages'))
我正在为我的网络服务器构建一个结构。我在 hiera 中进行了设置,但我似乎无法让 puppet 返回正确的类型。
在common.yaml
vhosts:
hostname:
sitename:
app_url: value
app_type: value
每个虚拟主机和多个虚拟主机有多个站点。在我的清单中,我将创建文件夹结构和其他设置任务,但目前我什至无法让它遍历网站。
当前清单:
define application($app_name, $app_url) {
notice("App Type: ${app_type}")
notice("App Url: ${app_url}")
}
$vhosts = hiera('vhosts')
$vhosts.each |$vhost| {
create_resources(application, $vhost)
}
我得到的错误是 create_resources
需要哈希。但是,如果我键入 cast $vhost
,我会发现它不是哈希而是元组。
我是如何从我的 yaml 散列中得到元组的?有没有更好的方法来迭代此数据集以获得我需要的内容?
第二个示例中的 https://docs.puppet.com/puppet/latest/reference/function.html#each 解释了为什么你有一个元组。
给定一个 Hiera 哈希:
vhosts:
hostname:
sitename:
app_url: value
app_type: value
您可以像下面这样对其进行迭代:
hiera_hash('vhosts').each |String $hostname, Hash $hostname_hash| {
# $hostname is 'hostname'
# $hostname_hash is { hostname => { sitename => { app_url => value, app_type => value } } }
$hostname_hash.each |String $sitename, Hash $sitename_hash| {
# $sitename is 'sitename'
# $sitename_hash is { sitename => { app_url => value, app_type => value } }
$sitename_hash.each |String $key, String $value| {
# first loop $key is app_url and $value is 'value'
# second loop $key is app_type and $value is 'value'
}
}
}
当然,您可以随时访问哈希值,例如
hiera_hash('vhosts')['hostname']['sitename']['app_url']
这将导致 value
。
如果您正在尝试create_resources()
,那么您可能希望将散列构建为资源散列的散列。例如,希拉:
packages:
gcc:
ensure: installed
gfortran:
ensure: absent
使用木偶:
create_resources(hiera_hash('packages'))