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",
}
}
但是,无法从“销售”配置文件中设置参数。
其思想是,对于基类,某些值始终相同,而某些值则因部门而异
但是,无法从“销售”配置文件中设置参数
不完全是。不允许的是,在构建一个清单时,为同一个类使用两个不同的类似资源的声明。如果您甚至使用了一个,那么必须确保目录生成器计算的是该类的第一个(或唯一一个)声明
要理解这一点,您需要了解,分配参数值并不是您正在使用的声明的主要目的。其主要目的是指定所讨论的类首先应包含在目录中。在为该目标服务时,值在类的第一个声明求值点绑定到类的所有参数。因此,您的两个类声明并不相互补充。相反,它们相互冲突
但是,即使为classbase
指定的参数值与classprofile::base
声明的参数值相同,Puppet仍然会反对classprofile::department::sales::base
的所有使用。为了简化计算并绝对确保避免不一致性,它实现了比实际需要更强的约束:任何给定类的第一个经过计算的声明都可能是类似资源的声明
注意:实际上指定了一个更强大的约束:“类似资源的类声明要求只声明一次给定的类。”然而,在实践中,这是一种简化(在引入参数化类以来发布的Puppet的每个版本中)。这可能是受以下事实的启发:木偶清单的求值顺序可能很难预测,因此,如果在不同清单中使用类似include的声明以及同一类的类似资源的声明,则很难确保始终首先求值类似资源的声明
其思想是,某些值对于基始终是相同的
课程,有些课程因部门而异
在大多数情况下,最好完全避免类似资源的类声明。Hiera识别数据源的层次结构(因此得名),并支持在不同级别指定不同的参数,甚至以更高的优先级覆盖一个级别的数据
因此,我的建议是利用Hiera为类
base
分配适当的参数值。具体问题有很多种解决方法。请您具体说明您的问题是什么?我有一个“通用”模块base
,其中一些参数将适用于我想从profile::base
设置的整个环境,其他特定于我要从profile::department::sales::base