Есть ли простой способ вернуть классы верхнего уровня, примененные к узлу. Под этим я подразумеваю классы, включенные в определение узла или эквивалент 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 " - "