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的类声明(这是关键),第三个模块的类的任何类参数定制都是通过自动数据绑定完成的。