连接 file_line 资源中的字符串
Concatenate strings in file_line resource
我正在尝试像这样连接人偶清单中的字符串:
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'
}
我要么遇到语法错误,要么遇到上述情况:
The value '' cannot be converted to Numeric
我猜这意味着它不喜欢加号运算符。
那么如何在 match
和 line
属性中插入字符串?
这里的问题是运算符 +
仅限于 Numeric
类型 (documentation)。它不能与 String
类型一起使用。但是,间距和正则表达式仍然可以正常使用而无需尝试字符串连接。这些只需要放在变量插值之外。因此:
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'
}
应该可以解决类型不匹配和 +
运算符的问题。
我知道你已经得到了答案,但你可以使用 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" ],
;
}
我正在尝试像这样连接人偶清单中的字符串:
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'
}
我要么遇到语法错误,要么遇到上述情况:
The value '' cannot be converted to Numeric
我猜这意味着它不喜欢加号运算符。
那么如何在 match
和 line
属性中插入字符串?
这里的问题是运算符 +
仅限于 Numeric
类型 (documentation)。它不能与 String
类型一起使用。但是,间距和正则表达式仍然可以正常使用而无需尝试字符串连接。这些只需要放在变量插值之外。因此:
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'
}
应该可以解决类型不匹配和 +
运算符的问题。
我知道你已经得到了答案,但你可以使用 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" ],
;
}