2017-04-03 6 views
0

と一致したときに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にコピーすることはありません。

最後に、私は、グローバーのオリジナルの設定ファイルのバックアップを保存クロバーを許可した後、最後のタスクとして保存されたファイルをコピーバックのようなゲットー・ソリューションを避けるためにしたいと思います。

私はここで何かを紛失しているに違いありません。私はこのシナリオを実行する唯一の人ではありませんでした。誰もがこれをコード化する方法を知っていますか?

+0

スタート... –

+0

@Konstantinスヴォーロフ:ありがとう!これは実際には答えですが、私はそれをコメントする方法を知らないのですが。私が実際のインベントリホスト名を使用した瞬間、予想どおりに動作し始めました。しかし、私はグループに変数を適切に割り当てることができず、私が望んでいたように、グループ内の各ホストについてそれらを参照させることができないのは残念です。つまり今はもっと多くのタスクを設定する必要があることを意味しますが、これはほんの些細なことだと思います。再度、感謝します! – Viscosity

答えて

0

この質問に対する回答は、コード内の不要なwith_itemsを削除することです。 with_itemsをそのまま使用すると、ホストパターングループに委任することができますが、そのグループ内のホストにも変数を適切に定義/割り当てすることはできません。

delegate_toの修正のために、この問題を、単一のホストエンティティを定義して、タスクが定義されているすべてのホスト上で期待通りに実行されます。彼は、元の答え-ERあったよう

コンスタンチンスヴォーロフは、このためにクレジットを取得する必要があります。

また、Anabilitiesがホストグループに簡単な委任を許可していないことに驚いています。彼らがそれを許さなかった理由があるに違いありません。不要な `with_items`を削除すると

関連する問題