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