1

我一直在尝试使用 hiera 来获取配置数据。hiera.yaml 文件具有以下配置:

---
:backends:
  - yaml
:hierarchy:
  - "servers/%{hostname}"
  - common

但是当我从命令行运行 hiera 来测试它时,

hiera some::var hostname=foo

它不会从服务器/foo/yaml 中获取配置。添加 -d (调试)选项表明它甚至不查看该文件。相反,它说的是:

Looking for data source services/foo
Cannot find database /etc/puppet/hiera/services/foo.yaml, skipping

所以,两个问题:

  1. 为什么它不在服务器目录中查找?

  2. 为什么它在“服务”目录中查找?(请注意,即使我们从 hiera.yaml 文件中删除“servers/%{::hostname}”行,它也会在服务目录中查找内容!)

    如果默认情况下 hiera 在“服务”之类的特殊目录中查找内容,那么记录在哪里?

4

3 回答 3

1

我认为原因可能是a)您没有使用hiera datadir的默认位置(即/var/lib/hiera)和b)您忘记在hiera.yaml(或您想要的任何文件名)中指定该datadir你的 hiera 配置文件是)。这就是一个可能的解决方案可能只是将以下内容添加到您的 hiera 配置文件中:

:yaml:
    :datadir: /tmp/var-lib-hiera

查看以下示例:

/tmp/var-lib-hiera $ hiera -c hiera.yaml some::var hostname=foo
100

/tmp/var-lib-hiera $ tree
.
├── hiera.yaml
└── servers
    └── foo.yaml

/tmp/var-lib-hiera $ head  hiera.yaml servers/foo.yaml 

==> hiera.yaml <==
---
:backends:
    - yaml
:hierarchy:
    - "servers/%{hostname}"
    - common
:yaml:
    :datadir: /tmp/var-lib-hiera


==> servers/foo.yaml <==
some::var: 100
于 2016-09-19T13:53:18.800 回答
0

如果您使用 puppet,您可以在 puppet.conf 的 e master 部分设置 hiera 文件的位置,这样您就不必在 cmd 行中提供它。

请参阅:http ://docs.puppetlabs.com/references/latest/configuration.html#hieraconfig

于 2013-09-20T20:19:39.333 回答
0

显然,如果满足以下条件,配置将起作用: hiera 使用 -c 选项运行以指定配置文件的确切位置。(来自 /etc/hiera.yaml 的符号链接不起作用,尽管这是另一个论坛的建议https://ask.puppetlabs.com/question/3149/where-does-hiera-search-for-data-sources/ ?answer=3152#post-id-3152

于 2013-09-19T16:49:06.143 回答