1

我正在向我的所有计算机发送一个带有 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看起来与该类相同)并将该类包含在该特定计算机的节点配置中:Asource

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

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

我也不能使用继承,class A因为class A它包含在一些顶级类中。那么我应该如何处理这种情况呢?任何指针?

4

1 回答 1

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)

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

于 2013-07-09T16:01:26.320 回答