Puppet 安装在另一个节点定义中定义的软件
Puppet installing software defined in another node's definition
我正在使用 Puppet Enterprise。
# puppet master --version
4.8.1
清单目录 (/etc/puppetlabs/code/environments/production/manifests
) 包含以下内容:
iis.pp
rds.pp
site.pp
我在site.pp
中有一个节点定义如下图:
# cat site.pp
node 'box A' {
include iis
}
现在我面临的问题是,如果我创建一个新节点(例如方框 B)并通过创建如下所示的空白定义将其添加到 site.pp,它 仍然 安装实际上属于另一个节点(在本例中为 'box A')定义的软件。
node 'box B' { }
我在 site.pp 中没有在上述两个节点定义之外定义任何 include
语句。
为什么会这样?
更新:
# cat iis.pp
$iis_features = ['Web-Server','Web-WebServer','Web-Asp-Net45','Web-ISAPI-Ext','Web-ISAPI-Filter','NET-Framework-45-ASPNET']
windowsfeature { $iis_features:
ensure => present,
}
从 Puppet 4 开始,top-level 环境 manifests/
目录中的所有文件将被自动加载。通常这是为了让您可以定义不同的节点定义或 classes 并在不使用 import
指令(在 Puppet 2 和 3 中使用)的情况下加载它们。
在您的例子中,iis.pp
、rds.pp
和 site.pp
被解析并在每个节点上使用。 (Directories: The main manifest(s) 有更多关于如何配置的信息。)
要修复它,请使用 Puppet classes 将您的 IIS 配置(windowsfeature
资源)分组到 iis
class - 然后您的 include iis
将仅在 "box A".
上使用此配置
更改iis.pp定义一个class:
class iis {
$iis_features = ['Web-Server','Web-WebServer','Web-Asp-Net45','Web-ISAPI-Ext','Web-ISAPI-Filter','NET-Framework-45-ASPNET']
windowsfeature { $iis_features:
ensure => present,
}
}
理想情况下,将 iis.pp
移动到 /etc/puppetlabs/code/environments/production/modules/iis/manifests/init.pp
以位于标准模块位置。这提供了更好的性能,因为 Puppet 在您使用 include iis
.
之前不需要读取 iis.pp
我正在使用 Puppet Enterprise。
# puppet master --version
4.8.1
清单目录 (/etc/puppetlabs/code/environments/production/manifests
) 包含以下内容:
iis.pp
rds.pp
site.pp
我在site.pp
中有一个节点定义如下图:
# cat site.pp
node 'box A' {
include iis
}
现在我面临的问题是,如果我创建一个新节点(例如方框 B)并通过创建如下所示的空白定义将其添加到 site.pp,它 仍然 安装实际上属于另一个节点(在本例中为 'box A')定义的软件。
node 'box B' { }
我在 site.pp 中没有在上述两个节点定义之外定义任何 include
语句。
为什么会这样?
更新:
# cat iis.pp
$iis_features = ['Web-Server','Web-WebServer','Web-Asp-Net45','Web-ISAPI-Ext','Web-ISAPI-Filter','NET-Framework-45-ASPNET']
windowsfeature { $iis_features:
ensure => present,
}
从 Puppet 4 开始,top-level 环境 manifests/
目录中的所有文件将被自动加载。通常这是为了让您可以定义不同的节点定义或 classes 并在不使用 import
指令(在 Puppet 2 和 3 中使用)的情况下加载它们。
在您的例子中,iis.pp
、rds.pp
和 site.pp
被解析并在每个节点上使用。 (Directories: The main manifest(s) 有更多关于如何配置的信息。)
要修复它,请使用 Puppet classes 将您的 IIS 配置(windowsfeature
资源)分组到 iis
class - 然后您的 include iis
将仅在 "box A".
更改iis.pp定义一个class:
class iis {
$iis_features = ['Web-Server','Web-WebServer','Web-Asp-Net45','Web-ISAPI-Ext','Web-ISAPI-Filter','NET-Framework-45-ASPNET']
windowsfeature { $iis_features:
ensure => present,
}
}
理想情况下,将 iis.pp
移动到 /etc/puppetlabs/code/environments/production/modules/iis/manifests/init.pp
以位于标准模块位置。这提供了更好的性能,因为 Puppet 在您使用 include iis
.