2013-10-15 6 views
6

В моей PlayBook я бегу local_action, который выполняет сценарий и сохраняет значение для будущего использования:Получение каталога файла задач для относительных путей

- local_action: command python release.py 
    register: release_url 

Это работало замечательно, пока я не переехал мой сборник пьес в подкаталог. Оказывается, что команда запускается из текущего рабочего каталога (запускать анзибль из), так что путь должен выглядеть следующим образом:

- local_action: command python roles/ghost/release.py 

У меня есть структура каталогов, как показано ниже:

  • group_vars/
  • роли/
    • призрак/
      • задачи/
        • main.yml
      • шаблоны/
      • release.py
  • site.yml

Однако роли/призрак имя папки можно изменить (и жесткое кодирование это не позволит вам запустить playbook из другого каталога).

Как я могу получить путь к каталогам задач/main.yml (который вызывает команду local_action), поэтому я могу дать относительный путь к нему?

ответ

2

Вы можете поставить release.py сценарий ролей/призрак/файлов /, а затем использовать его с local_action

- name: local scrpt 
    local_action: script release.py 

И таким образом вам не нужно, чтобы получить путь к каталогу

Это делает ссылку для этого в макете Справочника каталога http://www.ansibleworks.com/docs/playbooks_best_practices.html

0

Я отправил pull request, прежде чем я увидел этот вопрос, но вот суть его.

  1. Переместить скрипт в каталог «файлы» в роли
  2. Поскольку мы не можем знать, какой путь сценарий будет, скопируйте его в/TMP:

    - name: copy ghost release script to tmp 
        local_action: copy src=release.py dest=/tmp/release.py 
        sudo: no 
    
  3. Затем мы можем запустить сценарий

    - name: get ghost release version 
        local_action: command python /tmp/release.py 
        register: ghost_release 
        sudo: no 
    

Выберем sudo: no в случае, если внешний playbook устанавливает его по всему миру на on. Для этого действия нам не нужен root, и он может разорвать незаметный прогон, если ему нужно запросить пароль.

Также может быть лучший способ сделать шаг 2, рандомизировав имя файла каким-либо образом, используя факт, а затем удалив файл на дополнительном этапе после того, как мы запустим скрипт. Это может свести к минимуму риск, связанный с тем, что потенциально может быть файл с именем /tmp/release.py.

5

As of ansible 1.8, there's a role_path variable defined который вы можете использовать для этой цели.

+0

'Ошибка:« role_path »не определено' Кажется, что это может использоваться только в ролях, а не в командах –

Смежные вопросы