Puppet根据应用程序版本安装特定版本的软件包

时间:2017-05-25 17:43:53

标签: ruby duplicates puppet

我有一个安装我的应用程序的模块。 要安装系统软件包,我正在使用虚拟资源:

@package {[
    'unzip',
    'wget',
    'htop',
    'xorg-x11-server-Xvfb']:
      ensure => installed,
}

define myapp1_packages {
  realize(
    Package['unzip'],
    Package['fontconfig'],
    Package['libfreetype.so.6'])
}
@myapp1_packages{ 'myapp1_packages': }

然后我在清单中使用realize来安装上面的包:

realize(myapp1_packages['myapp1_packages'])

但对于我的应用程序的每个版本,我还需要适当版本的系统包。

我需要这样的东西:

if $app_version == '1.0' {
    "install unzip-1xx"
    "install fontconfig-1-xx"
    "install libfreetype.so.6-1-x-xx"
elseif $app_version == '2.0'
    "install unzip-2xx"
    "install fontconfig-2-xx"
    "install libfreetype.so.6-2-x-xx"

最优雅的方法是什么?在这种情况下是否可以保留虚拟资源?我想使用ensure_packages但我担心资源重复。谢谢你的帮助!

1 个答案:

答案 0 :(得分:4)

此处最好的做法是为您的模块$app_version添加myclass($app_version = 'default version') { if $app_version == '1.0' { @package { 'unzip': ensure => '1xx' } @package { 'fontconfig': ensure => '1-xx' } @package { 'libfreetype': ensure => '6-1-xx' } } elsif $app_version == '2.0' { @package { 'unzip': ensure => '2xx' } @package { 'fontconfig': ensure => '2-xx' } @package { 'libfreetype': ensure => '6-2-xx' } } } 参数。https://docs.puppet.com/puppet/4.10/lang_classes.html#class-parameters-and-variables。请注意此处文档中的示例:https://docs.puppet.com/puppet/4.10/lang_classes.html#appendix-smart-parameter-defaults

根据您的情况,该课程将如下所示:

class { 'myclass': app_version => '2.0' }

因此也允许您保留虚拟资源。

然后,您可以通过声明它来将参数传递给此类:

# puppet manifest
include myclass

# hieradata
myclass::app_version: 2.0

或使用与hieradata的自动数据绑定:

:before

您在其他地方的收藏家将为您的包装实现正确的版本。