【问题标题】:Unable to use $facts as a hash in the puppet manifest无法在人偶清单中使用 $facts 作为哈希
【发布时间】:2017-03-12 19:50:54
【问题描述】:

这是失败的清单代码:

each( $facts['partitions'] ) |$name, $device| {
  notice( "${facts['hostname']} has device ${name} with size ${device['size']}" )
}

错误:

[manifests]$puppet apply /vagrant/manifests/mountpoints.pp
Error: Evaluation Error: Operator '[]' is not applicable to an Undef Value. at /vagrant/manifests/mountpoints.pp:1:7 on node siy
Error: Evaluation Error: Operator '[]' is not applicable to an Undef Value. at /vagrant/manifests/mountpoints.pp:1:7 on node siy

facter 命令运行良好:

[manifests]$facter partitions
{"vda1"=>{"uuid"=>"050e1e34-39e6-4072-a03e-ae0bf90ba13a", "size"=>"41943040", "mount"=>"/", "label"=>"DOROOT", "filesystem"=>"ext4"}}

Ubuntu 14.04 上的 Puppet 版本为 3.8.7

【问题讨论】:

  • 您的代码很好,适用于 Facter 2.4.6 和 Puppet 4.7.0。出于某种原因,它没有将$facts['fact_key'] 解析为事实哈希,而是似乎将其视为其他东西。您是否再次遇到解析器问题?
  • @Matt Schuchard,看起来 $partitions 工作正常,但不是 $facts['partitions']。正如你所说的数组使用的一些问题。我在 puppet.conf 中确实有解析器等于未来。我会看看我是否可以升级到 puppet 4,看看是否能解决问题。
  • $::partitions 是 Puppet 内部事实的旧语法。我肯定会建议切换到 Puppet 4.5.3 或 4.6.2 以获得现代稳定版本,尤其是因为 3.8 到年底将 EOL。此外,这是一个哈希而不是一个数组。您的书是在解释代码在做什么,还是只是展示示例并希望您猜测?

标签: puppet facter


【解决方案1】:

最终发现 puppet 3.x 默认设置 stringify_facts 为 true,导致代码尝试将 $facts 作为数组访问时出现问题。

来自木偶文档 https://docs.puppet.com/puppet/3.8/reference/deprecated_settings.html#stringifyfacts--true

此设置默认为 true,这会禁用结构化事实并将所有事实值强制转换为字符串。您可以通过在每个代理节点和 Puppet Master 上的 puppet.conf 中设置 stringify_facts = false 来启用结构化事实。

如果您想使用 $facts 作为哈希/结构,则配置选项 stringify_facts 应设置为 false,trusted_node_data 设置为 true。这些配置设置所代表的行为是 puppet 4 中的默认行为,是成功迁移所必需的。

【讨论】:

  • 我必须在 puppet 3.8 中设置trusted_node_data = true
  • 又一期!我设置了trusted_node_data = true 和stringify_facts = false,问题仍然没有为我解决。我的解决方案是安装 puppetlabs-stdlib 。没有 stdlib puppet 就不能做很多文档声称它可以做的事情。
  • @johndavid 正确。除非您完全编写自己的模块,否则任何受支持的模块都会将 stdlib 作为依赖项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多