variables - practices - ansible set_fact
En ansible, ¿cómo obtengo una variable con el nombre del usuario que ejecuta ansible? (3)
Estoy escribiendo un proceso de implementación que toma el nombre del usuario que ejecuta la secuencia de comandos 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).
Se podría pensar que está disponible en hechos ansibles (por ejemplo, LOGNAME o SUDO_USER), pero todos están configurados como "root" o la identificación de implementación que se utiliza para ssh en el sistema remoto. Ninguno de ellos contiene el usuario local, el que actualmente está ejecutando el proceso ansible.
¿Cómo puedo hacer un script para obtener el nombre del usuario que ejecuta el proceso ansible y usarlo en mi libro de jugadas?
Puse algo como lo siguiente en todas las plantillas:
# Placed here by {{ lookup(''env'',''USER'') }} using Ansible, {{ ansible_date_time.date }}.
Cuando tiene una plantilla, aparece como:
# Placed here by staylorx using Ansible, 2017-01-11.
Si uso
{{ ansible_user_id }}
y me he convertido en root, esa variable indica "root", no lo que quiero la mayor parte del tiempo.
Si
gather_facts
, que está habilitado de forma predeterminada para los libros de jugadas, hay una variable incorporada que se establece llamada
ansible_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: http://docs.ansible.com/playbooks_variables.html#information-discovered-from-systems-facts
Si te refieres al nombre de usuario en el sistema host, imagino que podrías ejecutar una acción local:
- name: get the username running the deploy
become: false
local_action: command whoami
register: username_on_the_host
- debug: var=username_on_the_host
En este ejemplo, la salida del comando
whoami
se registra en una variable llamada "username_on_the_host", y el nombre de usuario estará contenido en
username_on_the_host.stdout
.
(la tarea de depuración no es necesaria aquí, solo muestra el contenido de la variable)