Разработка модулей
Приветствие
В этом разделе обсуждается, как разрабатывать, отлаживать, просматривать и тестировать модули.
Модули Ansible — это многократно используемые автономные скрипты, которые могут использоваться API Ansible или программами ansible или ansible-playbook. Они возвращают информацию Ansible, выводя строку JSON в стандартный вывод перед завершением. Они принимают аргументы несколькими способами, о которых мы поговорим в процессе работы с этим учебником.
См. О модулях для списка существующих модулей.
Модули могут быть написаны на любом языке и находятся в пути, указанном в ANSIBLE_LIBRARY или в параметре командной строки --module-path или в разделе библиотеки файла конфигурации Ansible.
Нужно ли разрабатывать модуль?
Прежде чем приступать к созданию нового модуля, необходимо подумать, действительно ли необходимо его разрабатывать. Задайте следующие вопросы:
- Существует ли похожий модуль?
Доступно много существующих модулей, вы можете ознакомиться со списком существующих модулей по адресу О модулях
- Кто-то уже работал над похожим запросом на вытягивание (Pull Request)?
Возможно, кто-то уже начал разрабатывать похожий запрос на вытягивание (Pull Request). Существует несколько способов найти открытые запросы на вытягивание для модулей:
- GitHub: новые запросы на вытягивание (Pull Request) для модулей
- Все обновления модулей
-
Новые запросы на вытягивание (Pull Request) для модулей, перечисленные по каталогу поиск по
lib/ansible/modules/
Если вы найдете существующий запрос на вытягивание (Pull Request), который, как кажется, решает вашу проблему, пожалуйста, дайте обратную связь по этому запросу — это ускорит слияние запроса.
- Стоит ли использовать или разрабатывать плагин действий (action plugin) вместо этого?
Плагины действий выполняются на мастер-узле, а не на целевом. Для модулей, таких как file/copy/template, часть работы должна выполняться на мастер-узле перед выполнением модуля на целевом. Плагины действий сначала выполняются на мастер-узле и затем, при необходимости, могут выполнить обычный модуль на целевом узле.
Для получения дополнительной информации о плагинах действий см. документацию по плагинам действий здесь.
- Стоит ли использовать роль (role) вместо этого?
Ознакомьтесь с документацией по ролям здесь.
Как разрабатывать модуль
В следующих разделах будет обсуждаться, как разрабатывать и работать с модулями:
- Руководство по разработке модулей Ansible
- Обзор общей методологии разработки, отладки и тестирования модулей.
- Руководство по разработке модулей Ansible для Windows
- Обзор общей методологии разработки, отладки и тестирования модулей для Windows.
- Документирование вашего модуля
- Как включить встроенную документацию в ваш модуль.
- Правила, рекомендации и потенциальные ошибки
- Рекомендации по наилучшим практикам, рекомендации и недопустимые действия.
- Внесение вашего модуля в Ansible
- Список проверок для внесения вашего модуля в Ansible.
- Тестирование Ansible
- Разработка модульных и интеграционных тестов.
- Ansible и Python 3
- Добавление поддержки Python 3 в модули (все новые модули должны быть совместимы с Python-2.6 и Python-3.5).
- Информация для отправки группы модулей
- Руководство для партнеров, желающих отправить несколько модулей.
См. также
- О модулях
- Узнайте о доступных модулях
- Разработка плагинов
- Узнайте о разработке плагинов
- Python API
- Узнайте о Python API для выполнения плейбуков и задач
- Каталог модулей GitHub
- Просмотрите исходный код модулей
- Список рассылки
- Список рассылки для разработчиков
- irc.freenode.net
- Канал IRC-чата #ansible
Приложение: Модульные утилиты
Ansible предоставляет ряд модульных утилит, которые предоставляют вспомогательные функции, которые вы можете использовать при разработке собственных модулей. Утилита модуля basic.py предоставляет главный входной пункт для доступа к библиотеке Ansible, и все модули Ansible должны, как минимум, импортировать из basic.py:
from ansible.module_utils.basic import *
Ниже приведен список файлов module_utils и общее описание. Исходный код модульных утилит находится в каталоге ./lib/module_utils в вашем основном пути Ansible — для получения более подробной информации об любой конкретной утилите модуля, пожалуйста, обратитесь к исходному коду.
- a10.py — Утилиты, используемые модулем a10_server для управления устройствами A10 Networks.
- aireos.py — Определения и вспомогательные функции для модулей, которые управляют устройствами Cisco WLC.
- api.py — Добавляет общую поддержку для универсальных модулей API.
- aos.py — Утилиты поддержки модулей для управления сервером Apstra AOS.
- aruba.py — Вспомогательные функции для модулей, работающих с сетевыми устройствами Aruba.
- asa.py — Утилиты поддержки модулей для управления сетевыми устройствами Cisco ASA.
- azure_rm_common.py — Определения и утилиты для развертывания шаблонов Microsoft Azure Resource Manager.
- basic.py — Общие определения и вспомогательные утилиты для модулей Ansible.
- cloudstack.py — Утилиты для модулей CloudStack.
- database.py — Разнообразные вспомогательные функции для PostGRES и MySQL
- docker_common.py — Определения и вспомогательные утилиты для модулей, работающих с Docker.
- ec2.py — Определения и утилиты для модулей, работающих с Amazon EC2
- eos.py — Вспомогательные функции для модулей, работающих с сетевыми устройствами EOS.
- f5.py — Вспомогательные функции для модулей, работающих с сетевыми устройствами F5.
- facts.py — Вспомогательные функции для модулей, которые возвращают факты.
- gce.py — Определения и вспомогательные функции для модулей, работающих с ресурсами Google Compute Engine.
- ios.py — Определения и вспомогательные функции для модулей, которые управляют сетевыми устройствами Cisco IOS
- iosxr.py — Определения и вспомогательные функции для модулей, которые управляют сетевыми устройствами Cisco IOS-XR
- ismount.py — Содержит единственную вспомогательную функцию, которая исправляет os.path.ismount
- junos.py — Определения и вспомогательные функции для модулей, которые управляют сетевыми устройствами Junos
- known_hosts.py — утилиты для работы с файлом known_hosts
- manageiq.py — Функции и утилиты для модулей, которые работают с платформой ManageIQ и ее ресурсами.
- mysql.py — Позволяет модулям подключаться к экземпляру MySQL
- netapp.py — Функции и утилиты для модулей, которые работают с платформами хранения NetApp.
- netcfg.py — Функции утилиты конфигурации для использования сетевыми модулями
- netcmd.py — Определяет команды и операторы сравнения для использования в сетевых модулях
- netscaler.py — Утилиты специально для сетевых модулей netscaler.
- network.py — Функции для запуска команд на сетевых устройствах
- nxos.py — Содержит определения и вспомогательные функции, специфичные для сетевых устройств Cisco NXOS
- openstack.py — Утилиты для модулей, которые работают с экземплярами Openstack.
- openswitch.py — Определения и вспомогательные функции для модулей, которые управляют устройствами OpenSwitch
- powershell.ps1 — Утилиты для работы с клиентами Microsoft Windows
- pure.py — Функции и утилиты для модулей, которые работают с платформами хранения Pure Storage.
- pycompat24.py — Обход исключений для Python 2.4.
- rax.py — Определения и вспомогательные функции для модулей, которые работают с ресурсами Rackspace.
- redhat.py — Функции для модулей, которые управляют регистрацией и подписками Red Hat Network
- service.py — Содержит утилиты для обеспечения работы модулей с службами Linux (заглушка, не используется).
- shell.py — Функции для создания оболочек и работы с командами оболочки модулями
- six/__init__.py — Скомпилированная копия библиотеки Python Six для помощи в написании кода, совместимого с Python 2 и Python 3.
- splitter.py — Утилиты для разделения и обработки строк для работы с шаблонами Jinja2
- urls.py — Утилиты для работы с запросами http и https
- vca.py — Содержит утилиты для модулей, которые работают с VMware vCloud Air
- vmware.py — Содержит утилиты для модулей, которые работают с виртуальными машинами VMware vSphere
- vyos.py — Определения и функции для работы с VyOS networking
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/dev_guide/developing_modules.html