Puppet 将参数从配置文件传递到模块

Puppet 将参数从配置文件传递到模块,puppet,Puppet,我有一个带有init.pp类的模块“base”,该类具有以下参数: class base ( $listen_ip = "xx.xx.xx.xx", $listen_port = 3306, $admin_username = 'admin', $admin_password = 'admin', ) { ... } 然后,我创建了一个配置文件“base”,我想在其中设置一些参数: class profile::base { class { 'base':

我有一个带有
init.pp
类的模块“base”,该类具有以下参数:

class base (
   $listen_ip = "xx.xx.xx.xx",
   $listen_port = 3306,

   $admin_username = 'admin',
   $admin_password = 'admin',
)
{
...
}

然后,我创建了一个配置文件“base”,我想在其中设置一些参数:

class profile::base {
    class { 'base':
      $listen_ip = "xxx.xxx.xx.xx",
      $listen_port => 6033,
  }
}
然后是第二个配置文件,我想在其中设置用户名和密码:

class profile::department::sales::base {
    class { '::profile::base':
      $admin_username = "some_user",
      $admin_password => "some_pw",
  }
}
但是,无法从“销售”配置文件中设置参数。 其思想是,对于基类,某些值始终相同,而某些值则因部门而异

但是,无法从“销售”配置文件中设置参数

不完全是。不允许的是,在构建一个清单时,为同一个类使用两个不同的类似资源的声明。如果您甚至使用了一个,那么必须确保目录生成器计算的是该类的第一个(或唯一一个)声明

要理解这一点,您需要了解,分配参数值并不是您正在使用的声明的主要目的。其主要目的是指定所讨论的类首先应包含在目录中。在为该目标服务时,值在类的第一个声明求值点绑定到类的所有参数。因此,您的两个类声明并不相互补充。相反,它们相互冲突

但是,即使为class
base
指定的参数值与class
profile::base
声明的参数值相同,Puppet仍然会反对class
profile::department::sales::base
的所有使用。为了简化计算并绝对确保避免不一致性,它实现了比实际需要更强的约束:任何给定类的第一个经过计算的声明都可能是类似资源的声明

注意:实际上指定了一个更强大的约束:“类似资源的类声明要求只声明一次给定的类。”然而,在实践中,这是一种简化(在引入参数化类以来发布的Puppet的每个版本中)。这可能是受以下事实的启发:木偶清单的求值顺序可能很难预测,因此,如果在不同清单中使用类似include的声明以及同一类的类似资源的声明,则很难确保始终首先求值类似资源的声明

其思想是,某些值对于基始终是相同的 课程,有些课程因部门而异

在大多数情况下,最好完全避免类似资源的类声明。Hiera识别数据源的层次结构(因此得名),并支持在不同级别指定不同的参数,甚至以更高的优先级覆盖一个级别的数据


因此,我的建议是利用Hiera为类
base
分配适当的参数值。具体问题有很多种解决方法。

请您具体说明您的问题是什么?我有一个“通用”模块
base
,其中一些参数将适用于我想从
profile::base
设置的整个环境,其他特定于我要从
profile::department::sales::base