Ansible-高度な実行
この章では、Ansibleを使用した高度な実行とは何かを学習します。
タスクによる実行を制限する方法
これは非常に重要な実行戦略であり、プレイブック全体ではなく、1回の実行のみを実行する必要があります。 For example、サーバーを停止するだけで(本番環境の問題が発生した場合)、サーバーのみを起動するパッチを適用したいとします。
ここで、元のプレイブックでは、停止と開始は同じプレイブックの異なる役割の一部でしたが、これはタグを使用して処理できます。さまざまな役割にさまざまなタグを提供でき(タスクがあります)、したがって、実行者によって提供されたタグに基づいて、指定された役割/タスクのみが実行されます。したがって、上記の例では、次のようなタグを追加できます。
- {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