Ответ 1
Вы можете использовать переменную playbook_dir
.
Есть ли переменная ansible, которая имеет абсолютный путь к текущей исполняемой программе ansible-playbook?
некоторый контекст:
Я запускаю/создаю ANSI-скрипт против localhost
для настройки док-станции mysql и хочу смонтировать объем данных относительно ANSI-сценария.
Например, предположим, что я извлекаю репозиторий для ~/branch1/
, а затем запускаю ansible-playbook dev.yml
, я думал, что это должно сохранить объем в ~/branch1/.docker_volume/
. Если я запустил его с ~/branch2
, он должен настроить громкость на ~/branch2/.docker_volume/
.
Вы можете использовать переменную playbook_dir
.
Кажется, не существует переменной, которая содержит именно то, что вы хотите.
Тем не менее, цитируя документы:
Также доступно,
inventory_dir
- путь к каталогу, в котором хранится Файл хоста инвентаризации Ansibles,inventory_file
- это путь и имя файла, указывающее на файл хоста инвентаризации Ansibles.playbook_dir содержит базовый каталог playbook.
И, наконец,
role_path
вернет путь к текущей роли (так как 1,8). Это будет работать только внутри роли.
В зависимости от вашей настройки, может быть достаточно тех или другого решения $ pwd
-based.
К сожалению, нет. Фактически абсолютный путь является немного бессмысленным (и потенциально запутанным) в контексте того, как работает Ansible. В двух словах, когда вы вызываете playbook, то для каждой задачи Ansible физически копирует модуль, связанный с задачей во временный каталог на целевой машине, а затем вызывает модуль с необходимыми параметрами. Таким образом, абсолютный путь на целевой машине - это всего лишь временная директория, содержащая только несколько временных файлов внутри нее, и в нее даже не входит полноценная playbook. Кроме того, знание полного пути файла на сервере Ansible практически бесполезно на целевой машине, если вы не реплицируете все дерево дерева Ansible в целевые объекты.
Чтобы увидеть все переменные, которые определены Ansible, вы можете просто запустить следующую команду:
$ ansible -m setup hostname
По какой причине вы считаете, что вам нужно знать абсолютный путь к учебнику?
Я использовал подобную игру, чтобы проверить локальные роли:
---
- hosts: localhost
roles:
- role: .
но это перестало работать с Ansible v2.2.
Я отлаживал вышеупомянутое решение
---
- hosts: all
tasks:
- name: Find out playbooks path
shell: pwd
register: playbook_path_output
- debug: var=playbook_path_output.stdout
и он создал мой домашний каталог, а не "текущий рабочий каталог"
Я установил
---
- hosts: all
roles:
- role: '{{playbook_dir}}'
для решения выше.
Для этой цели встроенной переменной не существует, но вы всегда можете узнать абсолютный путь к playbook с помощью команды "pwd" и зарегистрировать ее вывод в переменной.
- name: Find out playbook path
shell: pwd
register: playbook_path_output
- debug: var=playbook_path_output.stdout
Теперь путь доступен в переменной playbook_path_output.stdout.