我试图像这样连接人偶清单中的字符串:
file_line {'Append to /etc/hosts':
ensure => present,
line => "${networking['ip'] + '\t'}${networking['fqdn'] + '\t'}${networking['hostname']}",
match => "${'^#?'+ networking['ip'] + '\s+' + networking['fqdn'] + '\s+' + networking['hostname']}",
path => '/etc/hosts'
}
我或者遇到语法错误,或者在上述情况下:
值”不能转换为数字
我猜这意味着它不喜欢加号运算符。
那么如何在match
和line
属性中插入字符串?
答案 0 :(得分:3)
这里的问题是运算符+
仅限于Numeric
类型(documentation)。不能与String
类型一起使用。但是,在不尝试字符串连接的情况下,space和正则表达式仍可以照常使用。这些仅需放置在变量插值之外。因此:
file_line { 'Append to /etc/hosts':
ensure => present,
line => "${networking['ip']}\t${networking['fqdn']}\t${networking['hostname']}",
match => "^#?${networking['ip']}\s+${networking['fqdn']}\s+${networking['hostname']}",
path => '/etc/hosts'
}
应解决类型不匹配和+
运算符的问题。
答案 1 :(得分:1)
我知道您已经找到答案了,但是使用host
管理/etc/hosts
可以使生活更轻松:
host {
"localhost": ip => "127.0.0.1";
"$::puppet_server":
ip => "1.2.3.4",
host_aliases => [ "puppetserver" ],
;
"dns-01.tld":
ip => "1.2.3.5",
host_aliases => [ "dns-01" ],
;
"dns-02.tld":
ip => "1.2.3.6",
host_aliases => [ "dns-02" ],
;
}