5

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

4

2 回答 2

8

我认为这是不可能的:

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')}"
于 2015-01-09T13:51:15.920 回答
3

希拉使用 . 在字符串插值中查找数组或哈希中的子元素。将您的 hiera 代码更改为如下所示:

keepalived:
  cluster_name: "cluster.example.lan"
  cluster_ip: "192.168.1.10"
  cluster_nic: "eth0"
haproxy:
  bind_address: %{hiera('keepalived.cluster_ip')}

对于数组,您使用数组索引(基于 0)而不是哈希键。

请参阅插值散列或数组元素

于 2016-09-02T16:35:41.250 回答