Class Puppet-如何在使用继承时重写类?

Class Puppet-如何在使用继承时重写类?,class,inheritance,overriding,puppet,Class,Inheritance,Overriding,Puppet,我正在使用Puppet管理我的CentOS服务器 每个服务器都从节点“公共”继承: node 'common' { class { 'ssh:server': permit_root_login => no, } #[...] Other useful classes I want to keep } node default inherits 'common' {} 我希望保留有用的“公共”节点,但只覆盖一台服务器的SSH部分: node '

我正在使用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\u root\u login
值使用一个变量,然后通过hiera或environment 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,因为它是在考虑这种继承的基础上构建的,并且具有非常灵活的继承策略。

谢谢,这太完美了!