Как стать автором
Обновить

Обзор инструментов по работе с Ansible

Время на прочтение7 мин
Количество просмотров13K

1. Цель


Целью является составить полный список инструментов, которые облегчают писать конфигурацию/код Ansible в трёх популярных редакторах: VS Code, Atom, JetBrains PyCharm (в данном случае проще эту IDE рассмотреть как редактор). Под инструментами я имею ввиду: линтеры, форматтеры (спик инглиш!), подсветка синтаксиса, автодополнение. Будет рассмотрена текущая активность в разработке инструментариев и предложено моё субъективно-оценочное суждение что должно быть в "идеальном" инструменте. Я пользовался всего одним инструментом из рассмотренных, поэтому в обзоре не будет моей субъективной оценки со стороны пользователя, только то что смог найти в общем доступе.


2. Критерии оценки


Тут более менее стандартный список:


  • Рейтинг на маркетплейсе. У каждого из редакторов есть свой "маркетплейс" для расширений/плагинов, где есть возможность оставить отзыв.
  • Количество скачиваний. Информация берётся с маркетплейса.
  • Количество звёзд на Github.
  • Количество строк кода. Использовалась утилита cloc. Вывод программы будет выведен частично, чтобы не раздувать размер статьи. Будут убраны языки, чей вклад меньше 5%.
  • Дата последнего коммита.
  • Реализованные функции взятые из README.

3. Обзор


3.1 Существующие обзоры


3.1.1 Поиск


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


  • обзор инструментов по работе с ansible → 0 релевантных результатов.
  • обзор ansible ide → 0 релевантных результатов.
  • обзор ansible редактор → 0 релевантных результатов.

В русскоязычном сегменте статьи по Ansible в большинстве своём носят ознакомительный характер, но такой базовый вопрос почему-то не закрыт.


Посмотрим как дело обстоит в английском сегменте:


  • ansible tools → 1 релевантный ответ.
  • review ansible ide → 1 релевантный ответ.

Рассмотрим подробнее эти два обзора.


3.1.1 Ansible other tools and programs


Это список инструментов с официального сайта Ansible. К сожалению 95% инструментов никак не связаны с Ansible, в осноном это поддержка синтакса YAML и Jinja2.


3.1.2 The best IDE for Ansible


Данное обсуждение я включил как в качестве опроса пользователей каким инструментом они пользуются. И в большинстве случаев это обычный редактор, который никак не завязан на Ansible. Из проведённого поиска можно утверждать, что исследование стоит провести.


3.2 VS Code


3.2.1 Описание редактора


Я думаю все знакомы с редактором VS Code, поэтому вставлять копипасту с его официального сайта я не буду. Если посмотреть какие есть расширения для данного редактора по ключевому слову "ansible", то список получится небольшой (13 расширений), поэтому рассмотрим первые три.


3.2.2 Ansible


Оценка критериев:


  • Рейтинг на маркетплейсе — 3.4 из 5 (12 оценок).
  • Количество скачиваний — 224 950.
  • Количество звёзд на Github — 54.
  • Дата последнего коммита — 21.08.2019. При этом большинство файлов менялось 2 года назад.

Реализованные функции взятые из README:


  • Auto completion. Auto completion Ansible directives, modules and plugins from Ansible doc, Auto completion for variables. Disable auto completion by setting ansible.autocompletion to false.
  • Code snippets. Press Ctrl + Space, Ansible playbook code snippets will show up.
  • Syntax highlighting. Enable syntax highlighting by setting files.associations to ansible in settings.json.
  • Yaml validation. Yaml validation by leverage Yaml language server.
  • Code navigation by Symbols, press Ctrl + Shift + O.
  • Hover over module names, to show module documentation. Disable hovering over by setting ansible.hover to false.
  • Run playbook from Docker.
  • Run playbook from local Ansible installation.
  • Run playbook from Cloud Shell.
  • Run playbook remotely via ssh.
  • Auto File Copy to remote host on saving.

Вывод утилиты cloc:


63 text files.
63 unique files.
 6 files ignored.
-------------------------------------------------------------------
Language         files          blank        comment           code
-------------------------------------------------------------------
JSON                14              0              0         451226
TypeScript          33            669             80           2943
Markdown             6             79              0            249
-------------------------------------------------------------------
SUM:                58            767             81         454543
-------------------------------------------------------------------

Судя по комментарием расширение давно не развивается, открытые PR и issue зависли, заявленная функциональность большей частью не работает.


3.2.3 language-Ansible


Оценка критериев:


  • Рейтинг на маркетплейсе — 4.2 из 5 (6 оценок).
  • Количество скачиваний — 92 212.
  • Количество звёзд на Github — 10.
  • Дата последнего коммита — 15.01.2018.

