在playbook级别指定Ansible角色依赖项

时间:2016-03-10 20:34:02

标签: dependencies ansible roles git-submodules

我正在使用ansistrano-deployrvm1-ruby来部署Rails应用程序,我想确保在rvm1-ruby 之前运行ansistrano-deploy而不使用分叉ansistrano-deployrvm1-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之前运行?

1 个答案:

答案 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部分中引用正确顺序的两个角色。