我正在使用ansistrano-deploy和rvm1-ruby来部署Rails应用程序,我想确保在rvm1-ruby
之前运行ansistrano-deploy
而不使用分叉ansistrano-deploy
将rvm1-ruby
添加为依赖项。
这些角色在多个项目之间共享,并且存在于我的roles
目录中的Git子模块中(我对使用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' }
但就我而言,我在多个Ansible手册中共享ansistrano-deploy
角色,而不是所有这些角色都用于部署Rails应用程序。
我是否有办法在Playbook级别指定rvm1-ruby
应该在ansistrano-deploy
之前运行?
答案 0 :(得分:3)
我并没有真正解决问题。在您的示例剧本中,您将显示将两个角色添加到您的剧本中。但是你的问题是如何将角色添加为游戏的依赖...你是不是要从剧本中删除rvm1-ruby
并让它仅仅作为ansistrano-deploy
的魔法依赖?
除非你修改meta/main.yml
的{{1}},否则这是不可能的,你当然不能,因为它是一个子模块。
您可以创建第3个角色,该角色仅包含ansistrano-deploy
,将两个角色都添加为依赖项。
meta/main.yml
然后你需要添加到你的剧本中的是新角色。我在一些项目中使用这种技术,其中许多依赖项在Playbooks中共享。所以我有一个共同的角色---
dependencies:
- rvm1-ruby
- ansistrano-deploy
,它的dependencies
只有一个巨大的依赖关系定义。
明确回答这个问题:
我是否有办法在Playbook级别指定
meta/main.yml
应该在rvm1-ruby
之前运行?
只有你已经这样做的方式,通过在剧本ansistrano-deploy
部分中引用正确顺序的两个角色。