我已经使用hiera几个星期了,一切都很好,直到几天前我开始收到那种消息:
错误:无法从远程服务器检索目录:服务器上的错误400:无法在任何Hiera数据文件中找到数据项名称,并且节点d0puppetclient.victorbuck.com上没有提供默认值
警告:没有在失败的目录上使用缓存
错误:无法检索目录;跳过运行
所以我试着做一个非常简单的测试来检查问题是否来自我最后的代码更改,我仍然得到这个消息。我不能再得到变量了。下面是我所做的测试:
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
),它不工作…
您需要在common中定义nom
。以使其保存值。如果你不打算设置它,你可以设置一个默认值并有条件地创建文件。
class test {
$nom = hiera('nom', false)
if $nom {
file { '/root/test.txt':
ensure => file,
content => template('test/test.txt.erb')
}
}
}
注意我是如何使用content
而不是source
的。当使用erb
模板时,需要使用template()
函数指定content
。
如果你使用source
,它期望一个文件而不是erb
模板。