Переменная, которая имеет путь к текущему ansible-playbook, который выполняется?

есть ли переменная ansible, которая имеет абсолютный путь к текущей исполняемой книге ansible-playbook?

контекст: Я запускаю / создаю Ansible скрипт против localhost для настройки MySQL docker и для монтирования тома данных относительно сценария ansible.

например, предположим, что я проверяю репозиторий на ~/branch1/ и тогда я бегу ansible-playbook dev.yml Я думал, что он должен сохранить объем до ~/branch1/.docker_volume/. Если я бежал из ~/branch2 тогда он должен настроить громкость на ~/branch2/.docker_volume/.

5 ответов


можно использовать playbook_dir переменной.


кажется, нет переменной, которая содержит именно то, что вы хотите.

со ссылкой документы:

также доступна, inventory_dir - Это путь к каталог Файл инвентаризации Ansible,inventory_file - это путь и имя файла, указывающее на файл узла инвентаризации Ansible.

playbook_dir содержит каталог базы playbook.

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

зависит от вашей установки, те или $ pwd решение может быть достаточно.


к сожалению, нет. На самом деле абсолютный путь немного бессмыслен (и потенциально запутан) в контексте того, как работает Ansible. Короче говоря, при вызове playbook для каждой задачи Ansible физически копирует модуль, связанный с задачей, во временный каталог на целевой машине, а затем вызывает модуль с необходимыми параметрами. Таким образом, абсолютный путь на целевой машине - это просто временный каталог, содержащий только несколько временных файлов внутри него, и он даже не включает в себя полный playbook. Кроме того, знание полного пути к файлу на сервере Ansible практически бесполезно на целевой машине, если вы не реплицируете все дерево каталогов Ansible на цели.

чтобы увидеть все переменные, определенные Ansible, вы можете просто запустить следующую команду:

$ ansible -m setup hostname

по какой причине вы думаете, что нужно знать абсолютный путь к книге?


я использовал playbook как это, чтобы проверить свои роли локально:

---
- 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's path
  shell: pwd
  register: playbook_path_output
- debug: 
  debug: var=playbook_path_output.stdout

теперь путь доступен в переменной playbook_path_output.стандартный вывод