我正试图弄清楚如何使用hiera来设置类参数的值。我用两个简单的类来测试:testhiera和testhiera2
以下是这些类别:
[root@puppet-el7-001 modules]# cat testhiera/manifests/init.pp
class testhiera (
$haproxy_cert_content = 'unknown' ,
) {
notify {"cert is $haproxy_cert_content":}
}
[root@-puppet-el7-001 modules]# cat testhiera2/manifests/init.pp
class testhiera2 (
$haproxy_cert_content = 'unknown' ,
) {
notify {"number two cert is $haproxy_cert_content":}
}
这是我的/etc/puppletlabs/pupput/hiera.yaml文件
---
:backends:
- yaml
:hierarchy:
- defaults
- "%{clientcert}"
- "%{environment}"
- global
:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /var/lib/hiera on *nix
# - %CommonAppData%PuppetLabshieravar on Windows
# When specifying a datadir, make sure the directory exists.
:datadir: /root/puppetmaster/hiera/ost-el7
我有这个文件/root/putymaster/hiera/ost-el7/defaults.yaml
一个附带问题:我必须将文件命名为"defaults.yaml"吗?如何使用其他文件名
---
testhiera::haproxy_cert_content: "n
-----BEGIN CERTIFICATE-----n
blah blah blhan
-----END RSA PRIVATE KEY-----n
blah blah blhan
-----BEGIN CERTIFICATE-----n
blah blah blhan
-----END CERTIFICATE-----n
"
当我像这样执行我的木偶类。。。
# puppet apply -e 'include testhiera'
我得到了预期的输出:
Notice: Compiled catalog for puppet-el7-001.cisco.com in environment production in 0.08 seconds
Notice: cert is
-----BEGIN CERTIFICATE-----
blah blah blha
-----END RSA PRIVATE KEY-----
blah blah blha
-----BEGIN CERTIFICATE-----
blah blah blha
-----END CERTIFICATE-----
Notice: /Stage[main]/Testhiera/Notify[cert is
-----BEGIN CERTIFICATE-----
blah blah blha
-----END RSA PRIVATE KEY-----
blah blah blha
-----BEGIN CERTIFICATE-----
blah blah blha
-----END CERTIFICATE-----
]/message: defined 'message' as 'cert is
-----BEGIN CERTIFICATE-----
blah blah blha
-----END RSA PRIVATE KEY-----
blah blah blha
-----BEGIN CERTIFICATE-----
blah blah blha
-----END CERTIFICATE-----
'
Notice: Finished catalog run in 0.17 seconds
我的问题是,将propoxy_cert_content数据获取到testhiera2类?我必须将defaults.yaml文件更改为这样吗。。。
---
testhiera::haproxy_cert_content: "n
-----BEGIN CERTIFICATE-----n
blah blah blhan
-----END RSA PRIVATE KEY-----n
blah blah blhan
-----BEGIN CERTIFICATE-----n
blah blah blhan
-----END CERTIFICATE-----n
"
testhiera2::haproxy_cert_content: "n
-----BEGIN CERTIFICATE-----n
blah blah blhan
-----END RSA PRIVATE KEY-----n
blah blah blhan
-----BEGIN CERTIFICATE-----n
blah blah blhan
-----END CERTIFICATE-----n
"
基本上只是剪切-n-投射行并将testhiera更改为testhiera2?
我希望有人能给我一个更好的方法。
感谢
在Hiera中,您可以通过使用Hiera查找函数来重用已经定义的变量。在您的示例中,它将是:
testhiera2::haproxy_cert_content:"%{hiera('testhiera::haproxy_cert_content')}"
对于次要问题:Hiera将按照hiera.yaml
中提供的相同顺序在文件中查找变量。(阅读有关层次结构的内容)因此,在您的配置中,首先它将检查文件defaults.yaml
。如果在那里找不到定义的变量,它将尝试计算变量clientcert
,并在文件value_of_clientcert.yaml
中查找,然后在文件value_of_environment.yaml
中查找,最后在global.yaml
中查找。
您不必将文件命名为defaults.yaml
。根据上面的描述,所有与层次结构配置匹配的东西都会很好。
*顺便说一句,如果您在层次结构中使用事实,请将::
放在变量名称之前,因此%{::facter_fact}
。