junos

Juniper Ansible коллекция для Junos

Описание

Juniper Networks поддерживает Ansible для управления устройствами, работающими на операционной системе Junos (Junos OS и Junos Evolved). Эта коллекция находится на сайте Ansible Galaxy под коллекцией juniper.device.

Коллекция juniper.device включает набор модулей Ansible, выполняющих определенные операции и конфигурационные задачи на устройствах с Junos OS. Эти задачи включают: установку и обновление Junos OS, настройку новых устройств Junos в сети, загрузку изменений конфигурации, получение информации и сброс, перезагрузка или выключение управляемых устройств. Пожалуйста, обратитесь к разделу УСТАНОВКА для получения инструкций по установке этой коллекции.

Два набора модулей Ansible для устройств Junos

Начиная с версии Ansible >= 2.1, Ansible также включает нативно основные модули для Junos. Модули Junos, включенные в основную часть Ansible, имеют названия, начинающиеся с префикса junos_. Модули Junos из коллекции juniper.device имеют названия, начинающиеся с типов модулей. Эти два набора модулей могут сосуществовать на одной контрольной машине Ansible, и плейбук Ansible может вызывать модуль из любого (или обоих) наборов. Juniper Networks рекомендует использовать модули из коллекции juniper.device при написании новых плейбуков для управления устройствами Junos.

Обзор модулей

Эта коллекция juniper.device включает следующие модули:

  • command — Выполняет одну или несколько команд CLI на устройстве Junos.
  • config — Манипулирует конфигурацией устройства Junos.
  • facts — Получает факты с устройства Junos.
  • file_copy - Копирует файлы с и на устройство Junos.
  • jsnapy — Выполняет тесты JSNAPy на устройстве Junos.
  • ping — Выполняет ping с устройства Junos.
  • pmtud — Выполняет открытие MTU пути с устройства Junos до назначения.
  • rpc — Выполняет одну или несколько RPC NETCONF на устройстве Junos.
  • software — Устанавливает программное обеспечение на устройстве Junos.
  • srx_cluster — Добавляет или удаляет конфигурацию кластера шасси SRX.
  • system — Инициирует оперативные действия на системе Junos.
  • table — Получает данные с устройства Junos с использованием таблицы/представления PyEZ.

Требование по версии PyEZ

Для коллекции ansible juniper.device нужно установить junos-eznc версии 2.6.0 или выше.

Обзор плагинов

В дополнение к перечисленным выше модулям, доступен callback_plugin jsnapy для модуля jsnapy.

