簡體   English   中英

木偶-使用繼承時如何覆蓋類?

[英]Puppet - How to override a class when using inheritance?

我正在使用Puppet管理我的CentOS服務器。

每個服務器都從“公共”節點繼承:

node 'common' {
    class { 'ssh:server':
        permit_root_login => no,
    }

    #[...] Other useful classes I want to keep
}

node default inherits 'common' {}

我想保留有用的“公共”節點,但僅覆蓋一台服務器的SSH部分:

node 'host.domain.com' inherits 'common' {
    class { 'ssh:server':
        permit_root_login => yes,
    }
}

顯然,這是行不通的。 如何正確執行此操作?

這是節點繼承通常被皺眉的原因之一。 無論如何,最好的策略是使用一個變量作為permit_root_login值,然后使用繼承通過hiera或環境init.pp初始化變量值。

因此,對於hiera,您的清單將如下所示:

node 'common' {
    class { 'ssh::server':
        permit_root_login => hiera('is_permit_root_login_enabled'),
    }
}

node 'host.domain.com' inherits 'common' {}

然后,在您的global.yaml hiera文件中,您將擁有:

is_permit_root_login_enabled: "no"

然后在您的替代yaml中, host.domain.com.yaml

is_permit_root_login_enabled: "yes"

我建議使用hiera,因為它是基於這種繼承構建的,並且具有非常靈活的繼承策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM