Variable qui a le chemin d'accès à l'Ansible-playbook en cours d'exécution?
Existe-t-il une variable ansible qui a le chemin absolu vers le playbook Ansible en cours d'exécution?
Certains contexte:
Je cours / crée un script ansible contre localhost
pour configurer un docker mysql et vouloir monter le volume de données par rapport au script ansible.
Par exemple, disons que j'ai extrait un référentiel à ~/branch1/
et puis je lance ansible-playbook dev.yml
je pensais qu'il devrait enregistrer le volume à ~/branch1/.docker_volume/
. Si je l'ai couru à partir de ~/branch2
alors il devrait configurer le volume à ~/branch2/.docker_volume/
.
5 réponses
Il ne semble pas y avoir de variable qui contient exactement ce que vous voulez.
Cependant, en citant les documents :
Également disponible,
inventory_dir
est le chemin d'accès du répertoire Le fichier hôte d'inventaire d'Ansible,inventory_file
est le chemin nom de fichier pointant vers le fichier hôte d'inventaire de L'Ansible.Playbook_dir contient le répertoire de base du playbook.
Et enfin, {[2] } renverra le chemin du rôle actuel (depuis 1.8). Cela ne fera que travail à l'intérieur d'un rôle.
Dépendant de votre configuration, ceux-ci ou la solution basée sur $ pwd
pourraient suffire.
Malheureusement, il n'y en a pas. en fait, le chemin absolu est un peu dénué de sens (et potentiellement déroutant) dans le contexte de la façon dont Ansible fonctionne. En un mot, lorsque vous appelez un playbook puis pour chaque tâche Ansible copie physiquement le module associé à la tâche dans un répertoire temporaire sur 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 dans il, et il ne comprend même pas le playbook complet. En outre, connaître un chemin complet d'un fichier sur le serveur Ansible est à peu près 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 qui sont 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?
J'utilisais un playbook 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"
J'ai réglé avec
---
- hosts: all
roles:
- role: '{{playbook_dir}}'
Par la solution ci-dessus.
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
Maintenant, le chemin est disponible dans la variable playbook_path_output.stdout