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