我一直在试验配置数据的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
所以,有两个问题:
为什么不查看服务器目录?
为什么要查看“服务”目录? (请注意,即使我们从hiera.yaml文件中删除“servers /%{:: hostname}”行,它也会查找services目录中的内容!)
如果默认情况下hiera在“服务”这样的特殊目录中查找内容,那么这会记录在哪里?
答案 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