[英]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.