Verwenden von Ansible zum Anhalten, Neustarten oder Herunterfahren von Junos-Geräten
Verwenden Sie die Ansible-Module von Juniper Networks, um Junos-Geräte anzuhalten, neu zu starten oder herunterzufahren.
Ansible zum Anhalten, Neustarten oder Herunterfahren von Geräten verwenden
Juniper Networks stellt ein Ansible-Modul bereit, mit dem Sie ein Junos-Gerät anhalten, neu starten oder herunterfahren können. Tabelle 1 gibt einen Überblick über das verfügbare Modul.
Inhaltsgruppe |
Modulname |
---|---|
|
Sie können das juniper.device.system
Modul verwenden, um die folgenden Vorgänge auf Junos-Geräten anzufordern. Standardmäßig führt das Modul den angeforderten Vorgang sofort aus und führt den Vorgang auf allen Routing-Engines in einem Dual-Routing-Engine- oder Virtual Chassis-Setup aus.
-
Ein sofortiger Stopp, Neustart oder Herunterfahren des Systems
-
Ein Anhalten-, Neustart- oder Herunterfahrvorgang mit optionaler Verzögerung
-
Ein Anhalten, Neustarten oder Herunterfahren, der zu einem bestimmten Datum und einer bestimmten Uhrzeit geplant ist
Für das system
Modul ist ein Argument erforderlich, das die Aktion definiert, action
die das Modul ausführt. Tabelle 2 definiert den Parameterwert, der action
zum Anhalten, Neustarten oder Herunterfahren eines Geräts erforderlich ist, und enthält eine kurze Beschreibung jeder Aktion sowie den entsprechenden CLI-Befehl. Weitere Informationen zu dieser "zeroize"
Aktion finden Sie unter Verwenden von Ansible zum Wiederherstellen der werkseitigen Konfigurationseinstellungen für ein Junos-Gerät.
Wert des |
Beschreibung |
Entsprechender CLI-Befehl |
---|---|---|
|
Fahren Sie die Junos OS-Software ordnungsgemäß herunter, aber behalten Sie die Systemleistung bei |
|
|
Starten Sie die Junos OS-Software neu. |
|
|
Fahren Sie die Junos OS-Software ordnungsgemäß herunter und schalten Sie die Routing-Engines aus |
|
Im folgenden Ansible-Playbook wird das system
Modul mit action: "reboot"
verwendet, um alle Routing-Engines auf den Hosts in der angegebenen Bestandslistengruppe sofort neu zu starten.
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no tasks: - name: Reboot all REs on the device juniper.device.system: action: "reboot"
Ausführen eines Anhaltens, Neustarts oder Herunterfahrens mit Verzögerung oder zu einem bestimmten Zeitpunkt
Sie können den Vorgang zum Anhalten, Neustarten oder Herunterfahren um eine bestimmte Anzahl von Minuten verzögern. Um eine Verzögerung hinzuzufügen, legen Sie den optionalen in_min
Parameter auf die Anzahl der Minuten fest, die das System warten soll, bevor der Vorgang ausgeführt wird. Die folgende Aufgabe fordert einen Neustart aller Routingmodule in 30 Minuten an:
--- - 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
Sie können den Vorgang zum Anhalten, Neustarten oder Herunterfahren auch zu einem bestimmten Zeitpunkt planen. Um eine Uhrzeit zu planen, schließen Sie den Parameter ein, der at
eine Zeichenfolge annimmt, die auf eine der folgenden Arten angegeben werden kann:
-
now
– Sofortiges Anhalten, Neustarten oder Herunterfahren der Software. -
+minutes
– Anzahl der Minuten ab dem Zeitpunkt, an dem die angeforderte Aktion eingeleitet wird. -
yymmddhhmm
– Absolute Zeit, zu der die angeforderte Aktion ausgelöst werden soll, angegeben als Jahr, Monat, Tag, Stunde und Minute. -
hh:mm
: Absolute Zeit am aktuellen Tag, an dem die angeforderte Aktion eingeleitet werden soll, angegeben in 24-Stunden-Zeit.
Der folgende Task plant das Herunterfahren des Systems aller Routing-Engines um 22:30 Uhr am aktuellen Tag:
tasks: - name: Shut down all REs at 22:30 on the current day juniper.device.system: action: "shutdown" at: "22:30"
Angeben der Ziel-Routing-Engine
Standardmäßig führt das system
Modul den angeforderten Vorgang auf allen Routing-Engines in einem Dual-Routing-Engine- oder Virtual Chassis-Setup aus. Sie können das Modul auch anweisen, den Vorgang nur auf der Routing-Engine auszuführen, mit der die Anwendung verbunden ist, oder den Vorgang auf allen Routing-Engines auszuführen, mit Ausnahme derjenigen, mit der die Anwendung verbunden ist.
Um die Routing-Engines anzugeben, verwenden Sie die all_re
Parameter undother_re
. Tabelle 3 fasst die und-Werte other_re
zusammen, die all_re
zum Ausführen des angeforderten Vorgangs auf bestimmten Routing-Engines erforderlich sind.
Betroffene Routing-Engines |
|
|
---|---|---|
Alle Routing-Engines (Standard) |
Weglassen oder auf |
– |
Nur die verbundene Routing-Engine |
Legen Sie diese Einstellung fest auf |
– |
Alle Routing-Engines mit Ausnahme der Routing-Engine, mit der die Anwendung verbunden ist |
– |
Legen Sie diese Einstellung fest auf |
Wenn Sie explizit angeben möchten, dass der Vorgang auf allen Routing-Engines in einem Dual-Routing-Engine- oder Virtual Chassis-Setup ausgeführt werden soll, fügen Sie das all_re: true
Argument ein, das die Standardeinstellung ist.
--- - 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
Wenn Sie die angeforderte Aktion nur für die Routing-Engine ausführen möchten, mit der die Anwendung verbunden ist, schließen Sie das all_re: false
Argument ein.
tasks: - name: Reboot only the connected Routing Engine juniper.device.system: action: "reboot" all_re: false
Um die angeforderte Aktion für alle Routing-Engines im System mit Ausnahme der Routing-Engine auszuführen, mit der die Anwendung verbunden ist, fügen Sie das other_re: true
Argument ein.
tasks: - name: Shut down all other Routing Engines juniper.device.system: action: "shutdown" other_re: true
Neustart oder Herunterfahren eines VM-Hosts
Auf Geräten, die über Routing-Engines mit VM-Host-Unterstützung verfügen, läuft Junos OS als virtuelle Maschine (VM) über einen Linux-basierten Host (VM-Host). Das system
Modul unterstützt das Argument, mit dem vmhost
Sie einen VM-Host neu starten oder herunterfahren können.
Wenn Sie die action: "reboot"
vmhost: true
Argumente und einschließen, startet das System das Hostbetriebssystem und das kompatible Junos OS auf allen Routing-Engines neu, indem es den <request-vmhost-reboot>
RPC-Befehl ausführt, der dem Befehl für den request vmhost reboot
Betriebsmodus entspricht.
Wenn Sie die action: "shutdown"
vmhost: true
Argumente und einschließen, fährt das System das Hostbetriebssystem und das kompatible Junos OS auf allen Routing-Engines herunter, indem es den <request-vmhost-poweroff>
RPC ausführt, der dem request vmhost power-off
Befehl "Betriebsmodus" entspricht.
Das folgende Playbook führt einen Neustart des VM-Hosts durch, bei dem sowohl das Hostbetriebssystem als auch das Junos OS des Gasts neu gestartet werden.
--- - 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
Beispiel: Verwenden von Ansible zum Neustarten von Junos-Geräten
Mit dem juniper.device.system
Modul können Sie ein Junos-Gerät anhalten, neu starten oder herunterfahren. In diesem Beispiel wird das system
Modul verwendet, um ein Junos-Gerät neu zu starten.
Anforderungen
In diesem Beispiel werden die folgenden Hardware- und Softwarekomponenten verwendet:
-
Configuration Management Server mit Ansible 2.17 oder höher und auf dem die
juniper.device
Sammlung installiert ist -
Junos-Gerät mit aktiviertem NETCONF und einem Benutzerkonto mit entsprechenden Berechtigungen
-
Öffentliches/privates SSH-Schlüsselpaar, das für den entsprechenden Benutzer auf dem Ansible-Kontrollknoten und dem Junos-Gerät konfiguriert ist
-
Vorhandene Ansible-Bestandsdatei mit definierten erforderlichen Hosts
Überblick
Dieses Beispiel zeigt ein Ansible-Playbook, das das juniper.device.system
Modul verwendet, um ein Junos-Gerät neu zu starten. Der Wert des Modularguments action
definiert den Vorgang, der auf dem Host ausgeführt werden soll.
Wenn Sie das Modul über ein Playbook aufrufen, wird empfohlen, eine interaktive Eingabeaufforderung zu verwenden, um zu bestätigen, dass der Benutzer beabsichtigt, die angegebenen Geräte neu zu starten. Wenn ein Benutzer das Playbook versehentlich ausführt und keine Überprüfung erfolgt, kann sich dies negativ auf alle Netzwerke auswirken, die die betroffenen Geräte benötigen. Als Vorsichtsmaßnahme verwendet dieses Playbook eine interaktive Eingabeaufforderung, um zu überprüfen, ob der Benutzer beabsichtigt, die Geräte neu zu starten, und erfordert, dass der Benutzer manuell "yes" in die Befehlszeile eingibt, um das Modul auszuführen. Wenn die Confirmation check
Aufgabe fehlschlägt, überspringt der Ansible-Steuerungsknoten die anderen Aufgaben in der Wiedergabe für dieses Gerät.
Dieses Playbook enthält die Check NETCONF connectivity
Aufgabe, die das ansible.builtin.wait_for
Modul nutzt, um zu versuchen, eine NETCONF-Sitzung mit dem Junos-Gerät über den Standard-NETCONF-Port 830 einzurichten. Wenn der Steuerungsknoten während der Ausführung des Playbooks keine NETCONF-Sitzung mit dem Gerät einrichten kann, überspringt er die verbleibenden Aufgaben in der Wiedergabe für dieses Gerät.
Die Aufgabe, die das Gerät neu startet, führt das system
Modul aus, vorausgesetzt, die Bestätigung und die NETCONF-Prüfungen waren erfolgreich. Das action
Argument wird auf den Wert "reboot"
gesetzt, der angibt, dass die Software neu gestartet werden soll. Das in_min: 2
Argument weist das Modul an, die angegebene Anzahl von Minuten abzuwarten, bevor der Neustartbefehl ausgeführt wird. Dies gibt allen Benutzern Zeit, sich vom System abzumelden.
Die Aufgabe speichert das Modulergebnis in der result
Variablen und benachrichtigt zwei Handler. Der pause_for_reboot
Handler wartet eine bestimmte Zeitspanne, nachdem der Neustartvorgang initiiert wurde, um zu verhindern, dass der wait_reboot
Handler fälschlicherweise erkennt, dass das Gerät online ist, bevor der Neustart stattfindet. Der wait_reboot
Handler versucht dann, eine Sitzung mit dem Gerät einzurichten, um zu überprüfen, ob das Gerät nach dem Neustart wieder online ist. Die wait_time_after_reboot
Variable definiert die Zeitspanne, in der der Steuerungsknoten versucht, sich erneut mit dem Gerät zu verbinden.
Konfiguration
Erstellen und Ausführen des Ansible-Playbooks
Schritt-für-Schritt-Anleitung
So erstellen Sie ein Playbook, das das system
Modul zum Neustart eines Junos-Geräts verwendet:
Fügen Sie die Textbausteine für das Playbook und dieses Stück hinzu, das die Module lokal ausführt.
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no
Definieren oder importieren Sie alle erforderlichen Variablen.
vars: wait_time_after_reboot: 300 netconf_port: 830
Erstellen Sie eine interaktive Eingabeaufforderung, um zu verhindern, dass Benutzer das Modul versehentlich ausführen, ohne vorher die Auswirkungen zu verstehen.
vars_prompt: - name: "reboot_confirmation" prompt: "This playbook reboots devices. Enter 'yes' to continue" private: no
Erstellen Sie die Aufgabe, die die Absicht des Benutzers bestätigt.
tasks: - name: Confirmation check fail: msg="Playbook run confirmation failed" when: reboot_confirmation != "yes"
(Optional) Erstellen Sie eine Aufgabe, um die NETCONF-Konnektivität zu überprüfen.
- name: Check NETCONF connectivity ansible.builtin.wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: 5
Erstellen Sie die Aufgabe, das Gerät nach einer bestimmten Anzahl von Minuten neu zu starten, und benachrichtigen Sie dann die Handler.
- 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
(Optional) Erstellen Sie eine Aufgabe, um die Antwort zu drucken.
- name: Print response ansible.builtin.debug: var: result
Erstellen Sie den Handler, der nach dem Neustart angehalten wird, und den Handler, der überprüft, ob das Gerät nach dem Neustart wieder online geschaltet wird.
Die Handlernamen sollten mit denen identisch sein, auf die im Neustarttask verwiesen wird.
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
Befund
Überprüfen Sie auf dem Ansible-Steuerungsknoten das fertige Playbook. Wenn das Playbook den beabsichtigten Code nicht anzeigt, wiederholen Sie die Anweisungen in diesem Beispiel, um das Playbook zu korrigieren.
--- - 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
Ausführen des Playbooks
Verfahren
Schritt-für-Schritt-Anleitung
So führen Sie das Playbook aus:
-
Geben Sie den
ansible-playbook
Befehl auf dem Steuerungsknoten ein, und geben Sie den Playbookpfad und alle gewünschten Optionen an.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
Verifizierung
Überprüfen Sie den Neustart.
Zweck
Vergewissern Sie sich, dass das Junos-Gerät erfolgreich neu gestartet wurde.
Aktion
Überprüfen Sie beim Ausführen des Playbooks die Ausgabe der wait_reboot
Aufgabe für jedes Gerät.
RUNNING HANDLER [wait_reboot] ************************************************* ok: [dc1a.example.net]
Bedeutung
Das wait_reboot
Ergebnis gibt an, ob der Steuerungsknoten nach dem Neustart erfolgreich eine Sitzung mit dem Gerät hergestellt hat. Wenn das Ergebnis auf Erfolg hinweist, ist das Gerät online.
Tabellarischer Änderungsverlauf
Die Unterstützung der Funktion hängt von der Plattform und der Version ab, die Sie benutzen. Verwenden Sie Funktionen entdecken , um festzustellen, ob eine Funktion auf Ihrer Plattform unterstützt wird.
juniper.device
Sammlungsversion 1.0.3 unterstützt das
system
Modul das Herunterfahren eines VM-Hosts.