2016-05-14 3 views
2

私はすべての可能なタスクを定義した役割を作成しました。また、私はホストAとホストBを持っています。ホストAでタスクの90%、ホストBでタスクの10%を実行できますか?私の不可能なコントローラはホストCです。異なるホスト上で実行可能なタスク

+1

ホストAのタスクの90%がホストBの10ということはどういう意味ですか? – shaps

+0

私はホストAにスタックをデプロイしており、ホストBに設定後スクリプトを実行したいと思います。これらのスクリプトは、実行可能なコントローラ(ホストC)またはホストAからホストBにプッシュする必要がありますが、 。 – tgcloud

+0

しかし、私はホストCにフェッチし、ホストBのscpに "delegate_to"を使ってスクリプトをプッシュすることができましたが、それらのスクリプトを実行することはできませんでした。 – tgcloud

答えて

3

私が考えることができる最初の方法は、在庫に基づく条件付きです。

私は次に、どのように多くのタスクに応じて、あなたの仕事上の条件文

- name: run this on A 
    debug: msg="this runs only on A 
    when: "'group_A' in {{group_names}}" 

- name: run this on B 
    debug: msg="this runs only on B 
    when: "'group_B' in {{group_names}}" 

を使用

# inventory 
[group_A] 
192.168.1.20 

[group_B] 
192.168.1.30 

これらgroup_Aとgroup_B

を呼ぶAのために、インベントリ内のグループを作成し、Bのグループすべてのタスクに条件を付けるのはあまりにも多いかもしれないので、以下のようにインクルードに条件文を使うことができます:

ファイル構造:

-tasks 
|- main.yml 
|- A_tasks.yml 
|- B_tasks.yml 

main.yml:

- include: A_tasks.yml 
    when: "'group_A' in {{group_names}}" 
- include: B_tasks.yml 
    when: "'group_B' in {{group_names}}" 

A_tasks.yml:

- name: run on A 
    debug: msg="this only runs on A" 

B_tasks.yml:

- name: run on B 
    debug: msg="this only runs on B" 
+0

これは古いバージョンのAnabilitiesでは正しく動作しているかもしれませんが、少なくとも2.4.2.0のバージョンでは、条件は '':group_A '' in group_names "'でなければなりません。 –

6

あなたは一つにすべてのタスクを分割している場合2つの異なるホスト間の役割は、それらのホストのどちらも本当にその役割を持っていませんか?私はあなたが本当に2つを持っているときに、それらの仕事の全てを一つの役割に集めるのは役割システムの濫用だと言います。

複数のホストAsを使用するとどうなりますか?複数のホストBsはどうですか?

あなたは実際にここで役割を使いたいとは思わない - あなたはプレーンオールのプレイブックを使いたいと思う。

- hosts: A 
    tasks: 
    [...] 

- hosts: B 
    tasks: 
    [...] 

プレイブックは、特定の順序で一連のアクションを定義するためのものであり、あなたの「Bにこのようなものを行うだけでこのようなものをやった後」ということです。

+1

私は同意しがちですが、理論的にはHadoopクラスタを設定する役割を持つことができ、マスターとスレーブで異なるタスクを実行する必要があります。これは構成管理を超えてインフラストラクチャ展開に向かいますが、それはAnsibleでサポートされています。 – smiller171

関連する問題