在剧本级别指定 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-deploy
的 meta/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
部分中以正确的顺序引用这两个角色。
我正在使用 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-deploy
的 meta/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 beforeansistrano-deploy
?
只有你已经做到的方式,在剧本 roles
部分中以正确的顺序引用这两个角色。