有没有办法将顶级类包含在傀儡节点中?

有没有办法将顶级类包含在傀儡节点中?

有没有一种简单的方法可以返回应用于节点的顶级类。我指的是节点定义或 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 " - "

相关内容