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

时间:2015-04-22 19:08:51

标签: class inheritance puppet encapsulation devops

我试图处理以下情况:

class profile:mq {
include rabbitmq
}

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

我想使用hiera自动查找通过profile :: mq类填充rabbitmq中的参数(例如profile :: mq:rabbitmq :: user:" value&#34 ;, not rabbitmq :: user: "价值")我的猜测是封装rabbitmq但不知道如何在puppet中进行。

3 个答案:

答案 0 :(得分:2)

你只需要定义:

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

hiera层次结构中的正确配置文件中。来自hiera的值将在accont中自动获取。

答案 1 :(得分:2)

自动数据绑定:良好的计划。

但是,它根本无法按照您的建议行事。给定类查找其参数值的层次结构键仅取决于类和参数名称。它们独立于该类的任何和所有声明的轨迹。不可能是这样,因为可以为同一个目标节点评估同一个类的多个声明,并且 - 因为类是单例 - 它们都声明了相同的类(实例)。

可能能够通过将rabbitmq参数值放在Hiera层次结构的特定于配置文件的级别中来实现您所追求的目标。这对我来说不太合适,但它可以很好地满足你的目的。

答案 2 :(得分:-2)

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

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

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

您可以使用rabbitmq而不是class { rabbitmq: params }来实例化include课程,这样您就可以将profile::mq参数传递给rabbitmq课程。

希望这有帮助