と一致したときにdelegate_toで特定のサーバーにテンプレートファイルをコピーすることです以内に、私は仕事の上で脚本を持っている委任されたホスト上で実行されているがありますbigbird、grover、oscarAnsibleタスクは、問題のファイル名は、ホスト名
これらのテンプレートファイルは、各サーバーのホスト名と一致する名前を持っていなければなりません。また、委任サーバーgroverも、そのファイルのインスタンスを所有している必要があります。このテンプレートのコピー操作は、ファイルが存在しない場合にのみ実行してください。/tmp/groverはサーバーgroverにあらかじめ存在しており、プレイブックの実行によって変更されないままにする必要があります。
最終的には、サーバーgrover上の/ tmp/groverに加えて、実行後に/ tmp/bigbirdと/ tmp/oscarも存在する必要があります。
プレイリストが条件なしで実行されたときに機能しますが、それでも受け入れられないclobbers/overwrites/tmp/groverです。
しかし、以前の演奏でタスクを追加してこれらのファイルを事前にチェックし、テンプレートの条件付きでGroverをスキップすると、そのファイルがすでに存在する場合、groverをスキップするだけでなく、それはその遊びのためにグローバーでも実行されるだろう。私がそれを他のすべてのサーバでも実行するように設定しようとすると、デリゲートサーバがgroverであり、それがスキップされるために失敗します。ここで
脚本はパターンをホストすることにより、すべての3台のサーバ上で実行されている実際のコード例のsnipits、次のとおりです。私はとの/ tmp /グローバーはグローバー上に存在する、それは単純にスキップする、ことを実行した場合
- hosts: bigbird:grover:oscar
- name: File clobber check.
stat:
path: /tmp/{{ansible_hostname}}
register: clobber_check
delegate_to: "{{ item }}"
with_items:
- "{{ grover }}"
- name: Copy templates to grover.
template:
backup: yes
src: /opt/template
dest: /tmp/{{ansible_hostname}}
group: root
mode: "u=rw,g=rw"
owner: root
delegate_to: "{{ item }}"
with_items:
- "{{ grover }}"
when: (not clobber_check.stat.exists) and (clobber_check is defined)
Grover上で条件が満たされなかったため、コピー全体が再生されます。したがって、他のサーバは、この問題のために/ tmp/bigbirdと/ tmp/oscarテンプレートをgroverにコピーすることはありません。
最後に、私は、グローバーのオリジナルの設定ファイルのバックアップを保存クロバーを許可した後、最後のタスクとして保存されたファイルをコピーバックのようなゲットー・ソリューションを避けるためにしたいと思います。
私はここで何かを紛失しているに違いありません。私はこのシナリオを実行する唯一の人ではありませんでした。誰もがこれをコード化する方法を知っていますか?
スタート... –
@Konstantinスヴォーロフ:ありがとう!これは実際には答えですが、私はそれをコメントする方法を知らないのですが。私が実際のインベントリホスト名を使用した瞬間、予想どおりに動作し始めました。しかし、私はグループに変数を適切に割り当てることができず、私が望んでいたように、グループ内の各ホストについてそれらを参照させることができないのは残念です。つまり今はもっと多くのタスクを設定する必要があることを意味しますが、これはほんの些細なことだと思います。再度、感謝します! – Viscosity