Puppet 通过其他模块访问模块的参数

Puppet access parameters of module through other module

我正在尝试处理以下情况:

class profile:mq {
include rabbitmq
}

class rabbitmq (
$user, $pass, $host ) {
...logic...
}

我想通过profile::mqclass使用hiera自动查找来填充rabbitmq中的参数(例如profile::mq:rabbitmq::user:"value",不是 rabbitmq::user: "value") 我的猜测是封装 rabbitmq 但不确定如何在 puppet 中进行封装。

您只需定义:

rabbitmq::user: some_user
rabbitmq::pass: some_password
rabbitmq::host: some_host

hiera 层次结构中的适当配置文件中。来自 hiera 的值将被独裁地考虑在内。

您还需要在 profile::mq 中声明您的参数:

class profile::mq($user, $pass, $host) {
  class { 'profile::mq':
    user => $user,
    pass => $pass,
    host => $host
  }
  ...
  ..
}

class rabbitmq($user, $pass, $host) {
  ...
}

在这里您可以使用 class { rabbitmq: params } 而不是使用 include 实例化您的 rabbitmq class,这样您就可以将 profile::mq 参数传递给 rabbitmq class.

希望这对您有所帮助

自动数据绑定:好计划。

但是,它根本无法按照您建议的方式工作。给定 class 用来查找其参数值的 hiera 键仅取决于 class 和参数名称。它们独立于 class 的任何和所有声明的轨迹。不可能是其他情况,因为相同 class 的多个声明可能会针对同一目标节点进行评估,并且 - 因为 classes 是单例 - 它们都声明相同的 class (实例)。

可以通过将 rabbitmq 参数值放在 Hiera 层次结构的特定配置文件级别中来实现您想要的。我觉得这不太合适,但它可能足以满足您的目的。