
Я использую Ansiblebecome
функциональность для запуска игр с другим пользователем. Вот пример моего site.yml
:
- hosts: webserver
remote_user: ansible_user
become: true
roles:
- role_a
- role_b
Это работает так, как и ожидалось: Ansible использует ansible_user
для подключения webserver
и sudo
последующего запуска задач в определенных ролях как root
. Однако он запускается sudo
один раз для каждой задачи в каждой из ролей, что приводит к значительным накладным расходам, поскольку выполнение sudo
происходит довольно медленно.
Как настроить Ansible, чтобы его become
конфигурация применялась один раз за воспроизведение, а не один раз за задачу?
решение1
Повышение привилегий возможно только один раз за игру с помощьюМитоген для Ansible.
Из их документации:
Используется одно соединение для каждой цели, в дополнение к одному вызову sudo для каждой учетной записи пользователя. Это намного лучше, чем мультиплексирование SSH в сочетании с конвейеризацией, поскольку между шагами в оперативной памяти может поддерживаться значительное состояние, а системные журналы не засоряются повторными событиями аутентификации.
Mitogen также обеспечивает дополнительные преимущества в производительности при запуске игр, такие как повторное использование интерпретаторов Python.
Однако он не совместим со всеми конфигурациями Ansible, поскольку заменяет значительные части Ansible! Их списки документациизаметные отличия от ванильного Ansible, некоторые из которых могут потребовать внесения изменений в инструкции или сделать их использование совершенно невозможным.