在剧本级别指定 Ansible 角色依赖项

Specifying Ansible role dependencies at playbook level

我正在使用 ansistrano-deploy and 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。我可以 fork ansistrano-deploy 并将以下内容添加到 ansistrano-deploy/meta/main.yml:

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

但就我而言,我在多个 Ansible 剧本中共享 ansistrano-deploy 角色,并非所有剧本都用于部署 Rails 应用程序。

有没有办法让我在剧本级别指定 rvm1-ruby 应该 运行 在 ansistrano-deploy 之前?

我没有真正理解问题。在您的示例剧本中,您展示了将这两个角色添加到您的剧本中。但是你的问题是你如何将角色添加为剧本的依赖......你是否打算从剧本中删除 rvm1-ruby 并将其 运行 仅作为 [=12= 的魔法依赖]?

这是不可能的,除非你修改 ansistrano-deploymeta/main.yml,你当然不能,因为它是一个子模块。

您可以创建第三个角色,它只包含 meta/main.yml 添加两个角色作为依赖。

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

那么您需要添加到您的剧本中的就是这个新角色。我在一些跨剧本共享大量依赖项的项目中使用了这种技术。所以我有一个共同的角色 dependencies,它在 meta/main.yml.

中只有一个巨大的依赖定义

要明确回答这个问题:

Is there a way for me to specify, at the playbook-level, that rvm1-ruby should run before ansistrano-deploy?

只有你已经做到的方式,在剧本 roles 部分中以正确的顺序引用这两个角色。