juniper.device.system Ansibleモジュールを使用して、Junosデバイスの停止、再起動、シャットダウンを行うことができます
juniper.device.system Ansible モジュールを使用して、Junos OSを実行しているデバイスまたはJunos OS Evolvedを実行しているデバイスの停止、再起動、またはシャットダウンします。
Ansibleを使用したデバイスの停止、再起動、またはシャットダウン
ジュニパーネットワークスは、Junos OSを実行しているデバイスまたはJunos OS Evolvedを実行しているデバイスの停止、再起動、またはシャットダウンに使用できるAnsibleモジュールを提供しています。 表1は 、利用可能なモジュールの概要を示しています。
|
コレクション |
モジュールセット |
モジュール名 |
|---|---|---|
|
|
juniper.device.system モジュールを使用して、Junosデバイス上で以下の操作をリクエストできます。デフォルトでは、モジュールは要求された操作を直ちに実行し、デュアルルーティングエンジンまたはバーチャルシャーシ設定のすべてのルーティングエンジンでルーティングエンジンで操作を実行します。
-
システムの即時停止、再起動、またはシャットダウン
-
停止、再起動、またはシャットダウン操作(オプションの遅延あり)
-
特定の日時にスケジュールされた停止、再起動、またはシャットダウン操作
systemモジュールには、実行するアクションを定義する引数 action が 1 つ必要です。表2は、actionパラメーター値を定義し、各アクションと対応するCLIコマンドについて簡単に説明しています。"zeroize"アクションの詳細については、「juniper.device.system Ansibleモジュールを使用してJunosデバイスを工場出荷時のデフォルト状態に復元する」を参照してください。
|
|
説明 |
同等の CLI コマンド |
|---|---|---|
|
|
Junos OSソフトウェアまたはJunos OS Evolvedソフトウェアを正常にシャットダウンしますが、システムの電源は維持します |
|
|
|
Junos OSソフトウェアまたはJunos OS Evolvedソフトウェアを再起動します |
|
|
|
Junos OSソフトウェアまたはJunos OS Evolvedソフトウェアを正常にシャットダウンし、ルーティングエンジンの電源を切ります |
|
以下のAnsibleプレイブックでは、 juniper.device.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.device.system モジュールは、デュアルルーティングエンジンまたはバーチャルシャーシセットアップのすべてのルーティングエンジンで要求された操作を実行します。また、アプリケーションが接続されているルーティングエンジンでのみ操作を実行するように、またはアプリケーションが接続されているルーティングエンジンを除くすべてのルーティングエンジンで操作を実行するようにモジュールに指示することもできます。
ルーティングエンジンを指定するには、 all_re と other_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)として実行されます。 juniper.device.system モジュールは vmhost 引数をサポートしており、これにより VM ホストを再起動またはシャットダウンできます。
action: reboot引数とvmhost: true引数を含めると、システムは、request vmhost reboot動作モードコマンドに対応する<request-vmhost-reboot> RPCを実行することにより、すべてのルーティングエンジン上のホストOSと互換Junos OS再起動します。
同様に、action: shutdown引数とvmhost: true引数を含めると、システムはrequest vmhost power-off動作モードコマンドに対応する<request-vmhost-poweroff> RPCを実行することにより、すべてのルーティングエンジン上のホスト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デバイスを再起動します。
要件
この例では、以下のハードウェアおよびソフトウェアコンポーネントを使用しています。
-
juniper.deviceコレクションがインストールされたAnsible 2.17以降を実行している構成管理サーバー -
NETCONFを有効にし、適切な権限でユーザーアカウントが設定されたJunosデバイス
-
AnsibleコントロールノードとJunosデバイス上の適切なユーザーに設定されたSSHパブリックキー/プライベートキーペア
-
必要なホストが定義された既存のAnsibleインベントリファイル
概要
この例では、 juniper.device.system モジュールを使用して Junos デバイスを再起動する Ansible プレイブックを紹介します。モジュールの action 引数の値は、ホストで実行する操作を定義します。
プレイブックからモジュールを呼び出す場合は、対話型プロンプトを使用して、ユーザーが指定されたデバイスを再起動する意図があることを確認することをお勧めします。ユーザーが意図せずプレイブックを実行し、チェックがない場合、影響を受けるデバイスを必要とするネットワークに悪影響を与える可能性があります。予防措置として、このプレイブックでは対話型プロンプトを使用して、ユーザーがデバイスを再起動する意図があることを確認します。プロンプトでは、ユーザーがコマンドラインに「yes」と手動で入力してモジュールを実行する必要があります。 Confirmation check タスクが失敗した場合、Ansible制御ノードは、そのデバイスのプレイ内の他のタスクをスキップします。
このプレイブックには、ansible.builtin.wait_forモジュールを利用して、デフォルトのNETCONFポート830を使用してJunosデバイスとのNETCONFセッションの確立を試みるCheck NETCONF connectivityタスクが含まれています。プレイブックの実行中に制御ノードがデバイスとのNETCONFセッションを確立できない場合、そのデバイスのプレイにある残りのタスクをスキップします。
再起動タスクは、確認とNETCONFチェックが成功した場合モジュール juniper.device.system を実行します。 action 引数は rebootに設定されており、ソフトウェアを再起動する必要があることを示しています。 in_min: 2 引数は、再起動コマンドを実行する前に指定された分数待機するようにモジュールに指示します。これにより、すべてのユーザーがシステムからログアウトする時間が確保されます。
このタスクは、モジュール結果を result 変数に格納し、2 つのハンドラーに通知します。 pause_for_reboot ハンドラーは、再起動操作が開始されてから指定された時間待機し、再起動が行われる前にデバイスがオンラインであることを wait_reboot ハンドラーが誤って検出しないようにします。その後、 wait_reboot ハンドラーはデバイスとのセッションの確立を試み、再起動後にデバイスがオンラインに戻ることを確認します。 wait_time_after_reboot 変数は、制御ノードがデバイスとの再接続を試みる時間の長さを定義します。
設定
Ansibleプレイブックの作成と実行
ステップバイステップの手順
juniper.device.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: Check NETCONF connectivity ansible.builtin.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 ansible.builtin.debug: var: result -
再起動後に一時停止するハンドラーと、再起動後にデバイスがオンラインに戻ることを確認するハンドラーを作成します。
ハンドラ名は、再起動タスクで参照されるものと同じである必要があります。
handlers: - name: pause_for_reboot pause: seconds: 180 when: result.reboot - name: wait_reboot ansible.builtin.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: Check NETCONF connectivity
ansible.builtin.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
ansible.builtin.debug:
var: result
handlers:
- name: pause_for_reboot
pause:
seconds: 180
when: result.reboot
- name: wait_reboot
ansible.builtin.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 [Check 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.deviceコレクションリリース1.0.3以降、systemモジュールはVMホストのシャットダウンをサポートします。