web-dev-qa-db-fra.com

Variable ayant le chemin vers le ansible-playbook en cours d’exécution?

Existe-t-il une variable ansible qui ait le chemin absolu vers le ansbook-playbook en cours d'exécution?

n peu de contexte: J'exécute/crée un script ansible contre localhost pour configurer un menu fixe mysql et souhaite monter le volume de données par rapport au script ansible.

Par exemple, supposons que j'ai extrait un référentiel dans ~/branch1/, puis que je lance ansible-playbook dev.yml. Je pensais que cela devrait enregistrer le volume sur ~/branch1/.docker_volume/. Si je l'ai lancé à partir de ~/branch2, il devrait alors configurer le volume sur ~/branch2/.docker_volume/.

84
Josh Unger

Vous pouvez utiliser la variable playbook_dir.

146
ctrlok

Il ne semble pas y avoir de variable qui contienne exactement ce que vous voulez.

Cependant, citant la documentation :

Également disponible, inventory_dir est le chemin du répertoire contenant le fichier hôte de l’inventaire d’Ansible, inventory_file est le nom du chemin et le nom du fichier pointant vers le fichier hôte de l’inventaire d’Ansible.

playbook_dir contient le répertoire de base du playbook.

Enfin, role_path renverra le chemin du rôle actuel (depuis la version 1.8). Cela ne fonctionnera que dans un rôle.

Selon votre configuration, celles-ci ou la solution basée sur $ pwd pourraient suffire.

38
Cray

Malheureusement, il n'y en a pas. En fait, le chemin absolu n'a pas beaucoup de sens (et peut-être déroutant) dans le contexte du fonctionnement d'Ansible. En résumé, lorsque vous appelez un playbook, Ansible copie alors physiquement le module associé à la tâche dans un répertoire temporaire de la machine cible, puis appelle le module avec les paramètres nécessaires. Ainsi, le chemin absolu sur la machine cible est juste un répertoire temporaire qui ne contient que quelques fichiers temporaires et ne contient même pas le livre de lecture complet. De plus, connaître le chemin d'accès complet d'un fichier sur le serveur Ansible est quasiment inutile sur un ordinateur cible, à moins de répliquer l'intégralité de l'arborescence de répertoires Ansible sur les cibles.

Pour voir toutes les variables définies par Ansible, vous pouvez simplement exécuter la commande suivante :

$ ansible -m setup hostname

Quelle est la raison pour laquelle vous pensez avoir besoin de connaître le chemin absolu vers le livre de jeu?

1
Bruce P

J'utilisais un livre de jeu comme celui-ci pour tester mes rôles localement:

---
- hosts: localhost
  roles:
     - role: .

mais cela a cessé de fonctionner avec Ansible v2.2.

J'ai débogué la solution susmentionnée de

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      Shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

et il a produit mon répertoire personnel et non le "répertoire de travail actuel"

Je me suis installé avec

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

selon la solution ci-dessus.

1
Andrew Rothstein

Il n'y a pas de variable de construction à cette fin, mais vous pouvez toujours trouver le chemin absolu du livre de jeu avec la commande "pwd" et enregistrer sa sortie dans une variable.

- name: Find out playbook's path
  Shell: pwd
  register: playbook_path_output
- debug: 
  debug: var=playbook_path_output.stdout

Maintenant, le chemin est disponible dans la variable playbook_path_output.stdout

0
hyt