サービスの改善にご協力お願いします。

お客様のご意見をお聞かせください。

アンケートの所要時間はおよそ 2 分です。

close
keyboard_arrow_left
Junos OS向けAnsible開発者ガイド
Table of Contents Expand all
list Table of Contents

この機械翻訳はお役に立ちましたでしょうか?

starstarstarstarstar
Go to English page
免責事項:

このページは、サードパーティー製機械翻訳ソフトウェアを使用して翻訳されます。質の高い翻訳を提供するために合理的な対応はされていますが、ジュニパーネットワークスがその正確性を保証することはできかねます。この翻訳に含まれる情報の正確性について疑問が生じた場合は、英語版を参照してください. ダウンロード可能なPDF (英語版のみ).

Ansibleを使用して、Junosデバイスを停止、再起動、またはシャットダウンします

date_range 14-Nov-24

概要 ジュニパーネットワークスのAnsibleモジュールを使用して、Junosデバイスの停止、再起動、またはシャットダウンを行います。

Ansibleを使用して、デバイスを停止、再起動、またはシャットダウンします

ジュニパーネットワークスは、Junosデバイスの停止、再起動、またはシャットダウンに使用できるAnsibleモジュールを提供しています。 表 1 は、使用可能なモジュールの概要を示しています。

表 1:デバイスを停止、再起動、またはシャットダウンするモジュール

コンテンツ セット

モジュール名

juniper.device 徴収

system

juniper.device.system モジュールを使用して、Junos デバイスで以下の操作を実行できます。デフォルトでは、モジュールは要求された操作を直ちに実行し、デュアルルーティングエンジンまたはバーチャルシャーシセットアップのすべてのルーティングエンジンでその操作を実行します。

  • システムの即時停止、リブート、またはシャットダウン

  • オプションの遅延を伴う停止、再起動、またはシャットダウン操作

  • 特定の日時にスケジュールされた停止、再起動、またはシャットダウン操作

system モジュールには、モジュールが実行するアクションを定義する 1 つの引数 action が必要です。表 2 は、デバイスの停止、再起動、またはシャットダウンに必要な action パラメーター値を定義し、各アクションの簡単な説明と対応する CLI コマンドを提供します。"zeroize" アクションの詳細については、Ansible を使用して Junos デバイスを工場出荷時のデフォルト設定に復元するを参照してください。

表 2: アクション パラメーター値

actionパラメータの値

形容

同等の CLI コマンド

"halt"

Junos OSソフトウェアを正常にシャットダウンしますが、システム電源は維持します

request system halt

"reboot"

Junos OSソフトウェアを再起動します

request system reboot

"shutdown"

Junos OS ソフトウェアを正常にシャットダウンし、ルーティング エンジンの電源を切ります。

request system power-off

次のAnsibleプレイブックは、action: "reboot"systemモジュールを使用して、指定されたインベントリグループ内のホスト上のすべてのルーティングエンジンを直ちに再起動します。

content_copy zoom_out_map
---
- 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 分以内にすべてのルーティング エンジンを再起動することを要求します。

content_copy zoom_out_map
---
- 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にすべてのルーティングエンジンのシステムシャットダウンをスケジュールします。

content_copy zoom_out_map
  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_reother_re 値をまとめたものです。

表3:ルーティングエンジンを指定するためのパラメータ

影響を受けるルーティング エンジン

all_re パラメーター

other_re パラメーター

すべてのルーティングエンジン(デフォルト)

省略するか、に設定 true

接続されたルーティングエンジンのみ

を に設定 false

アプリケーションが接続されているルーティングエンジンを除くすべてのルーティングエンジン

を に設定 true

デュアルルーティングエンジンまたはデュアルバーチャルシャーシ設定のすべてのルーティングエンジンで動作を実行する必要があることを明示的に示すには、デフォルトの all_re: true 引数を含めます。

content_copy zoom_out_map
---
- 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 引数を含めます。

content_copy zoom_out_map
  tasks: 
    - name: Reboot only the connected Routing Engine 
      juniper.device.system:
        action: "reboot"
        all_re: false

アプリケーションが接続されているルーティングエンジンを除く、システム内のすべてのルーティング エンジンで要求されたアクションを実行するには、 other_re: true 引数を含めます。

content_copy zoom_out_map
  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 の両方を再起動します。

content_copy zoom_out_map
---
- 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 デバイスを再起動するプレイブックを作成するには、次の手順に従います。

  1. Playbook の定型文と、モジュールをローカルで実行するこのプレイを含めます。

    content_copy zoom_out_map
    ---
    - name: Reboot Junos devices
      hosts: dc1
      connection: local
      gather_facts: no
    
  2. 必要な変数を定義またはインポートします。

    content_copy zoom_out_map
      vars:
        wait_time_after_reboot: 300
        netconf_port: 830
  3. 対話型プロンプトを作成して、ユーザーが最初に意味を理解せずにモジュールを誤って実行しないようにします。

    content_copy zoom_out_map
      vars_prompt:
      - name: "reboot_confirmation"
        prompt: "This playbook reboots devices. Enter 'yes' to continue"
        private: no
    
  4. ユーザーのインテントを確認するタスクを作成します。

    content_copy zoom_out_map
      tasks:
        - name: Confirmation check
          fail: msg="Playbook run confirmation failed"
          when: reboot_confirmation != "yes"
    
  5. (オプション)NETCONFの接続を確認するタスクを作成します。

    content_copy zoom_out_map
        - name: Check NETCONF connectivity
          ansible.builtin.wait_for: 
            host: "{{ inventory_hostname }}" 
            port: "{{ netconf_port }}"
            timeout: 5
    
  6. 指定した分数が経過したらデバイスを再起動し、ハンドラーに通知するタスクを作成します。

    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
    
  7. (オプション)応答を印刷するタスクを作成します。

    content_copy zoom_out_map
        - name: Print response
          ansible.builtin.debug:
            var: result
    
  8. 再起動後に一時停止するハンドラーと、再起動後にデバイスがオンラインに戻ることを確認するハンドラーを作成します。

    ハンドラー名は、再起動タスクで参照されているものと同じである必要があります。

    content_copy zoom_out_map
      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制御ノードで、完了したプレイブックを確認します。プレイブックに目的のコードが表示されない場合は、この例の手順を繰り返してプレイブックを修正します。

content_copy zoom_out_map
---
- 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_map
    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   

検証

再起動の確認

目的

Junos デバイスが正常に再起動されたことを確認します。

アクション

プレイブックを実行するときに、各デバイスの wait_reboot タスクの出力を確認します。

content_copy zoom_out_map
RUNNING HANDLER [wait_reboot] *************************************************
ok: [dc1a.example.net]
意味

wait_reboot結果は、再起動後に制御ノードがデバイスとのセッションを正常に確立したかどうかを示します。結果が成功を示している場合、デバイスはオンラインです。

変更履歴

サポートされる機能は、使用しているプラットフォームとリリースによって決まります。特定の機能がお使いのプラットフォームでサポートされているかどうかを確認するには、 Feature Explorer を使用します。

解放
形容
1.0.3
juniper.device コレクション リリース 1.0.3 以降、 system モジュールでは VM ホストのシャットダウンがサポートされています。
external-footer-nav