如何使用 Ruby 模板中的 Facter 值与 Puppet
How to use Facter values in Ruby template with Puppet
我想弄清楚如何在使用 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
}
],
简而言之:
zk.1.conn=<%= @facts['zk-internal'].map { |h| "#{h['host']}:#{h['port']}" }.join(',') %>
@facts['zk-internal']
允许您访问结构化事实值,使用它是因为 @zk-internal
由于连字符而不是有效的变量名称。
.map { |h| "#{h['host']}:#{h['port']}" }
遍历每个元素和 returns 个包含每个元素的 "host:port" 的新字符串,因此您返回了一个 hosts/ports 的数组。
.join(',')
returns 来自数组的字符串,每个元素以逗号分隔。
这输出:
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 上测试)
我想弄清楚如何在使用 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
}
],
简而言之:
zk.1.conn=<%= @facts['zk-internal'].map { |h| "#{h['host']}:#{h['port']}" }.join(',') %>
@facts['zk-internal']
允许您访问结构化事实值,使用它是因为 @zk-internal
由于连字符而不是有效的变量名称。
.map { |h| "#{h['host']}:#{h['port']}" }
遍历每个元素和 returns 个包含每个元素的 "host:port" 的新字符串,因此您返回了一个 hosts/ports 的数组。
.join(',')
returns 来自数组的字符串,每个元素以逗号分隔。
这输出:
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 上测试)