Variable qui a le chemin d’access à l’ansible-playbook en cours d’exécution?

Existe-t-il une variable ansible qui a le chemin absolu vers l’ansible-playbook en cours d’exécution?

QUELQUES EDITS …

Qu’est-ce que j’essaye de faire? J’exécute / crée un script ansible contre localhost pour configurer un docker mysql et je souhaite monter le volume de données par rapport au script ansible.

Par exemple, disons que j’ai extrait un repository dans ~/branch1/ et que je lance alors ansible-playbook dev.yml Je pensais qu’il devrait enregistrer le volume dans ~/branch1/.docker_volume/ . Si je l’ai exécuté depuis ~/branch2 il devrait configurer le volume sur ~/branch2/.docker_volume/ .

Je suis encore nouveau chez Ansible. Y a-t-il une meilleure façon?

Vous pouvez utiliser la variable playbook_dir .

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

Cependant, citant les documents :

Egalement disponible, répertoire_inventaire est le chemin du répertoire contenant le fichier hôte d’inventaire d’Ansible, fichier_inventaire est le chemin d’access et le nom du fichier pointant vers le fichier hôte de l’inventaire d’Ansible.

playbook_dir contient le répertoire de base de playbook.

Et enfin, role_path retournera le chemin d’access du rôle actuel (depuis 1.8). Cela ne fonctionnera que dans un rôle.

Selon votre configuration, ces solutions ou la solution basée sur $ pwd pourraient suffire.

J’utilisais un tel livre 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.

Malheureusement, il n’y en a pas. En fait, le chemin absolu est un peu inutile (et potentiellement déroutant) dans le contexte de l’exécution d’Ansible. En bref, lorsque vous invoquez un livret de jeu, Ansible copie physiquement le module associé à la tâche dans un répertoire temporaire sur la machine cible pour chaque tâche, puis appelle le module avec les parameters nécessaires. Ainsi, le chemin absolu sur la machine cible est juste un répertoire temporaire qui ne contient que quelques fichiers temporaires, sans même inclure le playbook complet. De même, connaître le chemin complet d’un fichier sur le serveur Ansible est pratiquement inutile sur une machine cible, sauf si vous répliquez l’intégralité de votre 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 playbook?

Il n’y a pas de variable intégrée à cet effet, mais vous pouvez toujours trouver le chemin absolu du playbook 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 

Le chemin est maintenant disponible dans la variable playbook_path_output.stdout