Ответ 1
Для Ansible 2 я создал роль Galaxy: https://galaxy.ansible.com/udondan/ssh-reconnect/
Использование:
- name: add user to docker group
user: name=USERNAME groups=docker append=yes
sudo: true
notify:
- Kill all ssh connections
Если вам сразу нужна новая группа, вы можете либо вызвать модуль самостоятельно:
- name: Kill own ssh connections
ssh-reconnect: all=True
Или, наоборот, загорать обработчики при необходимости
- meta: flush_handlers
Для Ansible < 1.9 см. Этот ответ:
Используете ли вы ssh-контроллеры? Если вы активировали ControlMaster
в вашей конфигурации ssh, это объясняет поведение. Ansible re-connects для каждой задачи, поэтому пользователь должен иметь правильную роль, назначенную для следующей задачи. Хотя, когда вы используете совместное использование ssh, Ansible, конечно же, повторно использует открытое ssh-соединение и, следовательно, приводит к невозможности входа в систему снова.
Вы можете деактивировать сеанс обмена в ansible.cfg
:
[ssh_connection]
ssh_args= -S "none"
Поскольку сеансовое общение - это хорошая вещь, чтобы ускорить Безупречные игры, есть альтернатива. Запустите задачу, которая убивает все ssh-соединения для вашего текущего пользователя.
- name: add user to docker group
user: name=USERNAME groups=docker append=yes
sudo: true
register: user_task
- name: Kill open ssh sessions
shell: "ps -ef | grep sshd | grep `whoami` | awk '{print \"kill -9\", $2}' | sh"
when: user_task | changed
failed_when: false
Это заставит Ansible снова войти в систему при следующей задаче.