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 (подробная информация, включая примеры)
УСТАНОВКА
Вы должны установить ЗАВИСИМОСТИ на своей системе. Проверьте файл 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:
- Python >= 3.8
- Ansible 2.9 или новее
- Junos py-junos-eznc 2.6.0 или новее
- jxmlease 1.0.1 или новее
- xmltodict 0.13.0 или новее
- jsnapy 1.3.7 или новее
ЛИЦЕНЗИЯ
Apache 2.0
ПОДДЕРЖКА
Поддержка коллекции juniper.device
предоставляется сообществом и Juniper Networks. Если у вас возникла проблема с модулем в коллекции juniper.device
, вы можете:
- Открыть GitHub issue.
- Задать вопрос в нашей Google Group
- Написать на [email protected]
- Открыть JTAC Case
Поддержка модулей Junos, включенных в основную часть Ansible, предоставляется Ansible. Если у вас возникла проблема с модулем core Ansible, вы должны открыть Github issue против проекта Ansible.
УЧАСТНИКИ
Juniper Networks активно участвует в разработке и поддержке этого репозитория. Пожалуйста, свяжитесь с [email protected] по любым вопросам.
Участники: Стивен Штайнер, Динеш Бабу, Чидананд Пujar
Бывшие участники:
Стейси У. Смит, Джереми Шульман, Рик Шерман, Дамиен Гаррос, Дэвид Гетингс, Нитин Кумар, Рахул Кумар
ansible-galaxy install Juniper/ansible-junos-stdlib