Puppet - 不推荐使用'hiera_array'函数,而使用'lookup'

时间:2018-06-04 15:34:58

标签: puppet devops

我有一个傀儡问题。 (我正在使用5.1.0版本)

在此路径中:C:\ ProgramData \ PuppetLabs \ code \ environments \ production \ manifests 我有文件:site.pp 此文件(/etc/puppetlabs/puppet/manifests/site.pp)是代理连接到主服务器并请求更新配置时使用的主要入口点。

这是该文件的内容:

node default {
  # This is where you can declare classes for all nodes.
  # Example:
  #   class { 'my_class': }
  #hiera_include('classes')
  include(hiera_array("classes", ))
}

但是当我使用puppet apply命令运行puppet时:

“C:\ Program Files \ Puppet Labs \ Puppet \ bin \ puppet”应用C:\ ProgramData \ PuppetLabs \ code \ environments \ production \ manifests \ site.pp

我收到此错误:

Warning: The function 'hiera_array' is deprecated in favor of using 'lookup'. See https://docs.puppet.com/puppet/5.1/referenc
e/deprecated_language.html
   (file & line not available)
Error: Function lookup() did not find a value for the name 'classes'

所以我将site.pp代码更改为:

node default {
  # This is where you can declare classes for all nodes.
  # Example:
  #   class { 'my_class': }
  #hiera_include('classes')
  include(lookup('classes', {merge => unique}, ))
}

(因为我找到了这个文档:https://puppet.com/docs/puppet/5.1/hiera_migrate_functions.html

现在我只得到这个错误:

Error: Function lookup() did not find a value for the name 'classes'

我不确定如何修复它,因为这段代码在一个月前使用相同的apply命令工作。

你能帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

我收到此错误:

Warning: The function 'hiera_array' is deprecated in favor of using 'lookup'. See https://docs.puppet.com/puppet/5.1/referenc e/deprecated_language.html (file & line not available)
Error: Function lookup() did not find a value for the name 'classes'

更正:您收到警告错误。错误是独立的,但表明Puppet正在通过内部委派给新的lookup()函数来处理它所警告的情况。

  

所以我将site.pp代码更改为:

node default {
  # This is where you can declare classes for all nodes.
  # Example:
  #   class { 'my_class': }
  #hiera_include('classes')
  include(lookup('classes', {merge => unique}, ))
}

是的,这是解决警告的完美而自然的方式,看起来它是成功的。但同样,错误是分开的。这不是关于您的清单,而是关于您的数据。正如它所说,尝试查找关键的“类”失败了。没有找到这样的钥匙。

  

我不确定如何修复它,因为这段代码在一个月前使用相同的apply命令工作。

如果Puppet曾经运行相同的代码而没有发出错误,那么当时和现在之间的变化就是数据。但是,这可能是因为您现在正在以不同的用户身份运行Puppet。不同的普通用户都有自己的数据(和清单)默认位置,这些都与系统运行Puppet时使用的位置不同。