juniper.junos

Juniper Ansible Sammlung für Junos

Über

Juniper Networks unterstützt Ansible zur Verwaltung von Geräten, die das Junos-Betriebssystem (Junos OS und Junos Evolved) verwenden. Diese Sammlung wird auf der Ansible Galaxy-Website unter der Sammlung juniper.device gehostet.

Die Sammlung juniper.device enthält eine Reihe von Ansible-Modulen, die spezifische Betriebs- und Konfigurationsaufgaben auf Geräten mit Junos OS durchführen. Zu diesen Aufgaben gehören: Installation und Upgrade von Junos OS, Bereitstellung neuer Junos-Geräte im Netzwerk, Laden von Konfigurationsänderungen, Abrufen von Informationen sowie Zurücksetzen, Neustarten oder Herunterfahren verwalteter Geräte. Bitte beachten Sie den Abschnitt INSTALLATION für Anweisungen zur Installation dieser Sammlung.

Zwei Sätze von Ansible-Modulen für Junos-Geräte

Seit Ansible Version >= 2.1 enthält Ansible auch nativ Kernmodule für Junos. Die in den Ansible-Kern integrierten Junos-Module haben Namen, die mit dem Prefix junos_ beginnen. Die in dieser Sammlung juniper.device enthaltenen Junos-Module haben Namen, die mit den Modultypen beginnen. Diese beiden Sätze von Junos-Modulen können auf demselben Ansible-Kontrollrechner coexistieren, und ein Ansible-Playbook kann ein Modul aus beiden (oder beiden) Sätzen aufrufen. Juniper Networks empfiehlt, beim Schreiben neuer Playbooks, die Junos-Geräte verwalten, die Module aus der Sammlung juniper.device zu verwenden.

Übersicht der Module

Diese Sammlung juniper.device enthält die folgenden Module:

  • command — Führen Sie ein oder mehrere CLI-Befehle auf einem Junos-Gerät aus.
  • config — Bearbeiten Sie die Konfiguration eines Junos-Geräts.
  • facts — Abrufen von Fakten von einem Junos-Gerät.
  • file_copy - Kopieren Sie Dateien von und zu einem Junos-Gerät.
  • jsnapy — Führen Sie JSNAPy-Tests auf einem Junos-Gerät aus.
  • ping — Führen Sie einen Ping von einem Junos-Gerät aus.
  • pmtud — Führen Sie eine MTU-Pfadentdeckung von einem Junos-Gerät zu einem Ziel durch.
  • rpc — Führen Sie einen oder mehrere NETCONF-RPCs auf einem Junos-Gerät aus.
  • software — Installieren Sie Software auf einem Junos-Gerät.
  • srx_cluster — Fügen Sie Konfigurationen für SRX-Chassis-Cluster hinzu oder entfernen Sie diese.
  • system — Initiieren Sie Betriebsaktionen auf dem Junos-System.
  • table — Abrufen von Daten von einem Junos-Gerät mit einer PyEZ-Tabelle/Ansicht.

PyEZ-Version Anforderungen

Für die Ansible-Sammlung juniper.device muss junos-eznc in Version 2.6.0 oder höher installiert werden.

Übersicht der Plugins

Zusätzlich zu den oben aufgeführten Modulen ist das Callback-Plugin jsnapy für das Modul jsnapy verfügbar.

Das Callback-Plugin jsnapy hilft dabei, zusätzliche Informationen über fehlgeschlagene JSNAPy-Tests auf dem Bildschirm anzuzeigen. Für jeden fehlgeschlagenen Test wird ein Protokoll nach der Zusammenfassung des Playbooks ausgegeben, wie in diesem Beispiel:

PLAY RECAP *********************************************************************
qfx10002-01                : ok=3    changed=0    unreachable=0    failed=1
qfx10002-02                : ok=3    changed=0    unreachable=0    failed=1
qfx5100-01                 : ok=1    changed=0    unreachable=0    failed=1

