2017-01-04 11 views
1

私はそれが可能であるかどうかを知りたいのですが、2つの異なるホストに対して6つの異なるタスクをパラレルに(3 | 3)展開することができます。 1つのプレイブック、彼らは単にシーケンシャルを実行します。実行可能な2.2.0

答えて

0

これはasyncタスクで行うことができます。このような何か:

- hosts: host1,host2 
    tasks: 
    - command: /task1a.sh 
     async: 1000 
     poll: 0 
     register: task1a 
     when: inventory_hostname == 'host1' 
    - command: /task1b.sh 
     async: 1000 
     poll: 0 
     register: task1b 
     when: inventory_hostname == 'host2' 
    # ... repeat for tasks 2 and 3 
    - command: /check_done.sh 
     register: check_done 
     until: check_done | success 
     retries: 30 

これは、それぞれhost1とhost2の上のジョブ非同期としてtask1a.shとtask1b.sh開始してからゼロを返すためにcheck_done.shを待ちます。あなたは、例えば、when: inventory_hostname == 'hostXX'と組み合わせてstrategy: freeを見ることができます

+0

ありがとうございます。私の問題は、2つのホストで実行されている3つの異なるタスクではなく、2つのホスト(ホスト1では3、ホスト2では別の3)で6つの異なるタスクが実行されています。 – famg

+0

私は答えを更新しました –

0

- hosts: all 
    strategy: free 
    tasks: 
    - block: 
     - name: task1 
      ... 
     - name: task2 
      ... 
     - name: task3 
      ... 
     when: inventory_hostname == 'host1' 

    - block: 
     - name: task4 
      ... 
     - name: task5 
      ... 
     - name: task6 
      ... 
     when: inventory_hostname == 'host2' 

strategy: freeは、すべてのタスクは、各タスクが終了するのをそれぞれに待機していない、早く彼らができるように並列内のすべてのホスト上で実行することを意味しますホスト。どのタスクがどのホスト上で実行されるのかは、when節で決定されます。

あなただけの各ブロックの1 whenを記述する必要があるように私は、ここにblockを使用していますが、それを使用する必要はありません、あなたは、各タスクにwhenを書くことができます。

関連する問題