木偶重复资源和虚拟资源

概观

我刚开始使用Puppet,一直无法索回。

问题

由于规范化,当我将两个类添加到具有相同依赖性的包的节点时,它将失败。

简单地说就是有重复的资源 – 在这种情况下是包libssl

注意:软件包被阻止以防止最新的软件包被安装。

最好的做法是什么?

 class ssh { package { 'openssh-server': ensure => installed, require => Package['libssl'], } package { 'libssl': ensure => installed, } } class apache { package { 'apache': ensure => installed, require => Package['libssl'], } package { 'libssl': ensure => installed, } } node server { include apache include openssl-server 

你有两个看起来几乎相同的select。

1:做成自己的class级。

 class ssh { package { 'openssh-server': ensure => present, require => Class['ssl'], } } class ssl { package { 'libssl': ensure => present, } } 

2:虚拟资源

 class vpackages { @package { 'libssl': } } class ssh { include vpackages package { 'openssh-server': ensure => present, require => Package['libssl'], } realize Package['libssl'] } 

我发现把自己的模块中的依赖分解出来比使用虚拟资源更好。

如果使用标准软件包pipe理来pipe理通过Puppet安装的软件包,则应该能够libssl Puppet中的libssl软件包依赖项,因为在大多数系统上这将通过软件包pipe理系统自动处理。

在Debian / Ubuntu以及RedHat / CentOS / SuSE系统中,软件包pipe理工具将查找依赖关系,除非您已经停止了默认行为,否则当Puppet告诉系统安装包(在你的情况下只是openssh-serverapache

这有点难看,但有一个定义的()函数返回true / false。 这样,您可以多次定义资源,但只有在第一次评估时才“意识到”。 (使用木偶跑步阶段!)

例如,

 if defined(Package['libssl']) == false { package { 'libssl': ensure => installed, } }