Thursday, February 11, 2016

Netconf клиент

Пример использования 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, так и без него только нужно написать обертку над модулями для запуска функциональности.