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: no
para asegurarse de que no intente sudo antes de ejecutar ellocal_action
become: no
obecome: 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_when
no 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_id
que 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_action
como lo explica @Ramon.{{ansible_user_id}}
termina siendo "root" si ustedbecome:yes
ansible_user_id
no 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
vars
secció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