puppetdb структурирует структурированные факты, такие как хэши
У меня проблема с 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':}
}
Тогда я получаю сообщение -> "ОС - это строка"
Если я изменю puppet.conf на моем сервере на:
storeconfigs = false
storeconfigs_backend = puppetdb
тогда все ок. Факт будет идентифицирован как хеш.
У кого-нибудь есть идея? Пожалуйста, помогите:) Танер
1 ответ
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