使用傀儡查找函数动态检索每个数据中心、区域、网络租户和环境的服务器角色



我正在为一个主从型应用程序编写一个自定义Puppet 7配置文件,它需要根据每个数据中心、区域、网络租户和环境动态检索从服务器配置中的主服务器主机名。我在Puppet 7环境中定义了以下模板变量:

<%= $facts[puppet_datacenter] %>
<%= $facts[puppet_zone] %>
<%= $facts[puppet_tenant] %>
<%= $facts[puppet_department] %>
<%= $facts[puppet_role] %>
<%= $facts[puppet_environment] %>
<%= $facts[location_id] %>

我需要动态地检索每个数据中心、区域、网络租户和环境的主服务器主机名,以便我可以加入应用程序集群中的从服务器。谁能给我举个例子,这是如何实现的?

我尝试了以下方法:

  1. 使用因子-p在命令行上打印事实效果很好
  2. 查看文档-使用查找,exec或if elseif都是有前途的解决方案,但我找不到扩展的代码示例,给出了一个想法,如何在不花费2-3天在每种方法上解决它的情况下做到这一点。

我需要动态地检索每个数据中心、区域、网络租户和环境的主服务器主机名

有一件事和其他的不一样。Puppet环境主要是您的Puppet基础设施的属性,而其余的主要是所管理的机器的属性。这很重要,至少因为

  • Puppet已经知道每个节点的环境(假设您有一个Puppet站点正在运行)。
  • 就Hiera所涉及的范围而言,您可以将每个环境的数据划分为内置功能。

其他数据需要由某种自定义机制提供,在您的例子中,这显然是一组自定义事实。这很好。所以现在的问题是如何使用这些数据来适当地配置从节点。

在某种程度上,这取决于你想要的动态程度。有很多选择,但最有前途的两个是

  1. 将服务器主机名数据放入Hiera数据源. 如何做到这一点有几种不同的方法,但最惯用的方法是在每个环境级的Hiera配置中为(中心、区域、租户)三元组的每个组合创建一个层次结构级别。在每个这样的组合的数据中,记录适当的服务器主机名。这将使您可以通过自动数据绑定到类参数或通过显式使用lookup()在清单中访问它,并在后台处理节点与中心、区域、租户和环境匹配的所有细节。

  1. 让服务器为从服务器导出适当的资源收集和使用最自然的方法是创建一个已定义的类型,包含从服务器必须应用的配置细节(至少那些依赖于主服务器细节的配置细节),并让管理主服务器应用程序细节的类导出该资源的实例,供匹配的从服务器收集和应用。

选项(1)要求您明确跟踪哪个是每个组的主服务器,并使您的Hiera数据保持最新。选项(2)将允许从服务器更动态地发现适当的主服务器,而不需要显式地管理映射,但它有点神奇。

谁能给我一个例子,这是如何实现的?

有很多基于事实值设置Hiera层次结构级别的例子,依赖Hiera进行自动数据绑定的例子,以及显式查找Hiera数据的例子,在SO和其他地方都有。还有很多导出资源使用的例子,最典型的例子是管理/etc/hosts文件。

但是对外部资源的请求在这里是离题的,我不再为这个答案写定制的例子——这个问题太宽泛了,这个答案已经很长了。如果你在实施这些方法中的一种或另一种时遇到了麻烦,那么一个专门针对这种困难的新问题可能会成为这里的主题。

最新更新