使用hiera设置class参数?
Using hiera to set class parameters?
我正在尝试弄清楚如何使用 hiera 来设置 class 参数的值。
我正在用两个简单的 classes 测试:testhiera 和 testhiera2
这是 classes:
[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/puppet/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%\PuppetLabs\hiera\var on Windows
# When specifying a datadir, make sure the directory exists.
:datadir: /root/puppetmaster/hiera/ost-el7
我有这个文件 /root/puppetmaster/hiera/ost-el7/defaults.yaml
附带问题:我是否必须将文件命名为 "defaults.yaml"?我如何使用其他文件名?
---
testhiera::haproxy_cert_content: "\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END RSA PRIVATE KEY-----\n
blah blah blha\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END CERTIFICATE-----\n
"
当我像这样执行我的人偶时 classes ...
# 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
我的问题是获取 thehaproxy_cert_content 数据到
testhiera2 class?我是否必须将我的 defaults.yaml 文件更改为如下所示...
---
testhiera::haproxy_cert_content: "\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END RSA PRIVATE KEY-----\n
blah blah blha\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END CERTIFICATE-----\n
"
testhiera2::haproxy_cert_content: "\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END RSA PRIVATE KEY-----\n
blah blah blha\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END CERTIFICATE-----\n
"
...基本上只是剪切-n-粘贴行并将 testhiera 更改为 testhiera2?
我希望有人能告诉我更好的方法。
谢谢
在 Hiera 中,您可以使用 hiera lookup funcion 重用已定义的变量。在您的示例中,它将是:
testhiera2::haproxy_cert_content:"%{hiera('testhiera::haproxy_cert_content')}"
附带问题:Hiera 将按照 hiera.yaml
中提供的相同顺序在文件中查找变量。 (阅读有关 hiera hierarchy 的信息)因此在您的配置中,它首先会检查文件 defaults.yaml
。如果在那里找不到已定义的变量,它将尝试评估变量 clientcert
并在文件 value_of_clientcert.yaml
中查找,然后在文件 value_of_environment.yaml
中查找,最后在 global.yaml
.[= 中查找22=]
您不必为文件命名 defaults.yaml
。按照上面的描述,只要符合hiera的配置就可以了。
*顺便说一句,如果你在 hiera 层次结构中使用 facter 事实,请将 ::
放在变量名称之前,因此 %{::facter_fact}
.
我正在尝试弄清楚如何使用 hiera 来设置 class 参数的值。 我正在用两个简单的 classes 测试:testhiera 和 testhiera2
这是 classes:
[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/puppet/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%\PuppetLabs\hiera\var on Windows
# When specifying a datadir, make sure the directory exists.
:datadir: /root/puppetmaster/hiera/ost-el7
我有这个文件 /root/puppetmaster/hiera/ost-el7/defaults.yaml
附带问题:我是否必须将文件命名为 "defaults.yaml"?我如何使用其他文件名?
---
testhiera::haproxy_cert_content: "\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END RSA PRIVATE KEY-----\n
blah blah blha\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END CERTIFICATE-----\n
"
当我像这样执行我的人偶时 classes ...
# 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
我的问题是获取 thehaproxy_cert_content 数据到 testhiera2 class?我是否必须将我的 defaults.yaml 文件更改为如下所示...
---
testhiera::haproxy_cert_content: "\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END RSA PRIVATE KEY-----\n
blah blah blha\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END CERTIFICATE-----\n
"
testhiera2::haproxy_cert_content: "\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END RSA PRIVATE KEY-----\n
blah blah blha\n
-----BEGIN CERTIFICATE-----\n
blah blah blha\n
-----END CERTIFICATE-----\n
"
...基本上只是剪切-n-粘贴行并将 testhiera 更改为 testhiera2?
我希望有人能告诉我更好的方法。
谢谢
在 Hiera 中,您可以使用 hiera lookup funcion 重用已定义的变量。在您的示例中,它将是:
testhiera2::haproxy_cert_content:"%{hiera('testhiera::haproxy_cert_content')}"
附带问题:Hiera 将按照 hiera.yaml
中提供的相同顺序在文件中查找变量。 (阅读有关 hiera hierarchy 的信息)因此在您的配置中,它首先会检查文件 defaults.yaml
。如果在那里找不到已定义的变量,它将尝试评估变量 clientcert
并在文件 value_of_clientcert.yaml
中查找,然后在文件 value_of_environment.yaml
中查找,最后在 global.yaml
.[= 中查找22=]
您不必为文件命名 defaults.yaml
。按照上面的描述,只要符合hiera的配置就可以了。
*顺便说一句,如果你在 hiera 层次结构中使用 facter 事实,请将 ::
放在变量名称之前,因此 %{::facter_fact}
.