【问题标题】:Iterate over a deeply nested hiera hash in puppet manifest迭代 puppet manifest 中深度嵌套的 hiera 哈希
【发布时间】:2017-03-29 16:42:12
【问题描述】:

我正在为我的网络服务器构建一个结构。我在 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 哈希中获取元组?有没有更好的方法来迭代这个数据集以获得我需要的东西?

【问题讨论】:

    标签: puppet hiera


    【解决方案1】:

    在第二个示例中,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'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2016-10-31
      • 1970-01-01
      相关资源
      最近更新 更多