有没有一种简单的方法可以返回应用于节点的顶级类。我指的是节点定义或 ENC 等效项中包含的类例如,对于下面的示例节点,我想为 somehost 返回“return::me”和“return::me2”,但不返回“dontreturn::me”
class return::me {
include dontreturn::me
}
node "somehost" {
include return::me
include return::me2
}
我看到 /var/lib/puppet/state/classes.txt 包含应用于节点的类的完整列表,但其中包括顶级类中包含的任何其他类。
有没有办法用 puppet faces 命令获取这些数据?我怀疑“puppet nodes”可能有用,但我无法让它返回我想要的结果。
答案1
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(尚未尝试过早期版本)。
由于这使用了内部 Puppet API,我无法保证此技巧的持久性。不幸的是,无论如何,没有更好的方法了。
我们曾经使用过 Puppet 2.6 技巧Puppet::Node.find(fqdn).classes
,但是它在 2.7 版中失效了。
答案2
我最终让“puppet node”工作起来。下面的命令在“myhost”机器上运行时有效。看起来这适用于用“node”块定义的节点以及来自 ENC 的定义。
puppet node find 'myhost' --render-as yaml --terminus rest | grep " - "