【问题标题】:Nested YAML for hiera in puppet木偶中hiera的嵌套YAML
【发布时间】:2016-01-05 07:35:15
【问题描述】:

我正在为我们公司设计一个木偶架构。我真的很喜欢用 hiera 和 YAML 文件对我的节点进行分类的想法。但是,我真的希望能够应用不基于事实的 YAML 文件或将 YAML 文件导入另一个 YAML 文件。

例如 NodeA.yaml

---
include webserver.yaml
include public.yaml

classes:
etc. . . 

这将允许我尽可能多地重用我的代码。这样,当我对我的网络服务器配置进行更改时,我只需在一个文件中进行,而不是在每个节点的 YAML 文件中进行。

我也愿意接受其他解决方案。

【问题讨论】:

  • @kkamilpl 说得对:您说要解决的问题最好通过正确定义和使用层次结构来处理。事实上,在许多方面,它提供了一种外部指导的方法来完全按照您的建议进行操作,因为它可能导致 hiera 将多个数据文件一起考虑,其中一些文件比其他文件更特定于当前节点。您不一定需要自定义事实才能使其工作,但将其与 ENC 设置的全局变量配对可能会有所帮助。

标签: yaml puppet hiera


【解决方案1】:
  • YAML 不支持导入或包含
  • (不推荐)您可以使用来自stdlib 模块的loadyaml 来实现所需的功能。检查此example 是否使用loadyaml 函数。
  • 您只需设计适当的hiera 层次结构即可轻松实现预期功能。我不明白你为什么不想使用facter facts?例如:在每个节点上定义自定义因素事实location。接下来定义一个层次结构:

    :hierarchy:
      - "%{::location}"/"%{::fqdn}"
      - "%{::location}"/common
      - common 
    

    接下来在文件location_1/node1.yaml 中定义仅针对该节点1 的数据。在文件location_1/common.yaml 中,您为location_1 中的所有 节点定义通用数据。在common.yaml 中,您定义了所有节点通用的数据。 如果某些数据对于所有节点都是通用的,您可以在 common.yaml 中定义一次,仅此而已。您不必在每个节点的 yaml 文件中重复定义它。

【讨论】:

  • 问题是我们的管理者想要所有的节点信息都存储在主节点上。他们不希望节点能够更改有关自身的任何信息。
  • 但除了自定义事实之外,所有节点信息都将存储在主节点上。所以也许只是把所有必要的信息放到 common.yaml 中。
  • 这似乎是调整 hiera.yaml 的最佳方式,但在我的情况下,由于它由另一个团队管理,因此无法更改(我要求添加更多与我们的平台)。不幸的是,由于这个限制,我们必须在所有节点中复制粘贴相同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多