我已经使用hiera几个星期了,直到几天前,当我开始收到这样的消息时,一切都运转良好:
错误:无法从远程服务器检索目录:SERVER上的错误400:在任何Hiera数据文件中找不到数据项nom并且节点上没有提供默认值d0puppetclient.victor-buck.com
警告:未在失败的目录
上使用缓存错误:无法检索目录;跳过运行
所以我尝试做一个非常简单的测试来检查问题是否来自我上次的代码更改,我仍然收到此消息。我不能再获得hiera变量了。 在我做的测试之下:
hiera.yaml:
---
:backends:
- yaml
:yaml:
:datadir: /etc/puppet/hieradata
:hierarchy:
- common
site.pp:
# /etc/puppet/manifests/site.pp
case $operatingsystem {
'Solaris': { include role::solaris }
'RedHat', 'CentOS': { include redhat::roles::common }
/^(Debian|Ubuntu)$/: { include role::debian }
# default: { include role::generic }
}
case $hostname {
/^d0puppetclient/: { include test }
}
test.pp:
class test{
$nom = hiera('nom')
file {"/root/test.txt":
ensure => file,
source => "/etc/puppet/test.txt.erb",
}
}
test.txt.erb:
<%= nom %>
有什么想解决这个问题吗?我认为这可能是一个文件访问权限问题,所以我试图对某些文件(755
)进行访问并且它不起作用...
答案 0 :(得分:3)
您需要在common.yaml中定义nom
才能保存值。您可以设置默认值并有条件地创建文件,如果您不打算设置它。
class test {
$nom = hiera('nom', false)
if $nom {
file { '/root/test.txt':
ensure => file,
content => template('test/test.txt.erb')
}
}
}
请注意我是如何使用content
代替source
的。使用erb
模板时,您需要使用content
功能指定template()
。
如果您使用source
,则需要使用文件而不是erb
模板。
希望这有帮助。