2016-03-20 28 views
1

と仮定I持って同じ条件でベースを実行される複数のpretasks:私は繰り返す必要はありません、それは、そのようなことを書き換えることができますどのようにAnsible:複数PRETASKに同じ条件を使用する方法

pre_task: 
    -name: Task1 
    when: condition1 
    -name: Task2 
    when: condition1 
    -name: Task3 
    when: condition1 

Task1、Task2、Task3の条件は?

答えて

2

YAMLの参照

これはAnsibleとは完全に無関係です。参照とアンカーはYAMLの一部です。 &fooと定義されると、同じYAML文書で*fooとして再利用することができます。

pre_task: 
    - name: Task1 
    when: &myCondition condition1 
    - name: Task2 
    when: *myCondition 
    - name: Task3 
    when: *myCondition 

ブロック

Ansible 2 blocksを導入しました。ブロックを使用すると、タスクをグループ化することができます。また、他の機能と並んで、ブロックに含まれるすべてのタスクに適用される条件を指定できます。

pre_tasks: 
    - block: 
     - name: Task1 
     - name: Task2 
     - name: Task3 
    when: condition1 

これは、有効な解決策よりも回避策です

が含まれています。しかし、ブロックされていないので、Ansible 1では広く使われていました。インクルードは条件を満たすことができ、含まれるすべてのタスクに適用されます。その後、otherFile.ymlに含まれている

- include: otherFile.yml 
    when: condition1 

すべてのタスク:

- name: Task1 
- name: Task2 
- name: Task3 

ループ

あなたのタスクは、同じタイプのものであり、唯一異なるパラメータを取る場合にのみ動作します。

- name: All 3 tasks 
    template: 
    src: "{{ item.src }}" 
    dest: "{{ item.dest }}" 
    when: condition1 
    with_items: 
    - src: template1.j2 
     dest: /some/path/file1 
    - src: template2.j2 
     dest: /some/path/file2 
    - src: template3.j2 
     dest: /some/path/file3 

ループでは、1回の繰り返しごとに条件が実行されます。

関連する問題