Pull to refresh

Comments 6

Внимание: если вы работаете с несколькими идентичными средами с одной управляющей машины (blue/green развертывания, stage/prod), убедитесь, что не выстрелите себе в ногу! Если, к примеру, вы сначала скачали актуальные настройки с прода и следующим шагом хотите обновить тестовую среду новой версией компонентов, а SSH-сокеты остались открытыми от прода, то ой… Так что нужно либо делать ControlPath у этих сред разный, либо принудительно закрывать мастер-сессии или удалять сокеты перед началом работы с другой средой.

Просто используйте разные сокеты, например ControlPath ~/.ssh/master-%r@%h:%p.

Верно, я и обратил внимание на это: делать ControlPath у этих сред разный.


В проектах, где для разных сред хосты называются идентично (workerN, dbN, и т.д.), а отличаются лишь IP-адреса bastion-хостов, через которые пробрасываются ssh-подключения – имена сокетов по шаблону ~/.ssh/master-%r@%h:%p как раз не зависят от рабочей среды и инженер может попасть в описанную ситуацию! В таком случае правильнее в inventory для конкретной среды указывать шаблоны с разными префиксами (например, ~/.ssh/prod-%r@%h:%p). Либо (по аналогии с virtual env) делать разное окружения для запуска Ansible – выставлять ANSIBLE_SSH_CONTROL_PATH и выводить значение текущего окружения в prompt – меньше вероятности, что инженер запустит плейбуки не на тех серверах.

Callback'и для профилирования скорее нужны для задач поиска узких мест. Мне для теста нужно было общее время + примитивная агрегация между повторными запусками. Для callback'ов (там есть общее время выполнения) все равно пришлось бы делать агрегацию – решил воспользоваться готовой реализацией для стандартной утилиты time. Для хардкорного профилирования (когда нужно отличать, где именно тормозит – в модуле, в соединении или во внутренностях ansible) можно использовать ANSIBLE_DEBUG=1 – тогда весь низкоуровневый вывод маркируется временнЫми штампами.

Подскажите пожалуйста как лучше добавлять общие модули (например, добавление администраторов) на большое кол-во серверов (около 600) через Ansile?
Может ли Ansible вкладывать одни модули в другие модули?
Sign up to leave a comment.