Puppet安装在另一个节点定义

时间:2017-01-23 11:58:56

标签: windows puppet puppet-enterprise

我正在使用Puppet Enterprise。

# puppet master --version
4.8.1

清单dir(/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,
}

1 个答案:

答案 0 :(得分:2)

从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。