Пример использования netconf протокола совместно с cloudify.
Для использования этого протокола с использованием python есть
несколько вариантов:
- использовать уже существующие библиотеки заточенные под конкретные устройства (не обязательно аппаратные, можно и программные реализации) - ncclient. Хорошее решение если кто-то побеспокоился и создал код для нужного устройства, если нет нужно разбираться и писать код;
- реализовать самому протокол посмотрев в стандарты: rfc6241 - общее описания какие команды, есть и как их использовать; rfc6242 - низкоуровневое описание как общаться. Ничего особо сложного в этом нет, но если использовать python или C больше похоже на изобретение велосипеда;
- остановится на решении которое бы реализовывало протокол, но сами пакеты пользователь формулирует в удобном ему виде.
Как пример последнего может быть cloudify-netconf-plugin :-)
Код в репозитории можно разбить на 3 вида:
- реализация самого протокола общения netconf_connection.py, поддерживает NetConf 1.0 и 1.1 поверх ssh.
- реализация преобразования python словарей в xml нужного формата и обратно utils.py
- интеграция с cloudify xml_rpc.py
Как результат мы имеем дополнение к cloudify которое позволяет автоматизировать действия с настройками устройств поддерживающих этот протокол используя tosca yaml blueprints формат.
Cloudify позволяет сделать гораздо более широкие возможности чем поменять настройку какого-то устройства и при желании можно дописать плагинчик под что угодно, если плагинов по умолчанию или скриптования на bash c python вам не достаточно, но сейчас не об этом речь. Более подробно можно почитать на getcloudify.org.
Вернёмся к тому что представляет из себя плагин - он позволяет описать последовательность команд которые нужно отправить на устройство в yaml как последовательность действий внутри ноды указав действие которое нужно выполнить с указанием параметров для этого действия. Система изначально ориентирована на то что нужно получить описание интерфейса устройства в виде yang файла потом прогнать их через yttc для получения шаблона который потом подключить в нужный blueprint. Но никто не мешает напрямую писать нужные описания данных сразу в blueprint.
Запускать для turing машины это все достаточно просто(только нужно пометь в этой последовательности пароли и хост на реальные):
- mkdir turing
- virtualenv turing
- cd turing
- . bin/activate
- git clone git@github.com:cloudify-cosmo/cloudify-netconf-plugin.git
- pip install -e cloudify-netconf-plugin
- pip install cloudify
- touch netconf_inputs.yaml
- echo "netconf_ip: localhost" >> netconf_inputs.yaml
- echo "netconf_user: netconf" >> netconf_inputs.yaml
- echo "netconf_password: netconf" >> netconf_inputs.yaml
- cfy local init -p cloudify-netconf-plugin/blueprint_examples/turing.yaml -i netconf_inputs.yaml
- cfy local execute -w install
Код можно использовать как совместно с cloudify, так и без него только нужно написать обертку над модулями для запуска функциональности.