对于那里的 puppet 专家,我正在尝试node.pp
根据 facter 网络修改我的网络。
例如,我希望拥有子网 10.10.10.0 到 10.10.10.255 和 192.168.2.0 网络来获取以下 puppet 模块。
在我看来,nodes.pp
这个正则表达式有效吗?
node \d(10).(10).[0-10].[0-255] | \d (192).(168).(2).[0] $ {
include "ntp"
include "dhcp"
include "common"
}
node default {
include "common"
}
^ 以上可以吗?谢谢
答案1
如下所示,这将不起作用。首先,正则表达式不好用,而且节点匹配器基于certname
,即主机的 FQDN。这并不是说你不能这样做,但它需要更多的工作,并且需要你进入不受支持的配置领域。所以,基本上,你只能靠自己了。这是 Puppet 的文档所说的:
Node 语句按名称匹配节点。节点的名称是其唯一标识符;默认情况下,这是其
certname
设置,该设置又默认为节点的完全限定域名。关于非 Certname 节点名称的说明
虽然可以设置除
certname
作为节点名称(使用节点名称_事实或者节点名称_值如果您将证书设置为“无效”,我们通常不推荐这样做。它允许您对许多节点重复使用一个节点证书,但它会降低安全性,使可靠地识别节点变得更加困难,并且可能会干扰其他功能。设置非 certname 节点名称是未得到官方支持在 Puppet Enterprise 中。
没有指定 Puppet 版本,因此我的回答基于撰写时的最新版本 (5.3)。
相反,为什么不使用默认节点定义并将其与基于值的逻辑相结合$::network
?
node default {
case $::network {
/^(10\.10\.[0-10]\.[0-255]|192\.168\.2\.0)$/ : {
include ntp
include dhcp
include common
}
default: { include common }
}
}
通过将包含内容更改为通知、将网络更改为 $var 并测试各种值来进行测试。
[aaron@localhost ~]$ cat network.pp
#$var='10.10.1.5'
$var='192.168.2.1'
case $var {
/^(10\.10\.[0-10]\.[0-255]|192\.168\.2\.0)$/ : {
notice('match')
}
default: { notice('default') }
}
[aaron@localhost ~]$ puppet apply network.pp
Notice: Scope(Class[main]): default
Notice: Compiled catalog for localhost.local in environment production
in 0.21 seconds
Notice: Applied catalog in 0.01 seconds
我将其包含在内是为了让您很好地了解如何快速查看某些东西是否应该工作,而无需花费精力将其部署到 Puppetmaster 并使用各种主机进行测试。