Puppet 如何在多个项目中使用Dynamic hiera.yaml重用代码?

Puppet 如何在多个项目中使用Dynamic hiera.yaml重用代码?,puppet,Puppet,我有一个傀儡主控器,傀儡模块位于该主控器上 我希望使用相同的代码和单个puppet master在不同项目的不同环境中部署代码。为了存储数据,我使用hiera。挑战在于有一些特定于项目的数据,代码是相同的 是否有一种方法可以在运行时在hiera层次结构中使用特定于项目的文件。如果我为项目A运行puppet,它将拾取hiera层次结构中的项目A特定变量,为项目B运行puppet,它将拾取项目B特定数据 通过设置多个木偶大师,我们可以实现这一点。我们怎么能用一个木偶大师来做呢?这是完全可能的!在hi

我有一个傀儡主控器,傀儡模块位于该主控器上

我希望使用相同的代码和单个puppet master在不同项目的不同环境中部署代码。为了存储数据,我使用hiera。挑战在于有一些特定于项目的数据,代码是相同的

是否有一种方法可以在运行时在hiera层次结构中使用特定于项目的文件。如果我为项目A运行puppet,它将拾取hiera层次结构中的项目A特定变量,为项目B运行puppet,它将拾取项目B特定数据


通过设置多个木偶大师,我们可以实现这一点。我们怎么能用一个木偶大师来做呢?

这是完全可能的!在
hiera.yaml
文件中,您可以根据事实设置自定义层次结构,例如:

---
:hierarchy:
  - "%{module_name}/%{::fqdn}"
  - "%{module_name}/%{::domain}"
  - "%{module_name}/global"
  - "global"

在这种情况下,如果要为环境指定不同的域名(例如
dev.site
prod.site
test.site
,等等),将查找不同的hiera文件。它适用于任何可能有用的事实(例如,
网络
环境
事实)。

我们这样做,但在
/etc/facter/facts.d
中使用基于自定义文件的事实,感谢bartavelle的回复。如何在运行时设置模块名称。例如,假设一个团队正在运行模块,那么hiera是如何找到该模块的运行时的?一个团队特定的hiera文件是如何使用的。我感谢你的帮助。沃斯普林-你是在使用代理端还是主端的自定义事实?我想在大师那边做。因为不同的团队将从控制台运行木偶。Puppet代码对于所有团队或项目都是相同的,但它们的数据可能不同。我希望hiera在层次结构的顶部拾取特定于项目的数据。
module\u name
是一个特殊变量,设置为正在加载的模块的名称,您不能自己设置它!如果你能在你的团队中找到一些不同的因素,也许会更容易些。它可以像运行具有不同“环境”值的木偶一样简单。。。