Получить родительский каталог в Ansible?

Есть ли способ оценить относительный путь в Ansible?

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

По сути, я заинтересован в передаче пути исходного кода к моей задаче. Бывает, что исходный код является родительским путем {{ansible_inventory}}, но, похоже, ничего не может сделать для этого из коробки.

---- Дополнительная информация ----

Структура проекта:

myproj
  app
  deploy
    deploy.yml

Итак, я пытаюсь получить доступ к app из deploy.yml.

Ответ 1

Я только что посмотрел на источник и нашел фильтр, о котором не знал. Забудьте предыдущие строковые операции, это так просто:

{{ inventory_dir | dirname }}

Другие полезные фильтры


Предыдущий ответ:

Это должно сделать это:

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

Предыдущий ответ:

{{ inventory_dir }} делает то, что вы хотите?

inventory_dir является путем к каталогу, содержащему файл инвентаризации Ansibles.

Или, если вы подразумеваете под "родительским каталогом" путь роли, в которой находится ваша задача, {{ role_path }} может помочь.

И, наконец, role_path вернет путь к текущей роли (начиная с версии 1.8). Это будет работать только внутри роли.

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

Ответ 2

Вы можете использовать {{playbook_dir}} для абсолютного пути к текущему запуску проигрывателя. Для меня это лучший способ, потому что вы обычно знаете, где находится ваша тетрадь.

Ответ 3

ОК, обходным путем является использование отдельной задачи только для этого:

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}}

Спасибо udondan за то, что он намекнул мне на inventory_dir.