【问题标题】:Puppet - How to override a class when using inheritance?Puppet - 使用继承时如何覆盖类?
【发布时间】:2013-12-04 17:41:57
【问题描述】:

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

每个服务器都继承自节点“common”:

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,
    }
}

显然,这是行不通的。我怎样才能正确地做到这一点?

【问题讨论】:

    标签: class inheritance overriding puppet


    【解决方案1】:

    这是节点继承通常不受欢迎的原因之一。无论如何,这里最好的策略是为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,因为它在构建时考虑到了这种继承,并且具有非常灵活的继承策略。

    【讨论】:

    • 谢谢你,这太完美了!
    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 2011-03-11
    • 2012-05-29
    • 2012-11-20
    • 2019-06-29
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多