web-dev-qa-db-fra.com

Dans ansible, comment puis-je obtenir une variable avec le nom de l'utilisateur exécutant ansible?

J'écris un processus de déploiement qui prend le nom de l'utilisateur exécutant le script ansible (par exemple, tlau) et crée un répertoire de déploiement sur le système distant en fonction de ce nom d'utilisateur et de la date et de l'heure actuelles (par exemple, tlau-deploy-2014-10 -15-16: 52).

Vous penseriez que cela est disponible dans plusieurs faits (par exemple, LOGNAME ou Sudo_USER), mais ceux-ci sont tous définis sur "root" ou sur l'ID de déploiement utilisé pour ssh dans le système distant. Aucun de ceux-ci ne contient l'utilisateur local, celui qui exécute actuellement le processus ansible.

Comment puis-je créer un script pour obtenir le nom de l'utilisateur exécutant le processus ansible et l'utiliser dans mon livre de jeu?

57
Tessa Lau

Si vous parlez du nom d'utilisateur sur le système hôte, j'imagine que vous pouvez simplement exécuter une action locale:

- name: get the username running the deploy
  become: false
  local_action: command whoami
  register: username_on_the_Host

- debug: var=username_on_the_Host

Dans cet exemple, la sortie de la commande whoami est enregistrée dans une variable appelée "username_on_the_Host", et le nom d'utilisateur sera contenu dans username_on_the_Host.stdout.

(la tâche de débogage n'est pas requise ici, elle montre simplement le contenu de la variable)

56
Ramon de la Fuente

Si vous gather_facts, activé par défaut pour les playbooks, il existe une variable intégrée définie comme ansible_user_id qui fournit le nom d'utilisateur sous lequel les tâches sont exécutées. Vous pouvez ensuite utiliser cette variable dans d'autres tâches ou modèles avec {{ ansible_user_id }}. Cela vous éviterait d'exécuter une tâche pour enregistrer cette variable.

Voir: http://docs.ansible.com/playbooks_variables.html#information-discovered-from-systems-facts

81
Tony Cesaro

Je mets quelque chose comme ce qui suit dans tous les modèles:

# Placed here by {{ lookup('env','USER') }} using Ansible, {{ ansible_date_time.date }}.

Lorsque vous modélisez dessus, il apparaît comme suit:

# Placed here by staylorx using Ansible, 2017-01-11.

Si j'utilise {{ ansible_user_id }} et je suis devenu root alors cette variable indique "root", pas ce que je veux la plupart du temps.

32
staylorx