puppet - 如何使用两个不同的类发送相同的配置文件?

时间:2013-07-09 14:48:52

标签: puppet

我正在向我的所有计算机发送带有puppet的特定配置文件。我们称这个班为class A

class A {
    # ship lightdm file
    file {
        "/etc/lightdm/lightdm.conf":
        mode => 644,
        owner => root,
        group => root,
        ensure => file,
        require => Package["lightdm"],
        source => "puppet:///modules/my_module/lightdm.conf";

    } 

}

class A实际上将通过其他类加载:

node 'somecomputer' {
    include role::my_role #(will load class A)
}

现在,某些用户需要该特定配置文件的特殊版本。所以我考虑编写一个类B(除A部分外,它看起来与source相同),并为该特定计算机的节点配置包含该类:

node 'specialcomputer' {
    include role::my_role #(will load class A)
    include B
}

但是,我想知道木偶将如何确定最终要运送哪个文件。由于木偶中没有执行顺序,在我看来,我的当前方法不起作用(加上资源file将被定义两次,这也不起作用)

我也无法在class A上使用继承,因为某些顶级类包含class A。那我该怎么处理这个案子呢?任何指针?

1 个答案:

答案 0 :(得分:2)

如果您提供多个来源,则会选择第一个可用的来源:

file {
    "/etc/lightdm/lightdm.conf":
    mode => 644,
    owner => root,
    group => root,
    ensure => file,
    require => Package["lightdm"],
    source => [ "puppet:///modules/my_module/lightdm-${::fqdn}.conf", 
                "puppet:///modules/my_module/lightdm.conf" ],
} 

然后你会在files目录中有2个文件:

files/lightdm.conf (for all hosts)
files/lightdm-specialcomputer.domain.com.conf (for the exception)

这不完全是你所要求的,但我认为这就是你想要的......