0

製品やアプリケーションの構成ファイル、メンテナンス スクリプトの配布など、さまざまな種類のアプリケーションを管理するために、私たちのチームに Ansible を実装しようとしています...

意味のない名前のホスト名が 300 以上あるため、チームで「ホスト名」を使用するのは好きではありません。そのため、次のような Ansible hosts ファイルでそれらのエイリアスの作成を開始しました。

[bpm-i]
bpm-app1-i1   ansible_user=bpmadmin  ansible_host=el1001.bc
bpm-app1-i2   ansible_user=bpmadmin  ansible_host=el1003.bc

[bpm-u]
bpm-app1-u1   ansible_user=bpmadmin  ansible_host=el2001.bc
bpm-app1-u2   ansible_user=bpmadmin  ansible_host=el2003.bc

[bpm-all:children]
bpm-i
bpm-u

つまり、「app1」という名前の BPM アプリケーションがあり、統合テストでは 2 つのホストにデプロイされ、ユーザー受け入れテストでは 2 つのホストにデプロイされます。ここまでは順調ですね。これで、Ansible プレイブックを実行して、(たとえば) チーム メンバーの SSH アクセス (authorized_keys) をセットアップしたり、メンテナンス スクリプトをプッシュしたりできます。これらの PB は、各ホストで個別に、すべてのホスト ITT または UAT で、あるいはどこでも実行できます。

ただし、通常、同じアプリケーション app1 を既存のホストに再度インストールしますが、目的は異なります (「トレーニング」環境など)。私の反射はこれを行うことです:

[bpm-i]
bpm-app1-i1   ansible_user=bpmadmin  ansible_host=el1001.bc
bpm-app1-i2   ansible_user=bpmadmin  ansible_host=el1003.bc

[bpm-u]
bpm-app1-u1   ansible_user=bpmadmin  ansible_host=el2001.bc
bpm-app1-u2   ansible_user=bpmadmin  ansible_host=el2003.bc

[bpm-t]
bpm-app1-t1   ansible_user=bpmadmin  ansible_host=el2001.bc
bpm-app1-t2   ansible_user=bpmadmin  ansible_host=el2003.bc

[bpm-all:children]
bpm-i
bpm-u
bpm-t

しかし... PBの実行は混乱し、エラーを引き起こします。論理的には、同じユーザー/ホストの組み合わせに到達するために、bpm-app1-u1 と bpm-app1-t1 という 2 つのエイリアス名があります。まったく論理的ですが、新しいメンテナンス スクリプトをテストする場合は、最初に bpm-app1-i1 にプッシュしてテストし、問題がなければ bpm-all に対して PB を実行します。しかし、一部のエイリアスのユーザー/ホストの組み合わせが一意ではないため、PB は同じユーザー/ホストで複数回実行されます。PB のアクションによっては、これが偶然に機能することもありますが、ひどく失敗することもあります。

Ansible に「すべてのユーザー/ホストの組み合わせで実行 - ユニークなユーザー/ホストの組み合わせで実行する」ように指示する方法はありませんか?

4

1 に答える 1

0

ほとんどのタスクはリモート ホストで何かを変更するため、条件付きを使用して、実行前にホストでその変更を確認できます。

たとえば、Playbook にリモート ホスト上にファイルを作成するwhenスクリプトを実行するタスクがある場合、「ファイルが存在する場合はタスクをスキップする」という句を追加し、そのファイルの存在をそのstat前のタスクでチェックすることができます。 .

- Check whether script has run in previous instance by looking for file
  stat: path=/path/to/something
  register: something

- name: Run Script when file above does not exist
  command: bash myscript.sh
  when: not something.exists
于 2016-06-09T11:21:30.620 に答える