2017-01-23 57 views
1

我正在使用Puppet Enterprise。在另一个节点的定义中定义的Puppet安装软件

# 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中,如下所示,它仍然安装的软件实际上是另一个节点的一部分(在这种情况下为'盒子A')定义。

node 'box B' { } 

我没有任何include声明在上述两个节点定义之外定义的site.pp中。

这是怎么发生的?

UPDATE:

# 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, 
} 
+0

'iis.pp'究竟是什么? –

+1

Puppet可能很好地使用'/ etc/puppetlabs/code/environments/production/manifests'中的所有东西,或者那里的第一个清单作为默认清单。无论哪种方式,除了'site.pp'外,其他东西都是非常罕见的。移出其他清单,看看是否解决了这个问题。 –

+0

@DominicCleal:用iis.pp的内容更新了帖子 – Technext

回答

2

由于日伪4,在顶层环境中的所有文件manifests/目录会被自动加载。通常情况下,您可以定义不同的节点定义或类,并在不使用import指令(用于Puppet 2和3)的情况下加载它们。

在你的情况下,iis.pp,rds.ppsite.pp被解析并在每个节点上使用。 (Directories: The main manifest(s)对这个是怎么配置的一些详细信息。)

要修复它,用Puppet classes,以便将IIS配置(windowsfeature资源)为iis类 - 那么你include iis将只能在“复选框中的使用该配置”。

变化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是在标准模块的位置。这提供了更好的性能,因为Puppet在使用include iis之前不需要阅读iis.pp。

+0

巧合的是,我还经历了一个类似的链接(在阅读Matt的评论之后),您已经提到了上面的内容,尽管我的作品是[更旧的](https://docs.puppet.com/puppet/3.8/dirs_manifest.html)发布。 :)感谢与演出有关的最后一点。在多个文件的情况下,效果可能很大。保持性能不变,当你提到“通常这是因为你可以定义不同的节点定义或类......”,这是推荐的吗? – Technext

+1

@Technext不完全。类应该在模块中而不是在目录目录中,它更容易组织并将相关项目(模板,文件,函数,Facter插件等)放在同一个模块中。节点定义应该在那里,如果你使用它们,但我建议使用Hiera(例如hiera_include),所以只有一个默认的节点定义。 –