Назад | Перейти на главную страницу

Есть ли способ включить классы верхнего уровня в марионеточный узел?

Есть ли простой способ вернуть классы верхнего уровня, примененные к узлу. Под этим я подразумеваю классы, включенные в определение узла или эквивалент ENC. Например, в примере узла ниже я хотел бы вернуть return :: me и return :: me2 для somehost, но не dontreturn :: меня'

class return::me {
   include dontreturn::me
}
node "somehost" {
   include return::me
   include return::me2
}

Я вижу, что /var/lib/puppet/state/classes.txt включает полный список классов, применяемых к узлу, но включает любые дополнительные классы, включенные в классы верхнего уровня.

Есть ли способ получить эти данные с помощью команды марионеточных лиц? Я подозреваю, что «марионеточные узлы» могут быть полезны, но мне не удалось заставить их возвращать то, что я что.

file { '/var/lib/puppet/state/classes.txt':
  content => inline_template("<%= Puppet::Node.indirection.find(fqdn).classes.join('\n') + '\n' %>"),
}

Работает по крайней мере с последними версиями 2.6.x и 2.7.x (не пробовал более ранние версии).

Поскольку здесь используются внутренние API-интерфейсы Puppet, я не могу дать никаких гарантий относительно долговечности этого трюка. К сожалению, все равно ничего лучше.

Раньше у нас был трюк с куклой 2.6, используя Puppet::Node.find(fqdn).classes вместо этого, но он сломался с 2.7.

В конце концов я получил работу «марионеточного узла». Приведенная ниже команда работает при запуске на машине myhost. Похоже, это работает для узлов, определенных с помощью блока «узел», а также для определений, поступающих из ENC.

puppet node find 'myhost' --render-as yaml --terminus rest | grep " - "