Puppet 傀儡。使用带有2个变量的define

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

我有配置文件/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
        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
    }
}