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

Другие вопросы по тегам