Automation 通过Hiera将包含包数据的yaml数组传递给puppet

Automation 通过Hiera将包含包数据的yaml数组传递给puppet,automation,yaml,puppet,hiera,Automation,Yaml,Puppet,Hiera,傀儡版本:4.9.4 hiera版本:3.3.1 我试图做的是在安装了新版本的package-x/y之后重新加载httpd,而Hiera的数组似乎没有正确传递 对于我的httpd.pp文件,我有: class service::common::httpd ( $service_state = undef, # undef = unmanaged $service_run_at_boot = undef, $packages = undef ) { service { 'h

傀儡版本:4.9.4 hiera版本:3.3.1

我试图做的是在安装了新版本的package-x/y之后重新加载httpd,而Hiera的数组似乎没有正确传递

对于我的httpd.pp文件,我有:

class service::common::httpd (
  $service_state = undef, # undef = unmanaged
  $service_run_at_boot = undef,
  $packages = undef
  ) {
    service { 'httpd':
      ensure     => $service_state,
      enable     => $service_run_at_boot,
      subscribe  => $packages,
      restart    => "/usr/sbin/apachectl graceful"
    }
  }
在hiera的yaml文件中,我有:

service::common::httpd::packages: [Package['package-x'],Package['package-y']]
使用此命令运行puppet会产生错误

Error: Evaluation Error: Error while evaluating a Function Call, Lookup of key 'allow_virtual_packages' failed: Unable to parse (/root/repos/puppet-config/data/nodes/<location of yaml file>): did not find expected ',' or ']' while parsing a flow sequence
Error:求值错误:求值函数调用时出错,键“allow\u virtual\u packages”的查找失败:无法分析(/root/repos/puppet config/data/nodes/):在分析流序列时未找到预期的“,”或“]”
还表示它的
流集合条目之间缺少逗号。我也尝试过许多不同的空格和逗号组合

我还尝试使用include语句将包包含在类中

我做错了什么?

该实用程序对于分析Puppet Hiera YAML文件非常有用。当我在你的文件上尝试时,我得到:

▶ yamllint spec/fixtures/hiera/data/common.yaml 
spec/fixtures/hiera/data/common.yaml
  2:25      error    syntax error: expected ',' or ']', but got '['
  2:39      error    too few spaces after comma  (commas)
那里的语法错误表明该文件只是无效的YAML

但如何修复呢

令人困惑的是,木偶清单中的一行内容如下:

  subscribe => [Package['package-x'], Package['package-y']]
当编译成JSON Puppet目录时,将变成:

  "subscribe": ["Package[package-x]", "Package[package-y]"]
您可以在YAML文件中放置相同的JSON字符串,使YAML有效,如下所示:

service::common::httpd::packages: ["Package[package-x]", "Package[package-y]"]
您也可以在YAML中使用单引号,即

service::common::httpd::packages: ['Package[package-x]', 'Package[package-y]']
有关如何编译Puppet目录的更多信息,请参见我的博客帖子。

该实用程序对于分析Puppet Hiera YAML文件非常有用。当我在你的文件上尝试时,我得到:

▶ yamllint spec/fixtures/hiera/data/common.yaml 
spec/fixtures/hiera/data/common.yaml
  2:25      error    syntax error: expected ',' or ']', but got '['
  2:39      error    too few spaces after comma  (commas)
那里的语法错误表明该文件只是无效的YAML

但如何修复呢

令人困惑的是,木偶清单中的一行内容如下:

  subscribe => [Package['package-x'], Package['package-y']]
当编译成JSON Puppet目录时,将变成:

  "subscribe": ["Package[package-x]", "Package[package-y]"]
您可以在YAML文件中放置相同的JSON字符串,使YAML有效,如下所示:

service::common::httpd::packages: ["Package[package-x]", "Package[package-y]"]
您也可以在YAML中使用单引号,即

service::common::httpd::packages: ['Package[package-x]', 'Package[package-y]']
在我的博客文章中,有更多关于如何编译Puppet目录的信息。

