Automation 通过Hiera将包含包数据的yaml数组传递给puppet
傀儡版本:4.9.4 hiera版本:3.3.1 我试图做的是在安装了新版本的package-x/y之后重新加载httpd,而Hiera的数组似乎没有正确传递 对于我的httpd.pp文件,我有: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
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的代码,在所有版本中,使用您建议的代码都会出现编译错误。要点是。请注意,您对文章的更新显示您正在测试其他内容。