Ansibleを使用してJunosデバイスを停止、再起動、またはシャットダウンする
概要 ジュニパーネットワークスのAnsibleモジュールを使用して、Junosデバイスの停止、再起動、またはシャットダウンを行います。
Ansibleを使用してデバイスを停止、再起動、またはシャットダウンする
ジュニパーネットワークスは、Ansibleを使用したJunosデバイスの管理をサポートし、デバイスの停止、再起動、またはシャットダウンを可能にするAnsibleモジュールを提供しています。 表 1 に、使用可能なモジュールの概要を示します。
コンテンツセット |
モジュール名 |
---|---|
リリース 2.0.0 以降Juniper.junos
、juniper_junos_system
モジュールは および junos_zeroize
モジュールの機能をjunos_shutdown
置き換えます。
モジュールを使用して、Junosデバイス上で以下の操作を要求することができます。デフォルトでは、モジュールは要求された操作をただちに実行し、デュアルルーティングエンジンまたはバーチャルシャーシ設定のすべてのルーティングエンジンでその操作を実行します。
-
即時のシステム停止、再起動、またはシャットダウン
-
オプションの遅延を伴う停止、再起動、またはシャットダウン操作
-
特定の日時にスケジュールされた停止、再起動、またはシャットダウン操作
および juniper_junos_system
モジュールにはsystem
、モジュールが実行するアクションを定義する引数 action
が 1 つ必要です。表 2 ではaction
、デバイスの停止、再起動、またはシャットダウンに必要なパラメーター値を定義し、各アクションと対応する CLI コマンドについて簡単に説明しています。アクション"zeroize"
の詳細については、次を参照してください:Ansibleを使用してJunosデバイスを工場出荷時のデフォルト設定に復元する。
パラメータの値 |
形容 |
同等の CLI コマンド |
---|---|---|
|
Junos OSソフトウェアを正常にシャットダウンするが、システム電源を維持する |
|
|
Junos OSソフトウェアを再起動します。 |
|
|
Junos OS ソフトウェアを正常にシャットダウンし、ルーティング エンジンの電源をオフにします。 |
|
次のAnsibleプレイブックでは、 system
モジュール action: "reboot"
を使用して、指定されたインベントリグループ内のホスト上のすべてのルーティングエンジンを直ちに再起動します。
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no tasks: - name: Reboot all REs on the device juniper.device.system: action: "reboot"
遅延して、または指定した時間に停止、再起動、またはシャットダウンを実行する方法
指定した分数だけ停止、再起動、またはシャットダウン操作を遅らせるには、オプションの in_min
パラメーターを、操作を実行する前にシステムが待機する分数に設定します。以下のタスクでは、すべてのルーティングエンジンを30分以内で再起動することを要求します。
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no tasks: - name: Reboot all REs in 30 minutes juniper.device.system: action: "reboot" in_min: 30
特定の時刻に停止、再起動、またはシャットダウンをスケジュールするには、次のいずれかの方法で指定できる文字列を受け取る パラメーターを含め at
ます。
-
now
- ソフトウェアの停止、再起動、またはシャットダウンをただちに開始します。 -
+minutes
- リクエストされたアクションが開始されてからの時間 (分)。 -
yymmddhhmm
- 要求されたアクションを開始する絶対時間(年、月、日、時間、分で指定)。 -
hh:mm
- 要求されたアクションを開始する現在の日の絶対時刻(24 時間表示)。
以下のタスクでは、すべてのルーティングエンジンのシステムシャットダウンを当日の22:30にスケジュールします。
tasks: - name: Shut down all REs at 22:30 on the current day juniper.device.system: action: "shutdown" at: "22:30"
ターゲット ルーティング エンジンを指定する方法
デフォルトでは、 および juniper_junos_system
モジュールは、system
デュアル ルーティング エンジンまたはバーチャル シャーシ設定のすべてのルーティング エンジンで要求された動作を実行します。また、アプリケーションが接続されているルーティングエンジンでのみ操作を実行するようにモジュールに指示するか、アプリケーションが接続されているルーティングエンジンを除くすべてのルーティングエンジンで操作を実行するように指示することもできます。
ルーティング エンジンを指定するには、 および other_re
パラメーターを使用しますall_re
。表 3 は、all_re
特定のルーティング エンジンで要求された操作を実行するために必要な と other_re
の値をまとめたものです。
影響を受けるルーティング エンジン |
|
|
---|---|---|
すべてのルーティングエンジン(デフォルト) |
省略または に設定 |
– |
接続されたルーティングエンジンのみ |
に設定: |
– |
アプリケーションが接続されているルーティングエンジンを除くすべてのルーティングエンジン |
– |
に設定: |
デュアルルーティングエンジンまたはバーチャルシャーシ設定のすべてのルーティングエンジンで操作を実行する必要があることを明示的に示すには、デフォルトの 引数を含め all_re: True
ます。
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no tasks: - name: Reboot all Routing Engines juniper.device.system: action: "reboot" all_re: True
アプリケーションが接続されているルーティング エンジンでのみ要求されたアクションを実行するには、 引数を含め all_re: False
ます。
tasks: - name: Reboot only the connected Routing Engine juniper.device.system: action: "reboot" all_re: False
アプリケーションが接続されているルーティングエンジンを除くシステム内のすべてのルーティングエンジンで要求されたアクションを実行するには、 引数を含め other_re: True
ます。
tasks: - name: Shut down all other Routing Engines juniper.device.system: action: "shutdown" other_re: True
VM ホストを再起動する方法
VMホストに対応したルーティングエンジンを搭載したデバイスでは、Junos OSはLinuxベースのホスト(VMホスト)上で仮想マシン(VM)として動作します。system
および juniper_junos_system
モジュールは、vmhost
VMホストを再起動できる引数をサポートしています。引数 と vmhost: True
引数を含めるaction: "reboot"
と、システムは、 運用モードコマンドに対応するrequest vmhost reboot
RPCを実行して<request-vmhost-reboot>
、すべてのルーティングエンジンでホストOSと互換性のあるJunos OSを再起動します。
次のプレイブックでは、VMホストの再起動を実行し、ホストOSとゲストJunos OSの両方を再起動します。
--- - name: Reboot VM Hosts hosts: vm_hosts connection: local gather_facts: no tasks: - name: Reboot VM host juniper.device.system: action: "reboot" vmhost: True all_re: False
例:Ansible を使用した Junos デバイスの再起動
コレクション内のjuniper.device
モジュールによってsystem
、Junos デバイスを停止、再起動、またはシャットダウンできます。この例では、system
モジュールを使用してJunosデバイスを再起動します。
必要条件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
-
コレクションがインストールされた Ansible 2.10 以降
juniper.device
を実行している構成管理サーバー -
NETCONFが有効で、適切な権限で設定されたユーザーアカウントを備えたJunosデバイス
-
Ansible制御ノードとJunosデバイスで適切なユーザーに対して構成されたSSH公開/秘密鍵のペア
-
必要なホストが定義されている既存のAnsibleインベントリ ファイル
概要
この例では、モジュールを使用して system
Junosデバイスを再起動するAnsibleプレイブックを示します。モジュールの action
引数の値は、ホストで実行する操作を定義します。
プレイブックからモジュールを呼び出す場合は、対話型プロンプトを使用して、ユーザーが指定されたデバイスを再起動する予定であることを確認することをお勧めします。ユーザーが意図せずにプレイブックを実行し、チェックがない場合、影響を受けるデバイスを必要とするネットワークに悪影響を与える可能性があります。予防措置として、このプレイブックでは対話型プロンプトを使用して、ユーザーがデバイスを再起動する予定であることを確認し、モジュールを実行するためにコマンド ラインで 'yes' を手動で入力する必要があります。 Confirmation check
タスクが失敗した場合、Ansible制御ノードはそのデバイスのプレイ中の他のタスクをスキップします。
このプレイブックには、 Checking NETCONF connectivity
モジュールを利用して wait_for
、デフォルトのNETCONFポート830を使用してJunosデバイスとのNETCONFセッションの確立を試みるタスクが含まれています。コントロールノードがプレイブックの実行中にデバイスとのNETCONFセッションの確立に失敗した場合、そのデバイスのプレイ中の残りのタスクはスキップされます。
デバイスを再起動するタスクは、 system
確認とNETCONFチェックが成功した場合にモジュールを実行します。引数は action
、ソフトウェアを再起動する必要があることを示す値 "reboot"
に設定されます。引数は in_min: 2
、再起動コマンドを実行する前に、指定された分数待機するようにモジュールに指示します。これにより、すべてのユーザーがシステムからログアウトする時間が提供されます。
タスクはモジュールの結果を変数に result
格納し、2 つのハンドラーに通知します。ハンドラーは pause_for_reboot
、再起動操作が開始され wait_reboot
た後、再起動が行われる前にデバイスがオンラインであることをハンドラーが誤って検出しないように、指定された時間待機します。ハンドラーは wait_reboot
、デバイスとのセッションを確立して、再起動後にデバイスがオンラインに戻ることを確認します。この変数は wait_time_after_reboot
、制御ノードがデバイスとの再接続を試みる時間の長さを定義します。
構成
Ansibleプレイブックの作成と実行
手順
モジュールを使用して system
Junosデバイスを再起動するプレイブックを作成するには、次の手順に従います。
プレイブックの定型文と、モジュールをローカルで実行するこのプレイを含めます。
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no
必要な変数を定義またはインポートします。
vars: wait_time_after_reboot: 300 netconf_port: 830
対話型プロンプトを作成して、ユーザーが最初に影響を理解せずに誤ってモジュールを実行しないようにします。
vars_prompt: - name: "reboot_confirmation" prompt: "This playbook reboots devices. Enter 'yes' to continue" private: no
ユーザーのインテントを確認するタスクを作成します。
tasks: - name: Confirmation check fail: msg="Playbook run confirmation failed" when: reboot_confirmation != "yes"
(オプション)NETCONF の接続性を検証するタスクを作成します。
- name: Checking NETCONF connectivity wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: 5
指定した分数後にデバイスを再起動し、ハンドラーに通知するタスクを作成します。
- name: Reboot all Routing Engines on the Junos device juniper.device.system: action: "reboot" in_min: 2 all_re: True register: result notify: - pause_for_reboot - wait_reboot
(オプション)応答を印刷するタスクを作成します。
- name: Print response debug: var: result
再起動後に一時停止するハンドラーと、再起動後にデバイスがオンラインに戻ることを確認するハンドラーを作成します。
ハンドラー名は、再起動タスクで参照されるものと同じである必要があります。
handlers: - name: pause_for_reboot pause: seconds: 180 when: result.reboot - name: wait_reboot wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: "{{ wait_time_after_reboot }}" when: result.reboot
業績
Ansibleコントロールノードで、完成したプレイブックを確認します。プレイブックに目的のコードが表示されない場合は、この例の手順を繰り返してプレイブックを修正します。
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no vars: wait_time_after_reboot: 300 netconf_port: 830 vars_prompt: - name: "reboot_confirmation" prompt: "This playbook reboots devices. Enter 'yes' to continue" private: no tasks: - name: Confirmation check fail: msg="Playbook run confirmation failed" when: reboot_confirmation != "yes" - name: Checking NETCONF connectivity wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: 5 - name: Reboot all Routing Engines on the Junos device juniper.device.system: action: "reboot" in_min: 2 all_re: True register: result notify: - pause_for_reboot - wait_reboot - name: Print response debug: var: result handlers: - name: pause_for_reboot pause: seconds: 180 when: result.reboot - name: wait_reboot wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: "{{ wait_time_after_reboot }}" when: result.reboot
プレイブックの実行
プロシージャ
手順
プレイブックを実行するには:
-
ansible-playbook
制御ノードでコマンドを発行し、プレイブックのパスと必要なオプションを指定します。user@ansible-cn:~/ansible$ ansible-playbook ansible-pb-junos-reboot.yaml This playbook reboots devices. Enter 'yes' to continue: yes PLAY [Reboot Junos devices] ************************************************** TASK [Confirmation check] **************************************************** skipping: [dc1a.example.net] TASK [Checking NETCONF connectivity] ***************************************** ok: [dc1a.example.net] TASK [Reboot all Routing Engines on the Junos device] ************* changed: [dc1a.example.net] TASK [Print response] ******************************************************** ok: [dc1a.example.net] => { "result": { "action": "reboot", "all_re": true, "changed": true, "failed": false, "media": false, "msg": "reboot successfully initiated. Response got Shutdown at Fri Dec 11 17:36:50 2020. [pid 11595]", "other_re": false, "reboot": true, "vmhost": false } } RUNNING HANDLER [pause_for_reboot] ******************************************* Pausing for 180 seconds (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) ok: [dc1a.example.net] RUNNING HANDLER [wait_reboot] ************************************************ ok: [dc1a.example.net] PLAY RECAP ******************************************************************* dc1a.example.net : ok=5 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
検証
変更履歴テーブル
機能のサポートは、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がプラットフォームでサポートされているかどうかを判断します。
Juniper.junos
、
juniper_junos_system
モジュールは および
junos_zeroize
モジュールの機能を
junos_shutdown
置き換えます。