使用 Hiera 分离数据与代码
利用 Hiera 声明类
可以使用hiera_include在任何节点块之外声明类,这样数据将影响所有节点。此外,在某些特定类中,也可以通过hiera_include声明其他类,这些类名存储在不同的 Hiera 键下。
Puppet 的外部节点分类器(ENCs)最初的设想就是为每个节点枚举要包含的类。由于hiera_include函数的存在,Hiera 可以作为基本的 ENC,这通常比编写自定义 ENC 更受青睐。不过,像 Foreman 这样的开源 ENC 功能强大且使用方便,Hiera 并未完全取代 ENC 的概念。
这些工具的结合为我们提供了将清单缩减至核心部分,并通过 Hiera 优雅配置机器的方法。
清单与 Hiera 设计的选择
现在可以将大部分具体配置转移到数据存储中。类可以从清单中包含,也可以通过 Hiera 包含。Puppet 会在层次结构中查找参数值,我们可以灵活分布配置值,以最小的工作量和冗余为每个节点实现预期结果。
但这并不意味着不再编写实际的清单代码,清单仍然是设计的核心。我们经常需要使用配置数据作为输入的逻辑。例如,只有从 Hiera 中获取到特定值时,才应包含某些类:
if hiera('use_caching_proxy', false) { include nginx }如果完全依赖 Hiera,就需要在层次结构中所有将