2016-10-13 16 views
3

私はアプリケーションサーバーのインストールにいくつかの役割を持つ単一のプレイブックを持っていて、本番サーバーとテストサーバーの両方に同じプレイブックを適用したいとします。可能性:一部のホストのみに役割を実行

プロダクションサーバーとテストサーバーの両方で、プロダクションサーバーにのみ適用する必要があるロールのリストは同じですが、ロールのリストは同じです。

このロールは、同じプレイブックを使用しているプロダクションサーバーにのみ適用されるように指定することはできますか。

--- 
- hosts: appserver 
    roles: 
    - { role: mail, tags: ["mail"] } 
    - { role: firewall, tags: ["firewall"] } 
    - { role: webserver, tags: ["webserver"] } 
    - { role: cache, tags: ["cache"] } 

と私は2つのインベントリがあります:

例えば、脚本がある場合には、生産用とテストのための1つを。

テストインベントリを使用してプレイブックを実行すると、役割「ファイアウォール」を実行したくありません。

私の考えは、「生産の在庫で変数を設定するような何かをして、ファイアウォール「を 『』>に設定され、その後、役割を実行VAR <場合は、」...私はこの場合は知らないようなものを使用していますそれが可能ならば、どうすればいいのですか?

答えて

5

あなたは、あなたのインベントリファイルに、たとえばproduction_environmentために、変数を定義truefalse値を代入し、脚本に条件付きwhenを使用することができます。

--- 
- hosts: appserver 
    roles: 
    - { role: mail, tags: ["mail"] } 
    - { role: firewall, tags: ["firewall"], when: production_environment } 
    - { role: webserver, tags: ["webserver"] } 
    - { role: cache, tags: ["cache"] } 

それとも、直接inventory_file変数にアクセスすることができます。たとえば、あなたは-i productionを使用する場合:あなたが行く道

--- 
- hosts: appserver 
    roles: 
    - { role: mail, tags: ["mail"] } 
    - { role: firewall, tags: ["firewall"], when: inventory_file == "production" } 
    - { role: webserver, tags: ["webserver"] } 
    - { role: cache, tags: ["cache"] } 

は、行政決定です。 2番目の方法では手順が少なくなりますが、プレイブックにインベントリファイル名を「ハードコード」する必要があります。

+0

両方gileの答えとあなたたち正確に私が探していたもの(私はちょうどそれを投稿したので、私はgileの答えを受け入れた:))あなたの助けをありがとう! – tvs

+1

@tvsあなたのケースに合った別の方法を追加しました。 – techraf

5

在庫グループを使用するのはなぜですか? 2つのインベントリを作成します。

テスト:

[application] 
my-dev-server 

生産:

[application] 
company-prod-server 

[firewall] 
company-prod-server 

そして、次のように自分の脚本を変更します。

--- 
- hosts: firewall 
    roles: 
    - { role: firewall, tags: ["firewall"] } 

- hosts: application 
    roles: 
    - { role: mail, tags: ["mail"] } 
    - { role: webserver, tags: ["webserver"] } 
    - { role: cache, tags: ["cache"] } 
+0

すてきなオプション!私はこのようなものを「生産」の目録で使うことができますか? '[アプリケーション] 会社-PROD-サーバー [ファイアウォール:子供] アプリケーション ' 私は右、二回のすべてのサーバーを指定しないよう、その方法は? (各カテゴリに複数のサーバーがあるので、私にとっては非常に重要です) – tvs

+0

@tvsはい、これは期待通りに機能するはずです。 –

関連する問題