我在yaml文件中有以下定义:
keepalived:
cluster_name: "cluster.example.lan"
cluster_ip: "192.168.1.10"
cluster_nic: "eth0"
haproxy:
bind_address: %{hiera('keepalived::cluster_ip')}
结果在bind_address
我得到一个空字符串。
如果我使用%{hiera('keepalived')}
我已经打印了整个哈希,但我只需要来自此哈希的cluster_ip
。如何查找cluster_ip
?
答案 0 :(得分:8)
我认为不是possible:
Hiera只能插入值为字符串的变量。 (来自Puppet的数字也作为字符串传递,可以安全使用。)您不能插入值为布尔值的数字,数字不是来自Puppet,数组,哈希,资源引用或显式的undef值。
此外,Hiera无法插入任何数组或散列的单个元素,即使该元素的值是字符串。
您始终可以将cluster_ip定义为变量:
common::cluster_ip: "192.168.1.10"
而不是使用它:
keepalived:
cluster_name: "cluster.example.lan"
cluster_ip: "%{hiera('common::cluster_ip')}"
cluster_nic: "eth0"
haproxy:
bind_address: "%{hiera('common::cluster_ip')}"
答案 1 :(得分:3)
Hiera使用了。在字符串插值中查找数组或散列中的子元素。将您的hiera代码更改为:
keepalived:
cluster_name: "cluster.example.lan"
cluster_ip: "192.168.1.10"
cluster_nic: "eth0"
haproxy:
bind_address: %{hiera('keepalived.cluster_ip')}
对于数组,使用数组索引(基于0)而不是散列键。