Estoy escribiendo un proceso de implementación que toma el nombre del usuario que ejecuta el script ansible (por ejemplo, tlau) y crea un directorio de implementación en el sistema remoto basado en ese nombre de usuario y la fecha / hora actual (por ejemplo, tlau-deploy-2014-10 -15-16: 52).
Usted pensaría que esto está disponible en datos ansible (por ejemplo, LOGNAME o SUDO_USER), pero todos están configurados como "root" o la identificación de implementación que se usa para ssh en el sistema remoto. Ninguno de ellos contiene el usuario local, el que actualmente está ejecutando el proceso ansible.
¿Cómo puedo obtener un script para obtener el nombre del usuario que ejecuta el proceso ansible y usarlo en mi libro de jugadas?
fuente

sudo: nopara asegurarse de que no intente sudo antes de ejecutar ellocal_actionbecome: noobecome: false. Pero por lo demás un buen consejo, ¡gracias!changed=1? Además, ¿se puede utilizar la delegación de hechos?change_when: False( docs.ansible.com/ansible/… )changed_whenno lo eschange_when. Solo me mordió esto.Si usted
gather_facts, que está habilitado de forma predeterminada para los libros de jugadas, hay una variable incorporada que se establece llamadaansible_user_idque proporciona el nombre de usuario con el que se ejecutan las tareas. Luego puede usar esta variable en otras tareas o plantillas con{{ ansible_user_id }}. Esto le ahorraría el paso de ejecutar una tarea para registrar esa variable.Ver: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables-discovered-from-systems-facts
fuente
remote_user, no el usuario en la máquina host. Para obtener el nombre de usuario en la máquina host, no veo una alternativa alocal_actioncomo lo explica @Ramon.{{ansible_user_id}}termina siendo "root" si ustedbecome:yesansible_user_idno no parecen llegar a ser incluso con raízbecome: yes.Puse algo como lo siguiente en todas las plantillas:
Cuando se aplica una plantilla, aparece como:
Si uso
{{ ansible_user_id }}y me he convertido en root, esa variable indica "root", no lo que quiero la mayor parte del tiempo.fuente
varssección. Así: `` `- hosts: xxx collect_facts: no vars: user:" {{lookup ('env', 'USER')}} "` ``Esto lee el nombre de usuario del sistema remoto, porque no se garantiza que los nombres de usuario en el sistema local y remoto sean los mismos. Es posible cambiar el nombre en la configuración SSH.
fuente
si desea obtener el usuario que ejecuta la plantilla en ansible tower, puede usar esta var {{tower_user_name}} en su libro de jugadas, pero solo se define en ejecuciones manuales
tower_user_name: el nombre de usuario del usuario de Tower que inició este trabajo. Esto no está disponible para devoluciones de llamada o trabajos programados.
consulte estos documentos https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html
fuente