我对puppetdb和我的结构化事实(哈希)有疑问。
哈希将通过我的puppetdb进行字符串化。
Ubuntu 14.04
puppetserver = 3.8.7
facter = 2.4.4
puppetdb = 2.3.8-1
在我的客户端和服务器上的puppet.conf中,我已经包含:
stringify_facts = false
在我的site.pp中,我有以下条目:
if is_hash($::os) {
notify {'hash':}
notify {$os['family']:}
}
if is_string($::os) {
notify {'string':}
notify {$os['family']:}
}
如果在我的服务器上的puppet.conf中:
storeconfigs = true
storeconfigs_backend = puppetdb
并且puppetdb正在运行。
我在客户端puppetrun上收到以下消息:
os is not a hash or Array when accesssing it with family.
如果我将site.pp更改为:
if is_string($::os) {
notify {'os is a string':}
}
然后我收到消息 - > 'os是一个字符串'
如果我将服务器上的puppet.conf更改为:
storeconfigs = false
storeconfigs_backend = puppetdb
然后一切都好。事实上将确定为哈希。
有人有想法吗? 请帮忙 :) 摊儿
答案 0 :(得分:0)
if is_hash($::os) {
notify {'hash':}
notify {$os['family']:}
}
if is_string($::os) {
notify {'string':}
notify {$os['family']:} <-- this line is failing
}
当你禁用puppetdb时,os
这个事实变成了一个哈希,第一个是条件触发器。在这种情况下,使用$os['family']
正确执行哈希查找。
当启用puppetdb并且事实被“字符串化”时,则触发第二个条件。哈希查找$os['family']
将失败,因为os
在这种情况下是一个字符串而不是哈希。您需要使用字符串查找$::osfamily
替换哈希查找。
一些辅助信息: https://github.com/puppetlabs/facter/blob/2.4.6/lib/facter/operatingsystem/base.rb#L11 https://github.com/puppetlabs/facter/blob/2.4.6/lib/facter/kernel.rb#L12