web-dev-qa-db-ja.com

カスタマイズされたファイルをpuppet経由でサーバーに配信する方法はありますか

Puppetを介して管理しているマシンがいくつかあります。マシンは物理的に異なる場所にあります。各場所には特定の場所番号があります。

正しい場所番号が含まれている必要がある構成ファイルがあります。

したがって、/ etc /abc.confの内容は次のようになります。

this=that
location=$LOCATION_NUMBER
bananas=tasty

ファイルがマシンにプッシュダウンされるとき、実際にはロケーション番号である$ LOCATION_NUMBERが必要です。

このファイルをpuppetで管理できますか?

LOCATION_NUMBERのファクトをエクスポートした場合、puppetはファイルをマシンにプッシュするときに正しいロケーション番号を書き込むことができますか?

ありがとう。

6
Ed Manet

あなたが探しているのはテンプレートと呼ばれます。これはPuppetのコア機能であり、非常に便利です。 RubyコードとFacter変数を使用してファイルを作成できるeRB形式でファイルを作成します。例を次に示します。

file { '/etc/my_config_file':
  ensure => present,
  owner => 'root',
  group => 'root',
  mode => 0700,
  content => template('module/my_config_file.erb'),
}

ここで、templates/notfiles/)の下のモジュール階層に、ファイルmy_config_file.erbを配置します。

this=that
location=<%= LOCATION_NUMBER %>
bananas=tasty

<%= %>形式は、いくつかのRubyコードを実行し、結果を返すことを示しています。この場合、すべてのファクトは、ipaddresslsbmajdistrelease、またはLOCATION_NUMBER(などのローカル変数として使用できます。カスタムファクト)。ifステートメントなど、<% %>内で結果を直接返さない他のRubyコード)を使用することもできます。

<% if LOCATION_NUMBER == 7 %>
custom_config=true
<% else %>
custom_config=false
<% end %>

編集:この回答を読み直したので、ファクト名に大文字を使用しないことをお勧めします。 Rubyでは、大文字で始まる変数は不変です。これが本当にの問題であるかどうかはわかりませんが、慣例に反します。

11
Kyle Smith

さらに、$ LOCATION_NUMBER変数を、 [〜#〜] enc [〜#〜] によって返されるパラメーターとして格納できます。 ENCを使用して、特定の場所(またはドメイン)、またはグループまたはホスト名のホストが特定の変数を取得するようにします。 DashboardやTheForemanなど、いくつかの優れた無料のENCが事前に構築されて利用可能です。

0
Not Now