puppet使用不同的版本安装多个samba包

时间:2016-11-30 19:57:30

标签: install puppet packages samba

我有一个混合环境,我需要在不同的红帽服务器上安装samba / samba3x,libsmbclient软件包。编写模块的最佳方法是什么,我应该为每个包编写一个单独的模块,还是可以编写一个将使用所有包的模块以及如何处理不同的版本?做这个的最好方式是什么?

这是布局:

Redhat 5:

Host-A:
samba3x-3.6.23-12.el5_11
libsmbclient-3.0.33-3.41.el5_11  

Host-B:
samba-3.0.33-3.41.el5_11
libsmbclient-3.0.33-3.41.el5_11  

-------------------------------

Redhat 6:

Host-C:
samba-3.6.23-35.el6_8.x86_64
libsmbclient-3.6.23-35.el6_8.x86_64   

1 个答案:

答案 0 :(得分:0)

这里有2个选项,您使用哪个选项取决于您想要做什么。

如果您只想安装最新版本或 版本的软件包,只需使用ensure => installed即可。这将确保您安装了软件包,但不会更新或安装它们。这些包在RedHat 5和RedHat 6上命名相同,所以它不是太棘手:

package { ['samba', 'libsmbclient']:
  ensure => installed
}

如果您需要包的特定版本,则可以使用在许多模块中流行的params.pp模式。在params.pp中,有一个case语句,它确定你需要的包版本并从那里继承它。它可能看起来有点像这样。

params.pp

class samba::params {
case $::operatingsystemmajrelease {
 '5': { 
    $samba_version = '3.6.23-12.el5_11'
    $libsmb_version = '3.0.33-3.41.el5_11' 
  }
 '6': {
    $samba_version = '3.6.23-35.el6_8.x86_64'
    $libsmb_version = '3.6.23-35.el6_8.x86_64'
  }
}
}

init.pp

class samba (
  $samba_version = $samba::params::samba_version,
  $libsmb_version = $samba::params::libsmb_version
) inherits samba::params {

  package { 'samba3x':
    ensure => $samba_version
  }
  package { 'libsmbclient':
    ensure => $libsmb_version
  }
}

现在我注意到你的RHEL5服务器上有不同的samba版本。如果您需要支持 ,则需要使用hiera之类的内容来基于每个节点覆盖上述参数。在Puppet中真的不鼓励这样做,所以我建议你在走这条路之前仔细考虑一下,然后问一下在同一个版本上获取所有东西会不会更容易。