2016-03-10 2 views
0

Я использую ansistrano-deploy и rvm1-ruby для развертывания приложений Rails, и я хочу, чтобы убедиться, что rvm1-ruby запускается до ansistrano-deployбез Разветвляющихся ansistrano-deploy добавить rvm1-ruby как зависимость.зависимости роль Указание анзибль на уровне PlayBook

Эти роли распределяются между несколькими проектами, и жить в Git подмодулей в моем roles каталоге (я не заинтересован в использовании ansible-galaxy, но я не думаю, что это делает ничего, чтобы помочь этой проблеме):

. 
|--roles 
| |-- rvm1-ruby     [submodule] 
| |-- ansistrano-deploy   [submodule] 
`--main.yml 

В моих main.yml я включил эти роли:

- hosts: all 
    roles: 
    - role: rvm1-ruby 
    - role: ansistrano-deploy 
    tasks: 
    - # ... 

Если мы развертывание приложения Rails, то, очевидно, ansistrano-deploy может зависеть от rvm1-ruby. Я мог бы раскошелиться ansistrano-deploy и добавьте следующие строки в ansistrano-deploy/meta/main.yml:

--- 
dependencies: 
- { role: 'rvm1-ruby' } 

Но в моем случае, я делю на ansistrano-deploy роль на нескольких анзибль playbooks, не все из которых используются для развертывания Rails приложения.

Есть ли способ указать на уровне игровой панели, что rvm1-ruby должен работать до ansistrano-deploy?

ответ

3

У меня нет проблем. В вашем примере игры вы показываете, что вы добавляете обе роли в свою книгу. Но тогда ваш вопрос заключается в том, как вы добавляете роль в качестве зависимости для игры ... Вы хотели убрать rvm1-ruby из плей-листа и запустить ее исключительно как магическую зависимость от ansistrano-deploy?

Это было бы невозможно, если вы не измените meta/main.ymlansistrano-deploy, который вы, конечно, не можете, так как это подмодуль.

Вы можете создать третью роль, которая содержит только meta/main.yml, добавляя обе роли в качестве зависимости.

--- 
dependencies: 
- rvm1-ruby 
- ansistrano-deploy 

Тогда все, что вам нужно добавить в свои плейбуки, - это новая роль. Я использую эту технику в некоторых проектах, в которых множество загрузок можно использовать в разных книгах. Таким образом, у меня есть общая роль dependencies, которая имеет только огромные определения зависимостей в своем meta/main.yml.

Чтобы явно ответить на этот вопрос:

Есть ли способ для меня, чтобы указать, на PlayBook уровне, что rvm1-ruby должны выполняться до ansistrano-deploy?

Только так вы уже это сделали, имея обе роли в правильном порядке, указанные в плей-листах roles.

+0

Действительно. Оказывается, у меня была ошибка в настройке моего репозитория, что означает, что rvm_io.rvm1-ruby не запускался. Я не смог правильно клонировать подмодуль rvm1, и вместо того, чтобы обнаруживать, что я пытался запустить пустую роль, Ansible просто продолжался, как будто ничего не случилось. Я поставлю этот вопрос на закрытие. – ndt

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