从特定变量/事实/hiera 值加载 hiera 文件

从特定变量/事实/hiera 值加载 hiera 文件

我正在尝试根据特定标志加载 hiera 文件。

Hiera 层次结构配置是

:hierarchy:
  - "%{environment}/%{::fqdn}"
  - "%{environment}/%{nodetype}"
  - "%{environment}/%{calling_module}"
  - "%{environment}"
  - "common/%{calling_module}"
  - "common"

事实上,我们希望在“节点类型”级别分解一些配置。目标是避免将相同的层次“块”放在文件中:

  • 环境/测试/myhost1.example.com.yaml
  • 环境/测试/myhost2.example.com.yaml
  • 环境/测试/myhost3.example.com.yaml

但相反,但共同的部分是:

  • environment/test/nfs-server.yaml 所有 nfs 服务器相关的通用配置
  • environment/test/backend-server.yaml 与所有后端服务器相关的通用

之后,所有服务器都将通过 fqdn yaml 文件获取自己的特定值。(这部分没问题)

目前,我不知道如何向 hiera 上下文提供“nodetype”数据。

我试图将它放入主清单文件中(是​​的,我阅读了文档并且我知道这是一个坏主意但即使绝望尝试,它仍然不起作用)

node 'nfs1.example.com', 'nfs2.example.com' {
  $nodetype= 'nfs-server'

但文件环境/测试/nfs-server.yaml没有被 hiera 加载。

我也尝试使用自定义事实,但使用自定义事实

modules/hosts/facts.d/host-fact-test.txt

文件被发送到代理的主机,但在这里,hiera 不使用专用文件。

Notice: /File[/var/lib/puppet/facts.d/host-fact-test.txt]/ensure: defined content as '{md5}d7492faae1bfe55f65f9958a7a5f6df9'

如果我使用通知puppet 命令,值正常

if $nodetype== 'nfs-server' {
  notify {"Running with \$nodetype ${nodetype} ID defined":
    withpath => true,
  }
}

结果:

Notice: /Stage[main]/attemps/Notify[Running with $nodetype nfs-server ID defined]/message: Running with $nodetype nfs-server ID defined

Stack 是 Ubuntu 14 上的 Puppet 开源版本,因此版本如下:

  • 木偶 3.8.4
  • hiera 1.3.4
  • 因素 2.4.4

有什么想法或建议可以使其发挥作用(或实现类似的行为)吗?

答案1

Puppet 主进程通常不使用 中的配置/etc/hiera.yaml,这可能会造成混淆。使用 Puppet 时3.x,通常是/etc/puppet/hiera.yaml

您可以确保使用(以 root 身份)

puppet master --configprint hiera_config

在主机上。

相关内容