juniper.junos
Zbiór Ansible Juniper dla Junos
O zbiorze
Juniper Networks wspiera Ansible do zarządzania urządzeniami działającymi na systemie operacyjnym Junos (Junos OS oraz Junos Evolved). Ten zbiór jest dostępny na stronie Ansible Galaxy pod zbiorem juniper.device.
Zbiór juniper.device
zawiera zestaw modułów Ansible, które wykonują konkretne zadania operacyjne i konfiguracyjne na urządzeniach działających na Junos OS.
Zadania te obejmują: instalację i aktualizację Junos OS, przygotowanie nowych urządzeń Junos w sieci, wczytywanie zmian konfiguracyjnych,
pobieranie informacji oraz resetowanie, restartowanie lub wyłączanie zarządzanych urządzeń. Prosimy o zapoznanie się z sekcją
INSTALACJA w celu uzyskania instrukcji dotyczących instalacji tego zbioru.
Dwa zestawy modułów Ansible dla urządzeń Junos
Od wersji Ansible >= 2.1, Ansible zawiera także
moduły rdzeniowe dla Junos. Moduły Junos zawarte w rdzeniu Ansible mają nazwy zaczynające się od prefiksu junos_
. Moduły Junos zawarte w zbiorze juniper.device
mają nazwy zaczynające się od typów modułów. Te dwa zestawy modułów Junos mogą współistnieć na tym samym
maszynie kontrolnej Ansible, a playbook Ansible może wywoływać moduł z jednego (lub obu) zestawów. Juniper Networks zaleca
korzystanie z modułów w zbiorze juniper.device
podczas pisania nowych playbooków zarządzających urządzeniami Junos.
Przegląd modułów
Zbiór juniper.device
zawiera następujące moduły:
- command — Wykonaj jedno lub więcej poleceń CLI na urządzeniu Junos.
- config — Manipuluj konfiguracją urządzenia Junos.
- facts — Pobierz fakty z urządzenia Junos.
- file_copy - Skopiuj pliki z i do urządzenia Junos.
- jsnapy — Wykonaj testy JSNAPy na urządzeniu Junos.
- ping — Wykonaj polecenie ping z urządzenia Junos.
- pmtud — Wykonaj odkrywanie maksymalnej jednostki transmisyjnej (MTU) z urządzenia Junos do celu.
- rpc — Wykonaj jedno lub więcej RPC NETCONF na urządzeniu Junos.
- software — Zainstaluj oprogramowanie na urządzeniu Junos.
- srx_cluster — Dodaj lub usuń konfigurację klastra SRX.
- system — Rozpocznij działania operacyjne na systemie Junos.
- table — Pobierz dane z urządzenia Junos za pomocą tabeli/widoku PyEZ.
Wymagana wersja PyEZ
Zbiór ansible juniper.device
wymaga instalacji junos-eznc w wersji 2.6.0 lub wyższej.
Przegląd wtyczek
Oprócz wymienionych modułów, dostępna jest wtyczka zwrotna jsnapy
dla modułu jsnapy.
Wtyczka zwrotna jsnapy
pomaga w wyświetlaniu na ekranie dodatkowych informacji dotyczących nieudanych testów jsnapy.
Dla każdego nieudanego testu, log zostanie wydrukowany po RECAP z playbooka, jak pokazano w tym przykładzie:
RECAP GRY *********************************************************************
qfx10002-01 : ok=3 zmienione=0 nietypowe=0 nieudane=1
qfx10002-02 : ok=3 zmienione=0 nietypowe=0 nieudane=1
qfx5100-01 : ok=1 zmienione=0 nietypowe=0 nieudane=1
Wyniki JSNAPy dla: qfx10002-01 ***********************************************
Wartość 'peer-state' nie 'is-equal' na '//bgp-information/bgp-peer' z {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
Wartość 'peer-state' nie 'is-equal' na '//bgp-information/bgp-peer' z {"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"}
Wartość 'oper-status' nie 'is-equal' na '//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]' z {"oper-status": "down", "name": "et-0/0/18"}
Wyniki JSNAPy dla: qfx10002-02 ***********************************************
Wartość 'peer-state' nie 'is-equal' na '//bgp-information/bgp-peer' z {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
Wtyczki zwrotne nie są aktywowane domyślnie. Muszą być ręcznie dodane do pliku konfiguracyjnego Ansible w sekcji [defaults]
za pomocą zmiennej callback_whitelist
. Konkretnie, te linie
powinny być dodane do pliku konfiguracyjnego Ansible, aby umożliwić wtyczkę zwrotną jsnapy:
[defaults]
callback_whitelist = jsnapy
DOKUMENTACJA
Oficjalna dokumentacja Juniper (szczegółowe informacje, w tym przykłady)
Dokumentacja Ansible w stylu dokumentacji
INSTALACJA
Musisz mieć zainstalowane na swoim systemie WYMAGANIA. Sprawdź plik requirements.txt w celu uzyskania zależności.
UWAGI
MacOS Mojave i nowsze
W systemie MacOS Mojave i nowszych (>=10.14) klucze SSH stworzone za pomocą systemowego ssh-keygen
są tworzone w nowszym formacie klucza 'OPENSSH', nawet przy wskazaniu -t rsa
podczas tworzenia. To bezpośrednio wpływa na użycie kluczy SSH, szczególnie przy użyciu ssh_private_key_file
. Aby tworzyć/konwertować/sprawdzać klucze, wykonaj następujące kroki:
- Utwórz nowy klucz RSA:
ssh-keygen -m PEM -t rsa -b 4096
- Sprawdź istniejące klucze:
head -n1 ~/.ssh/some_private_key
Klucze RSA będą miały-----BEGIN RSA PRIVATE KEY-----
, a klucze OPENSSH będą miały-----BEGIN OPENSSH PRIVATE KEY-----
- Przekonwertuj klucz OPENSSH na klucz RSA:
ssh-keygen -p -m PEM -f ~/.ssh/some_key
Zbiór Ansible Galaxy
Możesz użyć polecenia ansible-galaxy install, aby zainstalować najnowszą
wersję zbioru juniper.device
.
sudo ansible-galaxy collection install juniper.device
Możesz także użyć polecenia ansible-galaxy install, aby zainstalować najnowszą wersję rozwojową zbioru junos bezpośrednio z GitHub.
sudo ansible-galaxy collection install git+https://github.com/Juniper/ansible-junos-stdlib.git#/ansible_collections/juniper/device
Aby uzyskać więcej informacji odwiedź - https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#specifying-the-location-to-search-for-collections
Klonowanie Gita
W celach testowych możesz git clone
ten repozytor i uruchomić skrypt env-setup
w katalogu repo:
user@ansible-junos-stdlib> source env-setup
To ustawi zmienną $ANSIBLE_LIBRARY
na lokalizację repozytorium oraz zainstalowaną ścieżkę biblioteki Ansible. Na przykład:
$ echo $ANSIBLE_LIBRARY /home/jeremy/Ansible/ansible-junos-stdlib/library:/usr/share/ansible
Docker
Aby uruchomić to jako kontener Docker, który zawiera JSNAPy i PyEZ, wystarczy pobrać go z Docker hub i uruchomić. Poniższe polecenie pobierze najnowszy obraz i uruchomi go w interaktywnej powłoce ash.
docker run -it --rm juniper/pyez-ansible
Chociaż prawdopodobnie zechcesz powiązać zamontowany katalog hosta (może to być katalog zawierający twoje playbooki i powiązane pliki). Poniższe polecenie zamontuje bieżący katalog i uruchomi powłokę ash.
docker run -it --rm -v $PWD:/project juniper/pyez-ansible
Możesz także używać kontenera jako wykonawczego do uruchamiania swoich playbooków. Załóżmy, że mamy typową strukturę playbooka, jak pokazano poniżej:
przykład
|playbook.yml
|hosts
|-vars
|-templates
|-scripts
Możemy przejść do katalogu example i uruchomić playbook za pomocą następującego polecenia:
cd example/ docker run -it --rm -v $PWD:/playbooks juniper/pyez-ansible ansible-playbook -i hosts playbook.yml
Możesz przekazać dowolny prawidłowy ciąg poleceń po nazwie kontenera, a zostanie on przekazany do Bash do wykonania.
Mogłeś zauważyć, że podstawowe polecenie jest niemal zawsze takie samo. Możemy również użyć aliasu, aby zaoszczędzić trochę czas.
alias pb-ansible="docker run -it --rm -v $PWD:/project juniper/pyez-ansible ansible-playbook" pb-ansible -i hosts playbook.yml
Rozszerzanie kontenera o dodatkowe pakiety
Możliwe jest zainstalowanie dodatkowych pakietów systemowych (Alpine), pakietów Pythona (za pomocą pip) oraz zbiorów Ansible podczas inicjacji kontenera. Można to zrobić, przekazując zmienne środowiskowe lub montując pliki.
Pakiety OS
Zmienna środowiskowa: $APK
Montaż powiązany: /extras/apk.txt
Format pliku: lista prawidłowych pakietów Alpine, jeden na linii
Przykłady:
Jako zmienna środowiskowa, gdzie plik zawierający listę pakietów znajduje się w bieżącym katalogu.
docker run -it --rm -v $PWD:/project -e APK="apk.txt" juniper/pyez-ansible
Jako montaż powiązany.
docker run -it --rm -v $PWD/apk.txt:/extras/apk.txt juniper/pyez-ansible
Pakiety Pythona
Zmienna środowiskowa: $REQ
Montaż powiązany: /extras/requirements.txt
Format pliku: plik wymagań dla pip
Przykłady:
docker run -it --rm -v $PWD:/project -e REQ="requirements.txt" juniper/pyez-ansible
Jako montaż powiązany.
docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.txt juniper/pyez-ansible
Pakiety Ansible
Zmienna środowiskowa: $ROLES
Montaż powiązany: /extras/requirements.yml
Format pliku: plik wymagań Ansible
UWAGA: To działa zarówno dla zbiorów, jak i ról.
Przykłady:
docker run -it --rm -v $PWD:/project -e REQ="requirements.yml" juniper/pyez-ansible
Jako montaż powiązany.
docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.yml juniper/pyez-ansible
Przykładowy playbook
Ten przykład opisuje, jak użyć Ansible do zainstalowania lub zaktualizowania obrazu oprogramowania na urządzeniu działającym na Junos OS.
---
- name: Zainstaluj Junos OS
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: Sprawdzanie łączności NETCONF
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: 830
timeout: 5
- name: Zainstaluj pakiet Junos OS
juniper.device.software:
reboot: true
version: "{{ os_version }}"
package: "{{ pkg_dir }}/{{ os_package }}"
logfile: "{{ log_dir }}/software.log"
register: sw
notify:
- Wait_reboot
handlers:
- name: Wait_reboot
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: 830
timeout: "{{ wait_time }}"
when: not sw.check_mode
WYMAGANIA
Te moduły wymagają zainstalowania następujących na maszynie kontrolnej Ansible:
- Python >= 3.8
- Ansible w wersji 2.9 lub nowszej
- Junos py-junos-eznc w wersji 2.6.0 lub nowszej
- jxmlease w wersji 1.0.1 lub nowszej
- xmltodict w wersji 0.13.0 lub nowszej
- jsnapy w wersji 1.3.7 lub nowszej
LICENCJA
Apache 2.0
WSPIERANIE
Wsparcie dla tego zbioru juniper.device
jest zapewniane przez społeczność oraz Juniper Networks. Jeśli masz problem z modułem w zbiorze juniper.device
, możesz:
- Otworzyć problem na GitHubie.
- Zadać pytanie na naszej Grupie Google
- Wysłać e-mail na adres [email protected]
- Otworzyć zgłoszenie JTAC
Wsparcie dla modułów Junos zawartych w rdzeniu Ansible zapewnia Ansible. Jeśli masz problem z modułem rdzeniowym Ansible, powinieneś otworzyć problem na GitHubie projektu Ansible.
WSPÓŁTWÓRCY
Juniper Networks aktywnie przyczynia się do utrzymania tego repozytorium. Skontaktuj się z [email protected] w razie pytań.
Współtwórcy: Stephen Steiner, Dinesh Babu, Chidanand Pujar
Byli współtwórcy:
Stacy W Smith, Jeremy Schulman, Rick Sherman, Damien Garros, David Gethings, Nitin Kumar, Rahul Kumar
ansible-galaxy install juniper.junos