windows - Puppet 安装在另一个节点定义中定义的软件

标签 windows puppet puppet-enterprise

我正在使用 Puppet Enterprise。

# puppet master --version
4.8.1

list 目录 (/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,它仍然会安装软件它们实际上是另一个节点(在本例中为“框 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 开始,顶级环境 manifests/ 目录中的所有文件将被自动加载。通常这是为了让您可以定义不同的节点定义或类,并在不使用 import 指令(在 Puppet 2 和 3 中使用)的情况下加载它们。

在您的例子中,iis.pprds.ppsite.pp 被解析并在每个节点上使用。 (Directories: The main manifest(s) 有更多关于如何配置的信息。)

要修复它,请使用 Puppet classes将您的 IIS 配置(windowsfeature 资源)分组到一个 iis 类中 - 然后您的 include iis 将仅在“框 A”上使用此配置.

修改iis.pp定义一个类:

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 以成为标准模块地点。这提供了更好的性能,因为在您使用 include iis 之前,Puppet 不需要读取 iis.pp。

关于windows - Puppet 安装在另一个节点定义中定义的软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805867/

相关文章:

ssl - 如何在 puppet 中完全禁用 SSL 身份验证?

jboss7.x - 如何在puppet中使用setm

configuration-files - 如何避免在傀儡节点的类声明中重复自己?

c - 从 C 中的另一个程序执行一个程序

windows - 诊断监视器跟踪监听器

c++ - 有没有办法在 Windows 上托管 IDE,但在 Linux 上托管源代码和编译 (GCC)?

jenkins - 使用 docker、puppet 和 jenkins 进行持续交付和 PROD 部署

resources - 带有标题 munge 的 puppet 资源命令

puppet - 如何将两个或多个变量传递给 Puppet 中的定义

javascript - Windows 10 中不调用 ActiveXObject