我有一个混合环境,我需要在不同的红帽服务器上安装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
答案 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中真的不鼓励这样做,所以我建议你在走这条路之前仔细考虑一下,然后问一下在同一个版本上获取所有东西会不会更容易。