JSNAPy Ergebnisse für: qfx10002-01 ************************************************
Wert von 'peer-state' nicht 'is-equal' bei '//bgp-information/bgp-peer' mit {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
Wert von 'peer-state' nicht 'is-equal' bei '//bgp-information/bgp-peer' mit {"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"}
Wert von 'oper-status' nicht 'is-equal' bei '//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]' mit {"oper-status": "down", "name": "et-0/0/18"}

JSNAPy Ergebnisse für: qfx10002-02 ************************************************
Wert von 'peer-state' nicht 'is-equal' bei '//bgp-information/bgp-peer' mit {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}

Callback-Plugins sind standardmäßig nicht aktiviert. Sie müssen manuell in die Ansible-Konfigurationsdatei im Abschnitt [defaults] mit der Variablen callback_whitelist hinzugefügt werden. Insbesondere sollten folgende Zeilen in die Ansible-Konfigurationsdatei eingefügt werden, um das jsnapy-Callback-Plugin zuzulassen:

[defaults]
callback_whitelist = jsnapy

DOKUMENTATION

Offizielle Juniper-Dokumentation (detaillierte Informationen, einschließlich Beispiele)

Ansible-Stildokumentation

INSTALLATION

Sie müssen die ABHÄNGIGKEITEN auf Ihrem System installiert haben. Überprüfen Sie die Datei requirements.txt auf die Abhängigkeiten.

HINWEISE

MacOS Mojave und neuer

In MacOS Mojave und neuer (>=10.14) werden SSH-Schlüssel, die mit dem System ssh-keygen erstellt wurden, im neueren 'OPENSSH'-Schlüsselformat erstellt, selbst wenn -t rsa während der Erstellung angegeben wird. Dies wirkt sich direkt auf die Verwendung von SSH-Schlüsseln aus, insbesondere bei der Verwendung von ssh_private_key_file. Um Schlüssel zu erstellen/konvertieren/prüfen, befolgen Sie diese Schritte:

  • Erstellen Sie einen neuen RSA-Schlüssel: ssh-keygen -m PEM -t rsa -b 4096
  • Überprüfen Sie vorhandene Schlüssel: head -n1 ~/.ssh/some_private_key RSA-Schlüssel beginnen mit -----BEGIN RSA PRIVATE KEY----- und OPENSSH-Schlüssel mit -----BEGIN OPENSSH PRIVATE KEY-----
  • Konvertieren Sie einen OPENSSH-Schlüssel in einen RSA-Schlüssel: ssh-keygen -p -m PEM -f ~/.ssh/some_key

Ansible Galaxy Sammlung

Sie können den Befehl ansible-galaxy install verwenden, um die neueste Version der Sammlung juniper.device zu installieren.

sudo ansible-galaxy collection install juniper.device

Sie können auch den Befehl ansible-galaxy install verwenden, um die neueste Entwicklungsversion der Junos-Sammlungen direkt von GitHub zu installieren.

sudo ansible-galaxy collection install git+https://github.com/Juniper/ansible-junos-stdlib.git#/ansible_collections/juniper/device

Für weitere Informationen besuchen Sie - https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#specifying-the-location-to-search-for-collections

Git klonen

Für Tests können Sie dieses Repository mit git clone klonen und das Skript env-setup im Verzeichnis des Repos ausführen:

user@ansible-junos-stdlib> source env-setup

Dies setzt Ihre $ANSIBLE_LIBRARY-Variable auf den Speicherort des Repos und den installierten Ansible-Bibliotheks-Pfad. Zum Beispiel:

$ echo $ANSIBLE_LIBRARY /home/jeremy/Ansible/ansible-junos-stdlib/library:/usr/share/ansible

Docker

Um dies als Docker-Container auszuführen, der JSNAPy und PyEZ enthält, ziehen Sie es einfach vom Docker Hub und führen Sie es aus. Folgendes wird das neueste Image herunterladen und es in einer interaktiven Ash-Shell ausführen.

docker run -it --rm juniper/pyez-ansible

Wahrscheinlich möchten Sie ein Verzeichnis des Hosts bind-mounten (vielleicht das Verzeichnis, das Ihre Playbooks und zugehörigen Dateien enthält). Folgendes wird das aktuelle Arbeitsverzeichnis bind-mounten und die Ash-Shell starten.

docker run -it --rm -v $PWD:/project juniper/pyez-ansible

Sie können den Container auch als ausführbare Datei verwenden, um Ihre Playbooks auszuführen. Angenommen, wir haben eine typische Playbook-Struktur wie unten:

example
|playbook.yml
|hosts
|-vars
|-templates
|-scripts

Wir können in das Beispielverzeichnis wechseln und das Playbook mit dem folgenden Befehl ausführen:

cd example/ docker run -it --rm -v $PWD:/playbooks juniper/pyez-ansible ansible-playbook -i hosts playbook.yml

Sie können jeden gültigen Befehlsstring nach dem Containernamen übergeben und er wird für die Ausführung an Bash weitergeleitet.

Wie Sie vielleicht bemerkt haben, ist der Basisbefehl fast immer der gleiche. Wir können auch ein Alias verwenden, um Eingaben zu sparen.

alias pb-ansible="docker run -it --rm -v $PWD:/project juniper/pyez-ansible ansible-playbook" pb-ansible -i hosts playbook.yml

Erweiterung des Containers mit zusätzlichen Paketen

Es ist möglich, zusätzliche OS (Alpine)-Pakete, Python-Pakete (über pip) und Ansible-Sammlungen beim Erstellen des Containers zu installieren. Dies kann durch das Übergeben von Umgebungsvariablen oder das Binden von Dateien erfolgen.

OS-Pakete

Umgebungsvariable: $APK Bind-Mount: /extras/apk.txt Dateiformat: Liste von gültigen Alpine-Paketen, jeweils in einer Zeile Beispiele:

Als Umgebungsvariable, wobei die Datei mit der Liste von Paketen im aktuellen Verzeichnis ist.

docker run -it --rm -v $PWD:/project -e APK="apk.txt" juniper/pyez-ansible

Als Bind-Mount.

docker run -it --rm -v $PWD/apk.txt:/extras/apk.txt juniper/pyez-ansible

Python-Pakete

Umgebungsvariable: $REQ Bind-Mount: /extras/requirements.txt Dateiformat: pip Requirements Datei

Beispiele:

docker run -it --rm -v $PWD:/project -e REQ="requirements.txt" juniper/pyez-ansible

Als Bind-Mount.

docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.txt juniper/pyez-ansible

Ansible-Pakete

Umgebungsvariable: $ROLES Bind-Mount: /extras/requirements.yml Dateiformat: Ansible Requirements Datei

Hinweis: Dies funktioniert sowohl für Sammlungen als auch für Rollen.

Beispiele:

docker run -it --rm -v $PWD:/project -e REQ="requirements.yml" juniper/pyez-ansible

Als Bind-Mount.

docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.yml juniper/pyez-ansible

Beispiel-Playbook

Dieses Beispiel zeigt, wie man Ansible benutzt, um das Software-Image auf einem Gerät mit Junos OS zu installieren oder zu aktualisieren.

---
- name: Junos OS installieren
  hosts: dc1
  connection: local
  gather_facts: false
  vars:
    wait_time: 3600
    pkg_dir: /var/tmp/junos-install
    os_version: 14.1R1.10
    os_package: jinstall-14.1R1.10-domestic-signed.tgz
    log_dir: /var/log/ansible

  tasks:
    - name: Überprüfen der NETCONF-Konnektivität
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: 5
    - name: Junos OS-Paket installieren
      juniper.device.software:
        reboot: true
        version: "{{ os_version }}"
        package: "{{ pkg_dir }}/{{ os_package }}"
        logfile: "{{ log_dir }}/software.log"
      register: sw
      notify:
        - Warte_neustart

  handlers:
    - name: Warte_neustart
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: "{{ wait_time }}"
      when: not sw.check_mode

ABHÄNGIGKEITEN

Diese Module erfordern Folgendes auf dem Ansible-Kontrollrechner:

LIZENZ

Apache 2.0

SUPPORT

Der Support für diese Sammlung juniper.device wird von der Community und Juniper Networks bereitgestellt. Wenn Sie ein Problem mit einem Modul der Sammlung juniper.device haben, können Sie:

Der Support für die in den Ansible-Kern integrierten Junos-Module wird von Ansible bereitgestellt. Wenn Sie ein Problem mit einem Ansible-Kernmodul haben, sollten Sie ein Github-Problem gegen das Ansible-Projekt eröffnen.

BEITRAGENDER

Juniper Networks trägt aktiv zu diesem Repo bei und pflegt es. Bitte kontaktieren Sie [email protected] bei Fragen.

Mitwirkende: Stephen Steiner, Dinesh Babu, Chidanand Pujar

Ehemalige Mitwirkende:

Stacy W Smith, Jeremy Schulman, Rick Sherman, Damien Garros, David Gethings, Nitin Kumar, Rahul Kumar

Über das Projekt

Network build automation of Junos devices.

Installieren
ansible-galaxy install juniper.junos
Lizenz
apache-2.0
Downloads
3.5M