我有一个用 Java 实现的服务,它依赖于 3 个属性文件。我已经为公共属性模块中的每个属性文件定义了“定义”,并从服务特定模块中使用它们。属性文件之一的“定义”如下所示:
define properties::rabbitmq (
$property_file,
$service_name,
$rabbitmq_host,
$rabbitmq_username,
$rabbitmq_password,
$rabbitmq_port,
$rabbitmq_vhost) {
file { $property_file:
ensure => file,
content => template('config/rabbitmq.properties.erb'),
mode => '0644',
notify => Service[$service_name],
}
}
我在我的木偶代码中遵循角色和配置文件模式,并在服务特定配置文件中进行所有层次查找。现在正因为如此,每当属性文件发生更改时,我都需要对使用该属性文件的所有 puppet 模块进行级联更改。配置文件(分层查找)、模块 init.pp(从构造函数中添加/删除参数)和 config.pp(为属性文件调用“定义”时的参数调整)需要更改。
我觉得可以通过在属性文件的“定义”中合并 hiera 查找来解决上述问题,如下所示:
define properties::rabbitmq ($property_file, $service_name,) {
$rabbitmq_host = hiera('rabbitmq_host')
$rabbitmq_username = hiera('rabbitmq_username')
$rabbitmq_password = hiera('rabbitmq_password')
$rabbitmq_port = hiera('rabbitmq_port')
$rabbitmq_vhost = hiera('rabbitmq_vhost')
file { $property_file:
ensure => file,
content => template('config/rabbitmq.properties.erb'),
mode => '0644',
notify => Service[$service_name],
}
}
但是,以上违反了角色和配置文件模式。以上是在模块中进行分层查找,而不是在配置文件中进行。现在,该模块对 hiera 具有紧密的依赖关系。它是一个内部模块(不适合 puppet forge),我想,为了代码可维护性而违反准则应该是可以的。
我在上面征求其他人的意见。