【发布时间】: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。此外,这是一个哈希而不是一个数组。您的书是在解释代码在做什么,还是只是展示示例并希望您猜测?