Puppet 包含/声明两个类,它们都包含相同的资源和名称
我有两个木偶模块Puppet 包含/声明两个类,它们都包含相同的资源和名称,puppet,Puppet,我有两个木偶模块m1和m2。请参阅以下具有相同资源类型和名称的示例模块: class m1 { service {'firewalld': ensure => 'stopped', enable => 'false', } ... // more resource types } class m2 { service {'firewalld': ensure => 'running', enable => 'true',
m1
和m2
。请参阅以下具有相同资源类型和名称的示例模块:
class m1 {
service {'firewalld':
ensure => 'stopped',
enable => 'false',
}
... // more resource types
}
class m2 {
service {'firewalld':
ensure => 'running',
enable => 'true',
hasrestart => true,
subscribe => Exec['firewall-cmd'],
}
package {'httpd':
ensure => 'present',
}
exec { 'firewall-cmd':
command => "firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent",
path => "/usr/bin/",
refreshonly => true,
subscribe => Package['httpd'],
}
... // more resource types
}
我想将这两个模块应用于多个节点。当我尝试应用这些模块时,它会给出错误资源类型的重复声明
我不熟悉木偶。我曾尝试使用常见的资源类型设计第三个模块,在将第三个模块m3
继承到m1
和m2
之后,它给了我一个错误参数'sure'已经设置在Service puppet上
如何设计模块以消除这些错误?
我不想创建单个模块,因为对于某些节点,我只想应用
m1
或m2
,而不是两者都应用。每个节点的每个资源只能存在于一个位置。这是事实,即使他们匹配
我建议将多个模块所需的资源移动到它们自己的模块中,并
将其从其他模块中删除。在这种情况下,这意味着创建一个firewalld
模块。一个类禁用并停止firewalld
,另一个类启用并启动firewalld
。从完全不可知论的角度来看,对于单个系统来说,这些配置是互不兼容的。Puppet在这里做了正确的事情,防止了这种不可能的状态。@MattSchuchard-即使我更改了那些属性的值,比如“确保”,我也会得到同样的错误。。。。由于使用了类似include的类声明(这是关键),第三个模块的类的任何类参数定制都是通过自动数据绑定完成的。