web-dev-qa-db-ja.com

Puppet&Facter-Cent 6とCent 5のどちらを実行しているかを判別する方法

OSがCent 6.xとCent 5.xのどちらを実行しているかを判断するには、facterとpuppetをどのように使用しますか?

facter operatingsystemrelease 
6.4

私はメジャーリリースのみを気にします(6)

私はawkの使用を考えましたが、より「人形のマニフェスト」に適したより良い方法があるはずです。

   #This works, but is ugly trying to use this in a puppet manifest

facter operatingsystemrelease |awk -F. '{print $1}'
6

更新

新しいバージョンのfacterには、私のバージョンにはないメジャーリリースに関する追加情報があるようです。私の最初のプロビジョニングでは、ファクターが古くなっていると想定する必要があります。

facter --version
1.6.4
puppet --version
2.7.20

次のコマンドを使用して、メジャーリリースを示す可能性のあるその他の事実を検索してみました

facter |grep 6
5
spuder

operatingsystemmajreleaseがあります

% facter operatingsystemmajrelease
6

Redhat-lsb-coreパッケージがインストールされている場合、facterはlsbが提供するファクト(lsbmajdistreleaseを含む)のファミリーも取得します。

% facter |grep ^lsb
lsbdistcodename => Final
lsbdistdescription => CentOS release 6.4 (Final)
lsbdistid => CentOS
lsbdistrelease => 6.4
lsbmajdistrelease => 6
lsbrelease => :base-4.0-AMD64:base-4.0-noarch:core-4.0-AMD64:core-4.0-noarch

注:operatingsystemmajreleaseを使用するには、少なくともFacter 1.7が必要です。 Facter 1.6のコアファクト は非常に制限されています。

11
Teftin

あなたは、インストールバージョンに基づいて何らかの決定をしようとしていると思います。

ロジックで正規表現を使用できます。

だから次のようなもの:

case $operatingsystemrelease {
    /^6.*/: {
        //do 6.x stuff
    }
    /^5.*/: {
        //do 5.x stuff
    }
}

またはifの方があなたのスタイルの場合:

if $operatingsystemrelease =~ /^6.*/ {
    //do 6.x stuff
}
elsif $operatingsystemrelease =~ /^5.*/ {
   // do 5.x stuff
}

すべての因子ファクトは、マニフェストのグローバルスコープ変数で使用できることに注意してください。

あなたが混合環境を持っているなら、おそらくそれを次のようなものにラップしたくなるでしょう:

if $operatingsystem == "CentOS" {
}
5
Zypher