繁体   English   中英

从希拉评估木偶清单中的哈希值

[英]Assess hashes value in puppet manifest from hiera

我在调用人偶清单中的哈希值时遇到困难,如下所示,

hiera .yaml文件:

---
users:
  app1:
    ensure: 'present'
    home: '/home/app1'
    password: '!!'
    password_max_age: '99999'
    password_min_age: '0'
  app2:
    ensure: 'present'
    home: '/home/app2'
    password: '!!'
    password_max_age: '99999'
    password_min_age: '0'

我的木偶清单:

class profile::sec::sec_model {
hiera_hash('users').each |String $user, Hash $user_hash| {
    $user_hash.each |String $attr, String $value| {
        user { "$user":
            "${attr}" => "${value}"
       }
    }
}
}

我的目标是创建用户app1和app2,如果使用如下所示的常规清单,我可以创建它,如下例所示,

user { 'app1':
        ensure            => "present",
        home              => "/home/app1",
        password          => '!!',
        password_max_age  => '99999',
        password_min_age  => '0',
        shell             => '/bin/bash',
    }
}

但是,使用hiera时,我从测试p客户端服务器收到以下错误,

错误:无法从远程服务器检索目录:服务器上的错误500:服务器错误:语法错误位于”(文件:/etc/puppetlabs/code/environments/xxxxx/site/profile/manifests/xxx/sec_model.pp,行:11,列:13)在节点xxxx.xxx.com上

当我查看清单时,一切都很好,但是无法确定调用哈希值的代码哪一侧是错误的。

是的,这不是有效的语法。

因此,您应该将YAML重构为:

---
profile::sec::sec_model::users:
  app1:
    ensure: present
    home: /home/app1
    password: '!!'
    password_max_age: 99999
    password_min_age: 0
  app2:
    ensure: present
    home: /home/app2
    password: '!!'
    password_max_age: 99999
    password_min_age: 0

然后为您的清单使用以下任一方法:

class profile::sec::sec_model(Hash[String,Hash] $users) {
  $users.each |$user,$user_hash| {
    user { $user: * => $user_hash }
  }
}

或者,简单地:

class profile::sec::sec_model(Hash[String,Hash] $users) {
  create_resources(user, $users)
}

请注意,并非Puppet社区中的每个人都喜欢使用create_resources。

进一步说明:

  • 这个问题是非常相似, 较早前的问题。 有关“为什么”的更多信息和更多参考,请参见此处。

  • 另请注意,我在YAML中删除了多余的标点符号。 我个人认为,最好的做法是仅在实际需要的YAML文件中包括标点符号,因为它更干净,并且还迫使您学习何时以及为什么需要在YAML中标点符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM