1

ノードが Debian マシンであるかどうかに応じて、わずかに異なるアクションを実行する次のコードを取得しました。

class nginx::package {

  case $operatingsystem {
    'debian': {
      apt::preference { 'nginx':
        package => 'nginx nginx-common',
        priority => '600',
        release => 'a=squeeze-backports',
      }

      package { 'nginx':
        ensure => present,
        require => Apt::Preference['nginx'],
      }
    }
    default: {
      package { 'nginx':
        ensure => present,
      }
    }
  }

}

重複を減らす方法があるはずですが、私には明らかなことは何もありません。考え?

4

2 に答える 2

1

パッケージが2回リストされている方法を意味しますか? 基本的な答えはrequire、関係の一方の端と他方の端で同じbeforeであるということです。これにより、条件内にある必要があるアイテムに関係仕様を移動できます。

class nginx::package {
  case $operatingsystem {
    'debian': {
      apt::preference { 'nginx':
        package => 'nginx nginx-common',
        priority => '600',
        release => 'a=squeeze-backports',
        before => Package['nginx'];
      }
    }
    default: {} # nothing
  }
  package { 'nginx':
    ensure => present,
  }
}

詳細については、パペット メタパラメータ ドキュメントを参照してください。

パペットの新しいバージョンでの別の代替手段は、次のような連鎖を使用することです。

class nginx::package {
  case $operatingsystem {
    'debian': {
      apt::preference { 'nginx': ...}
      Apt::Preference['nginx'] -> Package['nginx']
    }
    default: {}
  }
  package { 'nginx': ... }
}

最後にPackage['nginx'] { require => Apt::Preference['nginx'] }、パッケージに要件を追加するために呼び出すことができる構文がありますが、継承されたクラスでそれを行う必要があると思います。これにより、例がより複雑になり、利用可能なリソースチェーンがより便利になりましたリソースへの変更の前/後/サブスクライブ/通知以外の場合。

class nginx::package::aptpreference inherits nginx::package {
  Package['nginx'] { require => Apt::Preference['nginx'] }
}
class nginx::package {
  case $operatingsystem {
    'debian': {
      apt::preference { 'nginx': ...}
      include nginx::package::aptpreference
    }
    default: {}
  }
  package {...}
}
于 2012-02-01T18:08:37.303 に答える
0

これにはセレクターを使用できます。

私は if ステートメントが嫌いで、その代わりに case ステートメントを楽しんでいるので、apt::preference セクションはそのままにしておきます。ただし、その中で処理されているパッケージを削除します

パッケージを外部に移動し、セレクターを使用して必要な注文を処理します。

package { foo:
  ensure => present,
  require => $::operatingsystem ? { 
    default => undef,
    debian => Apt::Preference[foo],
  },
}
于 2012-03-21T01:26:15.630 に答える