基于局部事实将 Puppet 集中参数编码移动到变量
Moving Puppet Centralised Parameter Coding to Variables Based on a Local Fact
目前一切正常。但是,我希望将环境参数分离到他们自己的文件中,以使事情更易于管理。
目前我的 sites.pp 呼叫 class 模块:
- 环境
- 这包含所有全局参数
- 这通过使用本地事实的 if 语句保存环境参数,
- 确保在直接调用时可以访问正确的参数
- 其他模块
- 全部通过 if 语句,并且仅在本地事实的值为
1 套用于模块
模块中的参数通过完整路径引用位于环境中的值,一些示例:
- modulefile.pp
- 内容=>
template("nagios/${envs::svos}-ncpa-cfg-${envs::nagiosncpacfgver}.epp")
设备 => "${envs::devicecm_apps}",
- templetefile.epp
- <%= 范围['hostname'] %>.<%= 范围['domain'] %>\folder1\folder2<%=
范围['envs::envshort'] %>\folder3\folder4\folder5
- <%= 范围['envs::max_que'] %>
我的 envs class 越来越大,更新很危险(如果多人更新),因此我希望将环境参数移到 envs 下它们自己的子模块中。我一直在评估我的开发 Puppet 环境的变化,但正在努力让它发挥作用。我有子 classes 与名为 gen_env.
的本地集合事实同名
我的问题是我一辈子都想不出如何更新上述内容以使其正常工作。如果我手动将其直接更新到变量名,它确实可以工作,但是让它使用该变量是我迄今为止一直无法做到的事情。我已经尝试切换到在我的模块中使用 include 来加载该模块使用的设置,但是我 运行 遇到了同样的问题,即在映射内容时如何引用变量并使用变量通过 include 引用,例如“$nagiosncpacfgver = $::envs::myenvironmentname::nagiosncpacfgver”和“include envs::myenvironmentname”。
我认为可行(尚未测试)的一种方法是在我的环境中使用 include 来引用子 class 中的参数。由于内容是从 if 语句加载并直接命名的,我相信这会起作用。我仍然得到一个大的 envs 模块,但是所有参数都是通过唯一的环境值生成的。我宁愿让这个工作而不必走这条路,请问有人有解决方案吗?
我通过稍微改变我的方法解决了我的问题。我最初在最后一段提到过它。
基本上,而不是对我的“其他模块”进行更改,所有更改都针对 envs 模块。
变更内容:
- 使用 envs
中的内容为每个环境创建子 类
- Envs 更新以根据需要包含语句和参数链接
例如$nagiosncpacfgver = $::envs::myenvironmentname::nagiosncpacfgver
遗憾的是没有一个变量可以用来避免单独映射每个参数,因为我每个环境有超过 400 个。
目前一切正常。但是,我希望将环境参数分离到他们自己的文件中,以使事情更易于管理。
目前我的 sites.pp 呼叫 class 模块:
- 环境
- 这包含所有全局参数
- 这通过使用本地事实的 if 语句保存环境参数,
- 确保在直接调用时可以访问正确的参数
- 其他模块
- 全部通过 if 语句,并且仅在本地事实的值为 1 套用于模块
模块中的参数通过完整路径引用位于环境中的值,一些示例:
- modulefile.pp
- 内容=> template("nagios/${envs::svos}-ncpa-cfg-${envs::nagiosncpacfgver}.epp") 设备 => "${envs::devicecm_apps}",
- templetefile.epp
- <%= 范围['hostname'] %>.<%= 范围['domain'] %>\folder1\folder2<%= 范围['envs::envshort'] %>\folder3\folder4\folder5
- <%= 范围['envs::max_que'] %>
我的 envs class 越来越大,更新很危险(如果多人更新),因此我希望将环境参数移到 envs 下它们自己的子模块中。我一直在评估我的开发 Puppet 环境的变化,但正在努力让它发挥作用。我有子 classes 与名为 gen_env.
的本地集合事实同名我的问题是我一辈子都想不出如何更新上述内容以使其正常工作。如果我手动将其直接更新到变量名,它确实可以工作,但是让它使用该变量是我迄今为止一直无法做到的事情。我已经尝试切换到在我的模块中使用 include 来加载该模块使用的设置,但是我 运行 遇到了同样的问题,即在映射内容时如何引用变量并使用变量通过 include 引用,例如“$nagiosncpacfgver = $::envs::myenvironmentname::nagiosncpacfgver”和“include envs::myenvironmentname”。
我认为可行(尚未测试)的一种方法是在我的环境中使用 include 来引用子 class 中的参数。由于内容是从 if 语句加载并直接命名的,我相信这会起作用。我仍然得到一个大的 envs 模块,但是所有参数都是通过唯一的环境值生成的。我宁愿让这个工作而不必走这条路,请问有人有解决方案吗?
我通过稍微改变我的方法解决了我的问题。我最初在最后一段提到过它。
基本上,而不是对我的“其他模块”进行更改,所有更改都针对 envs 模块。
变更内容:
- 使用 envs 中的内容为每个环境创建子 类
- Envs 更新以根据需要包含语句和参数链接 例如$nagiosncpacfgver = $::envs::myenvironmentname::nagiosncpacfgver
遗憾的是没有一个变量可以用来避免单独映射每个参数,因为我每个环境有超过 400 个。