Ansible For Devops, осуждение

Взял тут книгу по Ansible, непонятное в ней начинается с первых же страниц:

  1. Clear - Ansible uses a simple syntax (YAML) and is easy for anyone (developers, sysadmins, managers) to understand. APIs are simple and sensible.

Угу, если не принимать во внимание indentation и сложность (и неоднозначность) синтаксиса YAML.

  1. Fast - Fast to learn, fast to set up—especially considering you don’t need to install extra agents or daemons on all your servers!

Ага, если не учитывать довольно значительное количество значений по умолчанию, которые совершенно не очевидны, если не заглядывать в документацию. Кстати, хорошая оговорка про то, что fast в значении fast to learn/set up (что не вполне верно), но не в значении fast to execute. Исполняются же плейбуки жутко медленно.

  1. Complete - Ansible does three things in one, and does them very well.

Ну да, если не учитывать тот факт, что всякий раз, когда мне надо что-то автоматизировать, мне приходится колхозить либо дополнительные скрипты, либо api вызовы непосредственно из Ansible. Не то, что бы это была беда самого ансибля, конечно, но.

  1. Efficient - No extra software on your servers means more resources for your applications. Also, since Ansible modules work via JSON, Ansible is extensible with modules written in a programming language you already know.

В целом, наверное, правда. ‘Efficient’ as in ‘clientless’.

  1. Secure - Ansible uses SSH, and requires no extra open ports or potentially - vulnerable daemons on your servers.

Ну в целом тоже, наверное, правда. Но ставить в заслугу продукту то, что он работает через безопасный транспорт как-то, не знаю, слишком уж по-хипстерски.

Дальше идет пример с модулем ping.

ansible example -m ping -u [username]

И поясняется:

If everything worked, you should see a message that shows www.example.com | success >>, then the result of your ping.

Это довольно типичный, кстати, пример, который в целом хорошо иллюстрирует то, что мне не нравится в ансибле:

  1. Нигде не упоминается, что это не icmp ping. Я знаю, что в актуальной документации специально оговаривается, что ребята, это не icmp, если хотите icmp то делайте net_ping и проч и проч НО: проблема в том, что этот самый ping не надо было называть в точности так же, как и самую распространенную утилиту диагностики сетевого уровня. Это плохой дизайн, хреновая идея, это запутывает. Еще один пример корневого плохого дизайна это стандартная пара ключей src / dest, которая используется в множестве модулей Ansible. Присмотритесь: не src / dst, но src / dest. Никогда так не делайте.
  2. Нигде (в этом конкретном примере в книге) не упоминается, как эта команда работает и что она действительно делает. Это в целом тоже часть философии Ansible - под капот нужно заглядывать только тогда, когда это действительно необходимо (по мнению архитекторов Ansible). Это, конечно, неправильно.

В официальной документации Ansible все не лучше. Практически каждый модуль документирован так, что приходится лезть в код, чтобы разобраться, что именно происходит и как именно надо этот модуль использовать. Как-то излишне стремно для продукта, который собственно создан для YAML-программистов, которые не должны знать ничего кроме ямла.

При этом сам продукт довольно полезный и в целом, если забить на некоторые оговорки, неплохой - в своей нише и для своих целей. Использую его постоянно, в целом успешно и эффективно (поздняя редакция - потихоньку ухожу в сторону Nornir). Но осадочек присутствует, да.

Ссылки

Следующий
Предыдущий