Config 傀儡。以最有效的方式更改任何配置/文本文件
我正在学习如何使用木偶。现在我正在尝试更改nscd的配置文件。我需要更改这些行:Config 傀儡。以最有效的方式更改任何配置/文本文件,config,puppet,Config,Puppet,我正在学习如何使用木偶。现在我正在尝试更改nscd的配置文件。我需要更改这些行: server-user nscd paranoia yes 让我们假设完整配置如下所示: $cat/etc/nscd/nscd.conf logfile /var/log/nscd.log threads 4 max-threads 32 s
server-user nscd
paranoia yes
让我们假设完整配置如下所示:
$cat/etc/nscd/nscd.conf
logfile /var/log/nscd.log
threads 4
max-threads 32
server-user nobody
stat-user somebody
debug-level 0
reload-count 5
paranoia no
restart-interval 3600
之前,我编写了这样一个模块来替换所需的行,如下所示:
include nscd
class nscd {
define line_replace ($match) {
file_line { $name:
path => '/etc/nscd/nscd.conf',
line => $name,
match => $match,
notify => Service["nscd"]
}
}
anchor{'nscd::begin':}
->
package { 'nscd':
ensure => installed,
}
->
line_replace {
"1" : name => "server-user nscd", match => "^\s*server-user.*$";
"2" : name => "paranoia yes", match => "^\s*paranoia.*$";
}
->
service { 'nscd':
ensure => running,
enable => "true",
}
->
anchor{'nscd::end':}
}
是否有可能以更有效的方式实现同样的目标?使用数组或类似的方式?我建议您使用,以便像这样轻松管理INI样式的文件,但您也可以利用以下功能:
include nscd
class nscd {
$server_user_line = 'server-user nscd'
$paranoia_line = 'paranoia yes'
$defaults = {
'path' => '/etc/nscd/nscd.conf',
'notify' => Service["nscd"],
}
$lines = {
$server_user_line => {
line => $server_user_line,
match => "^\s*server-user.*$",
},
$paranoia_line => {
line => $paranoia_line,
match => "^\s*paranoia.*$",
}
}
anchor{'nscd::begin':}
->
package { 'nscd':
ensure => installed,
}
->
create_resources(file_line, $lines, $defaults)
->
service { 'nscd':
ensure => running,
enable => "true",
}
->
anchor{'nscd::end':}
}
所以我写了这样的代码:
class nscd($parameters) {
define change_parameters() {
file_line { $name:
path => '/etc/nscd.conf',
line => $name,
# @name.split[0..-2] will remove last element,
# does not matter how many elements in line
match => inline_template('<%="^\\s*"+(@name.split[0..-2]).join("\\s*")+".*$" %>'),
}
}
anchor{'nscd::begin':}
->
package { 'nscd':
ensure => installed,
}
->
change_parameters { $parameters: }
->
service { 'nscd':
ensure => 'running',
enable => true,
hasrestart => true
}
->
anchor{'nscd::end':}
}
然后数组中的每个元素都转到change_parameters函数作为$name参数,然后inline_模板将生成带有ruby单行代码的regexp
列表/数组中的每个元素都是相同的
但无论如何,我认为最好使用erb模板进行此类更改。您是否试图允许使用更舒适的符号?您始终可以使用自定义的
定义来包装行\u replace
类型。是的,其他变体对我来说很有趣。augeas
是一个选项,或者使用erb
模板来管理整个配置,其中augeas无法与任何配置一起正常工作。例如,我可以在sshd_config*中更改参数,在*nscd.conf中更改超高。但也许这个问题在我手里。)谢谢另一个变体是创建资源。这不是ini样式配置。
class { 'nscd':
parameters =>
[' server-user nscd',
' paranoia yes',
' enable-cache hosts yes smth',
' shared hosts yes']
}