我试图找出如何在使用Puppet配置的Ruby模板erb文件中使用Facter事实。
示例Ruby模板变量
zk.l.conn=
Puppet的预期配置文件输出
zk.l.conn=ip-xx-31-xx-xxx.ec2.internal:2181,ip-xxx-31-xx- xxx.ec2.internal:2181,ip-172-xxx-xxx-xx.ec2.internal:2181
事实数据:
"zk-internal": [
{
"host": "ip-xx-31-xx-xxx.ec2.internal",
"port": 2181,
"priority": 2,
"weight": 10
},
{
"host": "ip-xxx-31-xx-xxx.ec2.internal",
"port": 2181,
"priority": 3,
"weight": 10
},
{
"host": "ip-172-xxx-xxx-xx.ec2.internal",
"port": 2181,
"priority": 1,
"weight": 10
}
],
答案 0 :(得分:2)
简而言之:
zk.1.conn=<%= @facts['zk-internal'].map { |h| "#{h['host']}:#{h['port']}" }.join(',') %>
@facts['zk-internal']
允许您访问结构化事实值,因为连字符@zk-internal
不能成为有效的变量名称。
.map { |h| "#{h['host']}:#{h['port']}" }
遍历每个元素并返回包含&#34; host:port&#34;的新字符串。从每个元素,所以你有一个主机/端口数组返回。
.join(',')
从数组中返回一个字符串,每个元素都以逗号分隔。
输出:
zk.1.conn=ip-xx-31-xx-xxx.ec2.internal:2181,ip-xxx-31-xx-xxx.ec2.internal:2181,ip-172-xxx-xxx-xx.ec2.internal:2181
(在Puppet 4.7上测试)