2017-05-25 16 views
1

私のアプリケーションをインストールするモジュールがあります。パペットアプリケーションのバージョンに応じて特定のバージョンのパッケージをインストールします

@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(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を使用したいと思っていますが、リソースの重複が心配です。助けてくれてありがとう!

+0

最も良い方法は、pendOsや読まれたマニュアルではない –

答えて

4

には、$app_versionをパラメータとして使用することをお勧めします。ここにあるドキュメントの例を参考にしてください:https://docs.puppet.com/puppet/4.10/lang_classes.html#appendix-smart-parameter-defaults。あなたの状況については

、クラスは次のようになります。

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' } 
    } 
} 

ので、また、あなたの仮想リソースを保持することができます。

あなたはそれが好きで宣言することにより、このクラスにパラメータを渡すことができます。

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

またはhieradataと自動データバインディングを使用して:

# puppet manifest 
include myclass 

# hieradata 
myclass::app_version: 2.0 

あなたのコレクタは他の場所で、あなたのための正しいバージョンを実現しますパッケージ。

関連する問題