web-dev-qa-db-ja.com

パペットモジュールにパラメーターを渡す方法は?

Puppetモジュールの構成のベストプラクティスは何ですか?私は人形を持っています2.7.11。この方法は非常に厄介で、グローバル変数を使用しているように見えます。

node default {
   $always_apt_update = true
   include apt
}

ほとんどの構成を元のクラスから継承するクラスを作成する必要がありますか?ドキュメントのバージョンが多すぎるようで、どれが自分に当てはまるのかわかりません。

更新:

私がこれを試したとき:

  class { 'apt': 
    always_update => 'true',
  } 

エラーが発生します:

Error 400 on SERVER: Invalid parameter always_update at /etc/puppet/manifests/nodes.pp:32
6
Tombart

グローバル変数の代わりにパラメータ化されたクラスを使用する必要があります。

例えば:

node default {
  class {'apt': 
    always_update =>true 
  }
}
class apt ($always_update = true ) {
  // code 
}

node 'example.com' { 
  class { bar: }
}

詳細については、人形のドキュメントを参照してください。

6
Kristaps

これらの回答は少し時代遅れのようです。Puppetの新しいバージョン、つまり3.7.xでは、Hieraを使用してクラスパラメーターを渡すことができます。クラス宣言のようなリソースは、もは​​やベストプラクティスとは見なされていません。

2番目の答えはHieraを使用しますが、「hiera」関数を明示的に使用していますが、これもあまりお勧めできない方法です。

新しいソリューションは次のようになります。

/etc/puppet/manifests/site.pp

node default {
    include apt
}

/etc/puppet/modules/apt/manifests/init.pp

class apt ($always_update = true ) {
  // code 
}

/etc/puppet/hieradata/<filename>.yaml

apt::always_update: true

Hieraデータyamlファイルは、必要に応じてパラメーターの異なる値を持つことができます。

4
Keshav Sharma

最近の推奨プラクティスは Hiera を使用することです。 3.xに組み込まれていますが、2.7では個別にインストールする必要があります。

次に、aptクラスのマニフェストでHieraからデータを取得できます。

$always_apt_update = hiera("always_apt_update")

このようなHiera構成では...

:hierarchy:
  - %{::clientcert}
  - common

..ノード(clientcertファクトからプルされた)は、common.yamlファイルよりもルックアップで優先順位が高くなります。

したがって、always_apt_update: falsenode1.example.com.yamlalways_apt_update: truecommon.yamlを使用すると、node1はその変数がfalseに設定され、他のノードはデフォルトでtrueになります。

3
Shane Madden