Puppet 傀儡。使用带有2个变量的define
我有配置文件/home/ipeacocks/Dropbox/nscd/nscd.conf:Puppet 傀儡。使用带有2个变量的define,puppet,declaration,Puppet,Declaration,我有配置文件/home/ipeacocks/Dropbox/nscd/nscd.conf: $ cat home/ipeacocks/Dropbox/nscd/nscd.conf logfile /var/log/nscd.log threads 4 max-threads 32 server-user nobody
$ cat home/ipeacocks/Dropbox/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
使用puppet,我想更改两行:
server-user nobody
paranoia no
对这些行:
server-user nscd
paranoia yes
因此,为了更改第一行,我可以使用这样的清单:
include nscd
class nscd {
define line_replace ($line, $match) {
file_line {'some useful info':
path => '/home/ipeacocks/Dropbox/nscd/nscd.conf',
line => $line,
match => $match
}
}
anchor{'nscd::begin':}
->
package { 'nscd':
ensure => installed,
}
->
line_replace {'test':
line => "server-user nscd",
match => "^\s*server-user.*$"
}
->
service { 'nscd':
ensure => running,
enable => "true",
}
->
anchor{'nscd::end':}
}
木偶发射:
» sudo puppet apply /home/ipeacocks/Dropbox/nscd/nscd.pp
Notice: Compiled catalog for softserve-pc.ddns.softservecom.com in environment production in 0.37 seconds
Notice: /Stage[main]/Nscd/Nscd::Line_replace[test]/File_line[some useful info]/ensure: created
Notice: Finished catalog run in 0.22 seconds
但当有两行(使用声明函数两次)时,超高:
再次推出:
» sudo puppet apply /home/ipeacocks/Dropbox/nscd/nscd.pp 1 ↵
Error: Duplicate declaration: File_line[some useful info] is already declared in file /home/ipeacocks/Dropbox/nscd/nscd.pp:10; cannot redeclare at /home/ipeacocks/Dropbox/nscd/nscd.pp:10 on node softserve-pc.ddns.softservecom.com
Error: Duplicate declaration: File_line[some useful info] is already declared in file /home/ipeacocks/Dropbox/nscd/nscd.pp:10; cannot redeclare at /home/ipeacocks/Dropbox/nscd/nscd.pp:10 on node softserve-pc.ddns.softservecom.com
有什么不对劲?是否可以同时将两对变量传递给声明的函数(使用数组或类似的方法)
我尝试过此解决方案,但对我无效:
将您的定义替换为:
define line_replace ($line, $match) {
file_line {$name:
path => '/home/ipeacocks/Dropbox/nscd/nscd.conf',
line => $line,
match => $match
}
}
我将文件行资源名称从常量更改为定义的$name参数。将文件行中的“一些有用信息”更改为$name-
define line_replace ($line, $match) {
file_line {$name:
path => '/home/ipeacocks/Dropbox/nscd/nscd.conf',
line => $line,
match => $match
}
}
您面临的问题是,第二次调用line\u replace会导致调用file\u line,其资源名为“一些有用的信息”,并且已经声明。Thank you@anshu prateek。可以将这些变量作为数组发送到定义的函数吗?见鬼,安舒,看起来你在我发布答案1分钟后才复制了我的答案。@cristi-代码片段是一样的,因为这是正确的答案。你让100个人在一个房间里,让他们做1+1,他们中的99人会有相同的答案,这并不意味着其余的98人会复制第一个:)。解释你的答案,为什么你这么做,为什么OP面临问题,你会有更高的“接受”答案。希望您能在我上面的回答中看到这一点。@ipeacocks这是可以做到的,但由于涉及到多个参数,这并不简单。我看到你现在有一个单独的问题,让我们看看是否得到了回答,否则我会再试试。
define line_replace ($line, $match) {
file_line {$name:
path => '/home/ipeacocks/Dropbox/nscd/nscd.conf',
line => $line,
match => $match
}
}