tutorial tower source playbook open example ansible

tower - ansible tutorial



Crear y usar grupo sin reiniciar (4)

Intenta eliminar la carpeta de socket durante la reproducción, funciona de mi lado (no sé si es la solución más fina). Curiosamente, meta: reset_connection no funciona con Ansible 2.4

- name: reset ssh connection local_action: module: file path: "~/.ansible/cp" state: absent

Tengo una tarea, eso crea un grupo.

- name: add user to docker group user: name=USERNAME groups=docker append=yes sudo: true

En otro libro de jugadas, necesito ejecutar un comando que se basa en tener el permiso del nuevo grupo. Lamentablemente, esto no funciona porque el nuevo grupo solo se carga después de que cierre sesión y vuelva a iniciar sesión.

He intentado algunas cosas como:

su -l USERNAME

o

newgrp docker; newgrp

Pero nada funcionó. ¿Hay algún cambio para obligar a Ansible a reconectarse con el host y hacer un relogin? Un reinicio sería la última opción.


Otra opción que he encontrado sería utilizar async: para poner en cola la destrucción de sshd en segundo plano, sin depender de una conexión abierta. Se siente increíblemente raro, pero parece funcionar de manera confiable tanto en Ansible 1.9 como en 2.0.

- name: Kill SSH shell: sleep 1; pkill -u {{ ansible_ssh_user }} sshd async: 3 poll: 2

Pausa por 1 segundo, luego mata sshd . Comience a verificar que el trabajo esté terminado después de 2 segundos, el tiempo máximo permitido es de 3 segundos. En mis pruebas limitadas, parece resolver el problema de actualizar los grupos de usuarios actuales con solo un retraso mínimo.


Para Ansible 2 creé un rol de Galaxy: https://galaxy.ansible.com/udondan/ssh-reconnect/

Uso:

- name: add user to docker group user: name=USERNAME groups=docker append=yes sudo: true notify: - Kill all ssh connections

Si necesita inmediatamente el nuevo grupo, puede llamar al módulo usted mismo:

- name: Kill own ssh connections ssh-reconnect: all=True

O, alternativamente, ejecute los controladores cuando sea necesario

- meta: flush_handlers

Para Ansible <1.9 ver esta respuesta:

¿Usas tomas de control ssh? Si tiene ControlMaster activado en su configuración ssh, esto explicaría el comportamiento. Ansible se vuelve a conectar para cada tarea, por lo que el usuario debe tener el rol correcto asignado en la siguiente tarea. Sin embargo, cuando utiliza el uso compartido de sesiones de ssh, Ansible volvería a utilizar la conexión abierta ssh y, por lo tanto, no volverá a iniciar sesión.

Puede desactivar la sesión compartida en su ansible.cfg :

[ssh_connection] ssh_args= -S "none"

Dado que compartir la sesión es bueno para acelerar las jugadas de Ansible, existe una alternativa. Ejecuta una tarea que mata todas las conexiones ssh para tu usuario actual.

- 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

Esto obligará a Ansible a volver a iniciar sesión en la siguiente tarea.


Para la versión 2.3 o posterior de Ansible, use el meta: reset_connection :

- user: name={{ansible_user}} groups=input - name: reset ssh connection to allow user changes to affect ''current login user'' meta: reset_connection