引用

希拉不知道包是什么。只需引用它,因为它是一个字符串

service::common::httpd::packages:[“Package['Package-x']”, “包['Package-y']”

工作完美


或者您可以将
[“Package['Package-x'],“Package['Package-y']”更改为
['Package-x',Package-y']

工作完美无瑕。见下文

host01.yaml

beats::packetbeat::packages: [ acl, htop ]
packetbeat.pp

class beats::packetbeat (
    $packages = undef
) {
    package {
        "packetbeat":
            ensure    => "$version",
            subscribe => Package[$packages],
        ;
    } 
}
注意:/Stage[main]/Beats::Packetbeat/Package[acl]/确保: 当前_值“缺失”,应为“2.2.51-14.el7”(noop)

注意:/Stage[main]/Beats::Packetbeat/Packetbeat[Packetbeat]:本应 从1个事件触发“刷新”

注意:/Stage[main]/Beats::Packetbeat/Service[Packetbeat]:本应 从2个事件触发“刷新”

注意:类[Beats::Packetbeat]:将从 3项活动

引用

希拉不知道包是什么。只需引用它,因为它是一个字符串

service::common::httpd::packages:[“Package['Package-x']”, “包['Package-y']”

工作完美


或者您可以将
[“Package['Package-x'],“Package['Package-y']”更改为
['Package-x',Package-y']

工作完美无瑕。见下文

host01.yaml

beats::packetbeat::packages: [ acl, htop ]
packetbeat.pp

class beats::packetbeat (
    $packages = undef
) {
    package {
        "packetbeat":
            ensure    => "$version",
            subscribe => Package[$packages],
        ;
    } 
}
注意:/Stage[main]/Beats::Packetbeat/Package[acl]/确保: 当前_值“缺失”,应为“2.2.51-14.el7”(noop)

注意:/Stage[main]/Beats::Packetbeat/Packetbeat[Packetbeat]:本应 从1个事件触发“刷新”

注意:/Stage[main]/Beats::Packetbeat/Service[Packetbeat]:本应 从2个事件触发“刷新”

注意:类[Beats::Packetbeat]:将从 3项活动


相关的YAML文档可以在以及YAML语法的其他DeDocumentation中找到。这不仅仅是一个YAML文档问题,因为根据我下面的回答,Puppet要求YAML文件中的引用以一种非常不直观的方式格式化。实际上,这是一个很好的问题。相关的YAML文档可以在上找到,也可以在其他的YAML语法文档中找到。根据我下面的回答,这不仅仅是一个YAML文档问题,因为Puppet要求YAML文件中的引用以一种非常不直观的方式格式化。事实上,这是一个好问题。这是不正确的。这将导致编译错误,
无法在参数“require”
中找到资源“Package['Package-x']”。Puppet将把围绕package-x的引用作为标题的一部分。我已经在下面发布了一个正确的(经过测试的)答案。@AlexHarvey它是有效的。如果没有测试,我永远不会在这里发布答案。如果你想检查,我可以截屏结果并上传到某个地方。好的,我使用你的代码进行了测试,导致编译错误。什么puppet版本?我已经测试了最新puppet 6、5和4的代码,在所有版本中,使用您建议的代码都会出现编译错误。要点是。请注意,您对帖子的更新显示您正在测试其他内容。这是不正确的。这将导致编译错误,
无法在参数“require”
中找到资源“Package['Package-x']”。Puppet将把围绕package-x的引用作为标题的一部分。我已经在下面发布了一个正确的(经过测试的)答案。@AlexHarvey它是有效的。如果没有测试,我永远不会在这里发布答案。如果你想检查,我可以截屏结果并上传到某个地方。好的,我使用你的代码进行了测试,导致编译错误。什么puppet版本?我已经测试了最新puppet 6、5和4的代码,在所有版本中,使用您建议的代码都会出现编译错误。要点是。请注意,您对文章的更新显示您正在测试其他内容。