【问题标题】:Puppet - How to use variables defined in manifests with hieraPuppet - 如何使用 hiera 清单中定义的变量
【发布时间】:2015-07-09 18:48:45
【问题描述】:

有没有办法通过 hiera 使用在一些清单中定义的变量?

我是这样尝试的:

ma​​nifest.pp

if $::ipaddress_bond0 {
  $primary_interface = 'bond0'
  notify{"$primary_interface":}
}
else {
  $primary_interface = 'eth0'
  notify{"$primary_interface":}
}

hiera.yaml

some_config:
  server:
    foo:
      bar: "%{::primary_interface}"

【问题讨论】:

    标签: puppet hiera


    【解决方案1】:

    是的,它是possible。看例子:

    test.pp

    class nodes::test
    {
      $value1 = 'abc'
      $value2 = hiera('test::value2')
      $value3 = hiera('test::value3')
    
      notify{ " v1 ${value1}": }
      notify{ " v2 ${value2}": }
      notify{ " v3 ${value3}": }
    }
    
    include nodes::test
    

    test.yaml

    test::value2: "%{value1}"
    test::value3: "%{value4}"
    

    运行测试:

    puppet apply  test.pp 
    

    注意:v1 abc

    注意:v2 abc

    注意:v3

    请记住,在 hiera 中使用 puppet 变量是 really bad practice

    【讨论】:

    • 感谢您的快速回答并指出这似乎是一个糟糕的解决方案。我尝试这样做的原因是为了确保我始终获得eth0bond0 的IP 地址,而不必“希望”$::ipaddress 中的值是正确的。如果$::ipaddress 是获取eth0bond0 的IP 而不是随机获取例如IP 的安全解决方案,您有经验吗? eth1 有时?我不能使用$::ipaddress_eth0$::ipaddress_bond0,因为这对我来说太静态了。
    • 根据描述:docs.puppetlabs.com/facter/2.4/core_facts.html#ipaddress "在 Unix 上做了一个 ifconfig,并返回它找到的第一个非 127.0.0.0/8 子网 IP。"
    • 我也读到了 - 但问题是它可能会发生 - 因为例如奇怪的 udev 规则 eth1 出现在 eth0 前面,因为 facter 似乎只是运行 Facter::Util::IP.exec_ifconfig(["2>/dev/null"] 并采用第一个非 127.x 地址 if match and not /^127\./.match(match[1]) ip = match[1] break end 因为文档中的建议是更好地使用自定义事实,所以我创建了一个事实上,我首先尝试在清单中使用上述逻辑。再次感谢您为我指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多