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/.

63
demandé sur Baptiste Mille-Mathias 2015-06-11 20:13:18

5 réponses

Vous pouvez utiliser playbook_dir variable.

111
répondu ctrlok 2016-02-19 10:51:41

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.

27
répondu Cray 2017-06-21 18:41:57

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?

1
répondu Bruce P 2015-06-11 17:56:53

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.

1
répondu Andrew Rothstein 2016-11-09 13:27:22

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

0
répondu hyt 2015-10-21 08:44:56