0

这是失败的清单代码:

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

因子命令工作正常:

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

Puppet 版本是 Ubuntu 14.04 上的 3.8.7

4

1 回答 1

3

最终发现 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 中的默认行为,是成功迁移所必需的。

于 2016-10-30T16:44:30.223 回答