Ansible-advanced-execution
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