为什么hiera会在“services”子目录中查找?

时间:2013-09-19 11:57:34

标签: puppet hiera

我一直在试验配置数据的hiera。 hiera.yaml文件具有以下配置:

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

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

hiera some::var hostname=foo

它没有从servers / 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}”行,它也会查找services目录中的内容!)

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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