6

アプリサーバーをインストールするためのいくつかの役割を持つ単一の Playbook があり、同じ Playbook を実稼働サーバーとテスト サーバーの両方に適用したいとします。

実稼働サーバーとテスト サーバーの両方に、実稼働サーバーにのみ適用する必要がある 1 つの例外を除いて、同じロール リストがあります。

このロールが同じ Playbook を使用する本番サーバーにのみ適用されるように指定することはできますか?

たとえば、プレイブックが次の場合:

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

2 つのインベントリがあります。1 つは本番用、もう 1 つはテスト用です。

テスト インベントリを使用して Playbook を実行するときに、「ファイアウォール」ロールを実行したくありません。

私の考えは、「プロダクション」インベントリに変数を設定するようなことを行い、「<var> が設定されている場合は、ロール「ファイアウォール」を実行する」などを使用することです...これが可能かどうか、そしてそれが可能かどうかはわかりませんは、どうすれば?

4

3 に答える 3

10

たとえばproduction_environment、インベントリ ファイルで変数を定義し、プレイブックで条件を割り当てtrueたり、false値を付けたり、使用したりできます。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 番目の方法は少ない手順で済みますが、プレイブックでインベントリ ファイル名を「ハードコード」する必要があります。

于 2016-10-13T01:30:21.147 に答える
7

インベントリ グループを使用しないのはなぜですか。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"] }
于 2016-10-13T07:02:18.310 に答える
3
- { role: firewall, tags: ["firewall"], when: MyVar }

ロールとインクルードへの「いつ」の適用を参照してください。

于 2016-10-13T01:25:08.203 に答える