web-dev-qa-db-fra.com

Obtenir le répertoire parent dans Ansible?

Existe-t-il un moyen d'évaluer un chemin relatif dans Ansible?

tasks:
  - name: Run docker containers
    include: tasks/dockerup.yml src_code='..'

Je souhaite essentiellement passer le chemin du code source à ma tâche. Il se trouve que le code source est le chemin parent de {{ansible_inventory}}, mais rien ne semble pouvoir le faire immédiatement.

---- plus d'infos ----

Structure du projet:

myproj
  app
  deploy
    deploy.yml

J'essaie donc d'accéder à app à partir de deploy.yml.

11
Pithikos

Je viens d’examiner la source et de trouver un filtre dont je n’étais pas au courant. Oubliez les opérations de chaîne précédentes, c'est aussi simple que cela:

{{ inventory_dir | dirname }}

Autres filtres utiles


Réponse précédente:

Cela devrait le faire:

{{ inventory_dir.split("/")[0:-1]|join("/") }}

Réponse précédente:

Est-ce que {{ inventory_dir }} fait ce que vous voulez?

Aussi disponible, inventory_dir est le chemin du répertoire contenant le fichier hôte de l’inventaire d’Ansible.

Ou si vous voulez dire par "répertoire parent" le chemin du rôle dans lequel se trouve votre tâche, {{ role_path }} pourrait faire l'affaire.

Et finalement, role_path renverra le nom du chemin du rôle actuel (depuis 1.8). Cela ne fonctionnera que dans un rôle.

De http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts

20
udondan

Vous pouvez utiliser {{playbook_dir}} pour le chemin d'accès absolu à votre cycle de lecture actuel. Pour moi, c’est la meilleure façon, car vous savez normalement où se trouve votre playbook.

2
flxPeters

OK, une solution de contournement consiste à utiliser une tâche distincte uniquement pour cela:

tasks:
  - name: Get source code absolute path
    Shell: dirname '{{inventory_dir}}'
    register: dirname
  - name: Run docker containers
    include: tasks/dockerup.yml src_code={{dirname.stdout}}

Merci à udondan de m'avoir laissé entendre inventory_dir.

0
Pithikos