1

パペットを含む特定の構成ファイルをすべてのコンピューターに出荷しています。このクラスを呼び出しましょう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
}

ただし、パペットが最終的にどのファイルを出荷するかをどのように決定するのか疑問に思っています。パペットには実行順序がないため、現在のアプローチが機能しないように思えます (さらに、リソースfileが 2 回定義されますが、これも機能しません)。

いくつかのトップレベルクラスに含まれている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 に答える