- play_arrow 免責事項
- play_arrow Ansibleの概要
- play_arrow Junos OS用のAnsibleをインストールする
- play_arrow Ansibleを使用してJunosデバイスに接続する
- play_arrow Ansible を使用した設定の管理
- play_arrow Junos OS向けAnsibleのトラブルシューティング
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.10 以降を実行し、
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 の定型文と、モジュールをローカルで実行するこのプレイを含めます。
content_copy zoom_out_map--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no
必要な変数を定義またはインポートします。
content_copy zoom_out_mapvars: wait_time_after_reboot: 300 netconf_port: 830
対話型プロンプトを作成して、ユーザーが最初に意味を理解せずにモジュールを誤って実行しないようにします。
content_copy zoom_out_mapvars_prompt: - name: "reboot_confirmation" prompt: "This playbook reboots devices. Enter 'yes' to continue" private: no
ユーザーのインテントを確認するタスクを作成します。
content_copy zoom_out_maptasks: - name: Confirmation check fail: msg="Playbook run confirmation failed" when: reboot_confirmation != "yes"
(オプション)NETCONFの接続を確認するタスクを作成します。
content_copy zoom_out_map- name: Check NETCONF connectivity ansible.builtin.wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: 5
指定した分数が経過したらデバイスを再起動し、ハンドラーに通知するタスクを作成します。
content_copy zoom_out_map- 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
(オプション)応答を印刷するタスクを作成します。
content_copy zoom_out_map- name: Print response ansible.builtin.debug: var: result
再起動後に一時停止するハンドラーと、再起動後にデバイスがオンラインに戻ることを確認するハンドラーを作成します。
ハンドラー名は、再起動タスクで参照されているものと同じである必要があります。
content_copy zoom_out_maphandlers: - 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
コマンドを発行し、プレイブックのパスと必要なオプションを指定します。content_copy zoom_out_mapuser@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
検証
再起動の確認
目的
Junos デバイスが正常に再起動されたことを確認します。
アクション
プレイブックを実行するときに、各デバイスの wait_reboot
タスクの出力を確認します。
RUNNING HANDLER [wait_reboot] ************************************************* ok: [dc1a.example.net]
意味
wait_reboot
結果は、再起動後に制御ノードがデバイスとのセッションを正常に確立したかどうかを示します。結果が成功を示している場合、デバイスはオンラインです。
変更履歴
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。特定の機能がお使いのプラットフォームでサポートされているかどうかを確認するには、 Feature Explorer を使用します。
juniper.device
コレクション リリース 1.0.3 以降、
system
モジュールでは VM ホストのシャットダウンがサポートされています。