puppet在define中合并两个变量

时间:2014-01-28 05:32:24

标签: arrays puppet facter

我们在自己的子接口IP上运行多个子接口和多个应用程序,因此我尝试使用facter变量来使用$name迭代我的循环

这是我在facter命令输出中的界面

ipaddress_eth0_0 => 10.3.68.98
ipaddress_eth0_1 => 10.3.68.99
ipaddress_eth0_2 => 10.3.68.100
ipaddress_eth0_3 => 10.3.68.101

我的清单文件

define myapp {
     exec {"$name":
        command => /bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"$ipaddress_eth0_$name\"/' /opt/app.$name/bin/setenv.sh
}

myapp { [ "0", "1" , "2", "3" ]: }

一些$ipaddress_eth0_$name如何不起作用:(它没有解析这个变量,我如何加入两个变量?

3 个答案:

答案 0 :(得分:1)

查看内联模板功能

   define myapp {
      $myip  =  inline_template("<%= ipaddress_eth0_${name} %>")
      exec {"$name":
        command => "/bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"$myip\"/' /opt/app.${name}/bin/setenv.sh"
   }

答案 1 :(得分:1)

stdlib库有一个getvarhttps://github.com/puppetlabs/puppetlabs-stdlib#getvar)函数可以解决你的问题。

答案 2 :(得分:0)

你可以尝试用大括号包装变量

E.g。

   define myapp {
      exec {"$name":
        command => /bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"${ipaddress_eth0}_${name}\"/' /opt/app.${name}/bin/setenv.sh
   }

<强>更新

你能用双引号括起命令,例如

   define myapp {
      exec {"$name":
        command => "/bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"${ipaddress_eth0}_${name}\"/' /opt/app.${name}/bin/setenv.sh"
   }