Ansible-advanced-execution

提供:Dev Guides
移動先:案内検索

Ansible-高度な実行

この章では、Ansibleによる高度な実行とは何かを学びます。

タスクによる実行を制限する方法

これは、プレイブック全体ではなく、1つの実行のみを実行する必要がある非常に重要な実行戦略です。 たとえば、サーバーを停止するだけで(運用上の問題が発生した場合)、サーバーの起動のみを希望するパッチの適用をポストするとします。

元のプレイブックでは、ストップとスタートは同じプレイブックの異なる役割の一部でしたが、これはタグの使用で処理できます。 異なるロールに異なるタグを提供し(これにはタスクが割り当てられます)、したがって、指定されたロール/タスクのみが実行されるエグゼキューターによって提供されるタグに基づきます。 したがって、上記の例では、次のようなタグを追加できます-

- {role: start-tomcat, tags: ['install']}}

次のコマンドは、タグの使用に役立ちます-

ansible-playbook -i hosts <your yaml> --tags "install" -vvv

上記のコマンドを使用すると、start-tomcatロールのみが呼び出されます。 提供されるタグでは大文字と小文字が区別されます。 完全一致がコマンドに渡されていることを確認してください。

ホストによる実行を制限する方法

特定のホストで特定のステップを実行するには、2つの方法があります。 特定の役割に対して、ホストを定義します-特定の役割を実行する特定のホストについて。

- hosts: <A>
   environment: "{{your env}}"
   pre_tasks:
      - debug: msg = "Started deployment.
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "

   roles:
      - {role: <your role>, tags: ['<respective tag>']}
   post_tasks:
      - debug: msg = "Completed deployment.
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"

- hosts: <B>
   pre_tasks:
      - debug: msg = "started....
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "

   roles:
      - {role: <your role>, tags: ['<respective tag>']}
   post_tasks:
      - debug: msg = "Completed the task..
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"

上記の例のように、提供されるホストに応じて、それぞれのロールのみが呼び出されます。 これで、ホストAとBがホスト(インベントリファイル)に定義されました。

代替ソリューション

別の解決策は、変数を使用してプレイブックのホストを定義し、*-extra-vars *を介して特定のホストアドレスを渡すことです。

# file: user.yml  (playbook)
---
- hosts: '{{ target }}'
   user: ...
playbook contd….

プレイブックの実行

ansible-playbook user.yml --extra-vars "target = "<your host variable>"

\ {\ {target}}が定義されていない場合、プレイブックは何もしません。 必要に応じて、hostsファイルのグループもパススルーできます。 余分な変数が提供されない場合、これは害になりません。

単一のホストを対象としたプレイブック

$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts