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 не претерпевает серьёзных изменений.
ссылка на оригинал статьи https://habr.com/ru/post/499624/
Добавить комментарий