复杂的hiera查找不起作用

时间:2015-01-09 12:13:44

标签: puppet hiera

我在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

2 个答案:

答案 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)而不是散列键。

请参阅interpolating hash or array elements