Callback_plugin jsnapy помогает выводить на экран дополнительную информацию о неудачных тестах jsnapy. Для каждого неудачного теста будет напечатан лог после резюме плейбука, как показано в этом примере:

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 Results for: qfx10002-01 ************************************************
Значение 'peer-state' не 'равно' на '//bgp-information/bgp-peer' с {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
Значение 'peer-state' не 'равно' на '//bgp-information/bgp-peer' с {"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"}
Значение 'oper-status' не 'равно' на '//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]' с {"oper-status": "down", "name": "et-0/0/18"}

JSNAPy Results for: qfx10002-02 ************************************************
Значение 'peer-state' не 'равно' на '//bgp-information/bgp-peer' с {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}

Callback плагины не активированы по умолчанию. Их необходимо вручную добавить в файл конфигурации Ansible в секцию [defaults], используя переменную callback_whitelist. В частности, эти строки должны быть добавлены в файл конфигурации Ansible, чтобы разрешить использование плагина обратного вызова jsnapy:

[defaults]
callback_whitelist = jsnapy

ДОКУМЕНТАЦИЯ

Официальная документация Juniper (подробная информация, включая примеры)

Документация стиля Ansible

УСТАНОВКА

Вы должны установить ЗАВИСИМОСТИ на своей системе. Проверьте файл requirements.txt для зависимостей.

УВЕДОМЛЕНИЯ

MacOS Mojave и новее

В MacOS Mojave и новее (>=10.14) ключи ssh, созданные с помощью системного ssh-keygen, создаются в новом формате ключей 'OPENSSH', даже при указании -t rsa во время создания. Это напрямую влияет на использование ssh ключей, особенно при использовании ssh_private_key_file. Чтобы создать/сконвертировать/проверить ключи, выполните следующие действия:

  • Создайте новый RSA ключ: ssh-keygen -m PEM -t rsa -b 4096
  • Проверьте существующие ключи: head -n1 ~/.ssh/some_private_key RSA ключи будут -----BEGIN RSA PRIVATE KEY----- и OPENSSH ключи будут -----BEGIN OPENSSH PRIVATE KEY-----
  • Конвертируйте OPENSSH ключ в RSA ключ: ssh-keygen -p -m PEM -f ~/.ssh/some_key

Коллекция Ansible Galaxy

Вы можете использовать команду ansible-galaxy install для установки последней версии коллекции juniper.device.

sudo ansible-galaxy collection install juniper.device

Вы также можете использовать команду ansible-galaxy install, чтобы установить последнюю версию разработки коллекций junos напрямую с GitHub.

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

Для получения дополнительной информации посетите - https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#specifying-the-location-to-search-for-collections

Git clone

Для тестирования вы можете git clone этот репозиторий и запустить скрипт env-setup в каталоге репозитория:

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

Это установит вашу переменную $ANSIBLE_LIBRARY на местоположение репозитория и путь к установленной библиотеке Ansible. Например:

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

Docker

Чтобы запустить это как контейнер Docker, который включает JSNAPy и PyEZ, просто получите его из Docker hub и выполните. Следующая команда загрузит последний образ и запустит его в интерактивной оболочке ash.

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

Хотя вы, вероятно, захотите примонтировать директорию хоста (возможно, директорию, содержащую ваши плейбуки и сопутствующие файлы). Следующая команда примонтирует текущую рабочую директорию и начнет оболочку ash.

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

Вы также можете использовать контейнер в качестве исполняемого для запуска ваших плейбуков. Предположим, у нас есть типичная структура плейбука, как ниже:

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

Мы можем перейти в директорию example и запустить плейбук с помощью следующей команды:

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

Вы можете передать любую допустимую строку команды после имени контейнера, и она будет передана для выполнения Bash.

Вы, вероятно, заметили, что базовая команда почти всегда одинаковая. Мы также можем использовать псевдоним, чтобы сэкономить время.

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

Расширение контейнера дополнительными пакетами

В контейнере можно установить дополнительные пакеты ОС (Alpine), Python пакеты (через pip) и коллекции Ansible при инициализации контейнера. Это можно сделать, передав переменные окружения или примонтировав файлы.

Пакеты ОС

Переменная окружения: $APK Примонтированный файл: /extras/apk.txt Формат файла: список допустимых пакетов Alpine, по одному на строку Примеры:

Как переменная окружения, где файл со списком пакетов находится в текущем каталоге.

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

Как примонтированный файл.

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

Python пакеты

Переменная окружения: $REQ Примонтированный файл: /extras/requirements.txt Формат файла: pip требования файл

Примеры:

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

Как примонтированный файл.

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

Ansible пакеты

Переменная окружения: $ROLES Примонтированный файл: /extras/requirements.yml Формат файла: Ansible требования файл

ПРИМЕЧАНИЕ: Это работает для коллекций, а также для ролей.

Примеры:

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

Как примонтированный файл.

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

Пример плейбука

Этот пример описывает, как использовать Ansible для установки или обновления программного обеспечения на устройстве с Junos OS.

---
- name: Установить 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: Проверка подключения NETCONF
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: 5
    - name: Установка пакета 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

ЗАВИСИМОСТИ

Данный модуль требует установки следующего на контрольной машине Ansible:

ЛИЦЕНЗИЯ

Apache 2.0

ПОДДЕРЖКА

Поддержка коллекции juniper.device предоставляется сообществом и Juniper Networks. Если у вас возникла проблема с модулем в коллекции juniper.device, вы можете:

Поддержка модулей Junos, включенных в основную часть Ansible, предоставляется Ansible. Если у вас возникла проблема с модулем core Ansible, вы должны открыть Github issue против проекта Ansible.

УЧАСТНИКИ

Juniper Networks активно участвует в разработке и поддержке этого репозитория. Пожалуйста, свяжитесь с [email protected] по любым вопросам.

Участники: Стивен Штайнер, Динеш Бабу, Чидананд Пujar

Бывшие участники:

Стейси У. Смит, Джереми Шульман, Рик Шерман, Дамиен Гаррос, Дэвид Гетингс, Нитин Кумар, Рахул Кумар

О проекте

Network build automation of Junos devices.

Установить
ansible-galaxy install Juniper/ansible-junos-stdlib
Лицензия
apache-2.0
Загрузки
3504551
Владелец