Реализованные функции (в данном случае это то, что взятые из README:


  • Jinja language
  • Jinja expressions for ansible conditions (when, changed_when, failed_when, check_mode)
  • Some YAML block scalar

Эти функции указаны как дополнение к реализованным в другом расширении, который не развивается уже 6 лет.


Вывод утилиты cloc:


10 text files.
10 unique files.
 4 files ignored.
-------------------------------------------------------------------
Language         files          blank        comment           code
-------------------------------------------------------------------
YAML                 1             16              6            132
JSON                 3              0              0             95
Markdown             3             13              0             60
-------------------------------------------------------------------
SUM:                 7             29              6            287
-------------------------------------------------------------------

3.2.4 ansible-autocomplete


Оценка критериев:


  • Рейтинг на маркетплейсе — 5 из 5 (2 оценки).
  • Количество скачиваний — 62 185.
  • Количество звёзд на Github — 2.
  • Дата последнего коммита — 20.11.2017.

Реализованные функции взятые из README отсутствуют. Расширение заявлено как порт пакета для редактора Atom, который развивается.


Вывод утилиты cloc:


17 text files.
17 unique files.
 5 files ignored.
-------------------------------------------------------------------
Language         files          blank        comment           code
-------------------------------------------------------------------
JSON                 7              7              0         148305
TypeScript           4             44              5            199
Python               2             28              2            132
Markdown             1              2              0              3
-------------------------------------------------------------------
SUM:                14             81              7         148639
-------------------------------------------------------------------

3.3 Atom


3.3.1 Описание редактора


Тоже популярный редактор. Поиск по ключевому слову "ansible" выдал большое количество результатов, в основном нерелевантных. Если просмотреть первую страницу выдачи, то можно выделить 11 подходящих пакетов. Рассмотрим также первые два, так как среди оставшихся есть дублирующие уже рассмотренные из VS Code.


3.3.2 linter-ansible-linting


Оценка критериев:


  • Рейтинг на маркетплейсе (аналог звёзд на Github) — 51.
  • Количество скачиваний — 60 823.
  • Количество звёзд на Github — 18.
  • Дата последнего коммита — 22.04.2020. Пакет активно развивается.

Реализованные функции взятые из README:


  • Linter-Ansible-Linting aims to provide functional and robust Ansible-Lint linting functionality within Atom.

Вывод утилиты cloc:


20 text files.
20 unique files.
 3 files ignored.
-------------------------------------------------------------------
Language         files          blank        comment           code
-------------------------------------------------------------------
JavaScript           3             46             28            565
Markdown             3             23              0             96
YAML                11             28             14             90
JSON                 1              0              0             49
-------------------------------------------------------------------
SUM:                18             97             42            800
-------------------------------------------------------------------

3.3.3 linter-ansible-syntax


Оценка критериев:


  • Рейтинг на маркетплейсе (аналог звёзд на Github) — 25.
  • Количество скачиваний — 24 819.
  • Количество звёзд на Github — 4.
  • Дата последнего коммита — 22.04.2020. Пакет активно развивается.

Реализованные функции взятые из README:


  • Linter-Ansible-Syntax aims to provide functional and robust Ansible syntax check linting functionality within Atom.

Вывод утилиты cloc:


19 text files.
19 unique files.
5  files ignored.
-------------------------------------------------------------------
Language         files          blank        comment           code
-------------------------------------------------------------------
JavaScript           3             34             18            315
Markdown             3             17              0             64
YAML                 8             12             10             56
JSON                 1              0              0             48
-------------------------------------------------------------------
SUM:                15             63             28            483
-------------------------------------------------------------------

3.4 PyCharm


Описание редактора


IDE от JetBrains, в которой можно добавить поддержку различных языков с помощью плагинов. По поиску "ansible" подходит только 1 вариант.


3.4.2 YAML/Ansible support


Оценка критериев:


  • Рейтинг на маркетплейсе — 3.7 из 5.0 (9 оценок).
  • Количество скачиваний — 464 115.
  • Количество звёзд на Github — 191.
  • Дата последнего коммита — 01.06.2017.

Реализованные функции взятые из README:


  • Goto role (Ctrl-N)
  • Goto task (Ctrl-N)
  • Goto var/property (Ctrl-Alt-Shift-N)
  • Role/Jinja var reference on Ctrl-Click
  • Module doc lookup
  • lexer, parser (internal)
  • syntax highlighting
  • comment/uncomment
  • bracket / parenthesis matching
  • role completion

Вывод утилиты cloc:


147 text files.
146 unique files.
 42 files ignored.
-------------------------------------------------------------------
Language         files          blank        comment           code
-------------------------------------------------------------------
YAML                28           1045            232           7276
Java                68            686            464           3344
Bourne Shell         1             21             22            129
-------------------------------------------------------------------
SUM:               107           1806            726          10970
-------------------------------------------------------------------

Такое большое количество YAML кода связано, с тем что в репозитории есть 1 fork примеров Ansible кода, который определяется утилитой cloc. Поэтому можно утверждать, что весь плагин написан на Java.


4. Каким должен быть идеальный инструмент


Основным недостатком текущих решений в VS Code и PyCharm я считаю отсутствие переиспользования других наработок. Уже давно существуют ansible-lint, ansible-playbook --syntax-check, yamllint. Зачем реализовывать ещё один языковой сервер YAML, добавлять в него лексиску Ansible, когда это уже реализовано. Или добавлять функции, которые используются малым процентом пользователей (запуск в Docker и облаке), вместо решения общей для всей пользователей проблемы (обязательные параметры стандартных модулей, корректность парсинга YAML, ошибки форматирования).


Сейчас эти проверки в большинстве случаев реализованы через CI, что увеличивает петлю обратной связи. Либо качество кода зависит от deprecation warnings в логе работы. Поэтому в текущей перспективе лучше всего использовать редактор Atom для работы с Ansible.


По проведённому обзору можно сказать, что лучшим решением для разработки на Ansible на текущий момент является редактор Atom. Те расширения, которые разработаны для данного редактора, можно легко перенести и на другие редакторы.


И я думаю также важным недостатком является отсутствие развития текущих инструментов. Последние даты коммитов 2-3 года назад, когда самому Ansible всего 8 лет, это очень большой срок. Сильно сомневаюсь, что инструменты не развиваются, потому что больше некуда и Ansible не претерпевает серьёзных изменений.

Теги:
Хабы:
Всего голосов 7: ↑5 и ↓2+3
Комментарии9

Публикации

Истории

Работа

DevOps инженер
43 вакансии

Ближайшие события