1

我已经使用 hiera 几个星期了,直到几天前我开始收到这种消息时,一切都运行良好:

错误:无法从远程服务器检索目录:服务器上的错误 400:在任何 Hiera 数据文件中找不到数据项 nom,并且节点 d0puppetclient.victor-buck.com 上没有提供默认值

警告:不在失败的目录上使用缓存

错误:无法检索目录;跳过跑步

因此,我尝试进行一个非常简单的测试,以检查问题是否来自我上次的代码更改,并且我仍然收到此消息。我再也无法获得 hiera 变量了。在我做的测试下面:

hiera.yaml:

---
:backends:
  - yaml

:yaml:
  :datadir: /etc/puppet/hieradata

:hierarchy:
  - common

网站.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 }
}

测试.pp:

class test{

  $nom = hiera('nom')

file {"/root/test.txt":
    ensure   => file,
    source   => "/etc/puppet/test.txt.erb",
  }

}

test.txt.erb:

<%= nom %>

关于解决这个问题的任何想法?我认为这可能是文件访问权限问题,所以我尝试授予对某些文件755的访问权限()但它不起作用......

4

1 回答 1

3

您需要nom在 common.yaml 中进行定义,以便它保存一个值。如果您不打算设置它,您可以设置一个默认值并有条件地创建文件。

class test {
  $nom = hiera('nom', false)

  if $nom {
    file { '/root/test.txt':
      ensure => file,
      content => template('test/test.txt.erb')
    }
  }
}

注意我是如何使用content而不是source. 使用erb模板时,您需要指定contentusingtemplate()函数。

使用模板

如果您使用source它,则需要一个文件而不是erb模板。

希望这可以帮助。

于 2014-08-09T17:29:27.273 回答