hiera.yaml上的查找配置类型错误,条目“层次结构”索引0需要一个Struct值,得到String

时间:2018-05-25 06:03:22

标签: puppet hiera r10k

此设置之前有效,但在我的服务器上重新安装Ubuntu 16.04并重新安装puppetserver和puppet代理后,我在尝试第一次代理运行时遇到错误。

  

错误:无法从远程服务器检索目录:SERVER上的错误500:服务器错误:评估错误:评估函数调用时出错,键'lookup_options'的查找失败:'/ etc / puppetlabs / puppet中的查找配置/hiera.yaml'的类型错误,条目'hierarchy'索引0需要一个Struct值,得到String

     

'/etc/puppetlabs/puppet/hiera.yaml'上的查找配置有错误的类型,条目'层次结构'索引1需要一个Struct值,得到字符串

     

'/etc/puppetlabs/puppet/hiera.yaml'上的查找配置有错误的类型,无法识别的键'后端'

     

'/etc/puppetlabs/puppet/hiera.yaml'上的查找配置有错误的类型,无法识别的键'yaml'(文件:/etc/puppetlabs/code/environments/production/site.pp,line:1,列:1)在节点cclloyd.com上

/etc/puppetlabs/puppet/hiera.yaml:

---
# Hiera 5 Global configuration file

version: 5

:backends:
  - yaml
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - common

:yaml:
  :datadir:

1 个答案:

答案 0 :(得分:2)

除了

version: 5

,您的文件似乎采用Hiera 3格式。 Hiera 3可能会合理地忽略'版本'键和正常处理其余的,但显然你现在正在运行Hiera 5.因为文件声明自己是Hiera 5格式,Hiera自然而然地接受它的话。该配置的Hiera 5模拟看起来更像这样:

---
# Hiera 5 Global configuration file

version: 5

hierarchy:
  - name: "Per-node data (yaml version)"
    path: "nodes/%{::trusted.certname}"
  - name: "Common and fallback data"
    path: "common.yaml"

defaults:
  data_hash: yaml_data

请注意'层次结构的值' key是一个哈希数组,而且(在Hiera 5中)它应该是'层次结构'而不是':hierarchy'。

或者,如果您只是更改它以指定原始内容的正确配置文件版本(3),Hiera 5可能会接受您的原始文件。因为Hiera 3格式在Puppet 5中被弃用并计划在Puppet 6中删除,但是,这似乎是转换为新语法的好时机。