有没有办法在 puppetmaster 的 nodes.pp 中定义通配符主机
假设我希望一个域中的所有主机都接收一组类,我可以这样做吗:
# nodes.pp
#
node basenode {
include admina, adminb, admic
}
node "*.acme.com" {
include adminc
}
答案1
不是这样。您可以创建一个适用于任何已签名客户端的“默认”节点。
node "default" {
include foo
}
但您只能有一个默认值。如果您想复制您描述的功能,您可以使用 external_nodes 分类方法。基本上,您编写一个脚本,当客户端连接时返回有效的 yaml。该脚本可以按照您的意愿执行操作,检查 fqdn、查询数据库、命中 ldap 等。
答案2
现在 Puppet 0.25 中可以使用正则表达式,因此您想要的功能是可以实现的:
node /^(foo|bar)\.example\.com$/ {
include blah
}
答案3
到目前为止,很少有发行版发布 0.25 版本,因此在我的 Centos5 中,从 EPEL 仓库获取了 2.24.8 版本,我必须对主机名类似于 wn10.example.com 的工作节点执行如下操作:
node default {
$node_type = regsubst($hostname, '^([a-z]+).*$', '\1')
case $node_type{
wn: {include worker_node}
default: {include generic_node}
}
}