Puppet:无法获得hiera变量

时间:2014-08-07 14:59:11

标签: puppet hiera

我已经使用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)进行访问并且它不起作用...

1 个答案:

答案 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()

Using Templates

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

希望这有帮助。