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

Dependencies 在playbook级别指定Ansible角色依赖项,dependencies,ansible,roles,git-submodules,Dependencies,Ansible,Roles,Git Submodules,我正在使用并部署一个Rails应用程序,我想确保rvm1 ruby在ansistrano deploy之前运行,而不需要分叉ansistrano deploy来添加rvm1 ruby --- dependencies: - rvm1-ruby - ansistrano-deploy 这些角色在几个项目之间共享,并且位于我的角色目录中的Git子模块中(我对使用ansible galaxy不感兴趣,但我认为它对解决这个问题没有任何帮助): 在我的main.yml中,我包含了以下角色: - host

我正在使用并部署一个Rails应用程序,我想确保
rvm1 ruby
ansistrano deploy
之前运行,而不需要分叉
ansistrano deploy
来添加
rvm1 ruby

---
dependencies:
- rvm1-ruby
- ansistrano-deploy
这些角色在几个项目之间共享,并且位于我的
角色
目录中的Git子模块中(我对使用
ansible galaxy
不感兴趣,但我认为它对解决这个问题没有任何帮助):

在我的
main.yml
中,我包含了以下角色:

- hosts: all
  roles:
  - role: rvm1-ruby
  - role: ansistrano-deploy
  tasks:
  - # ...
如果我们正在部署Rails应用程序,那么显然,
ansistrano部署
可以依赖于
rvm1 ruby
。我可以分叉
ansistrano-deploy
并将以下内容添加到
ansistrano-deploy/meta/main.yml

---
dependencies:
- { role: 'rvm1-ruby' }
但在我的例子中,我在多个Ansible剧本中共享
ansistrano deploy
角色,并非所有剧本都用于部署Rails应用程序


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

我没有真正理解这个问题。在示例剧本中,您将向剧本中添加这两个角色。但你的问题是,你是如何在剧中添加角色作为依赖项的。。。你的意思是从剧本中删除
rvm1 ruby
,让它作为
ansistrano deploy
的魔法依赖运行吗

除非您修改
ansistrano deploy
meta/main.yml
,否则这是不可能的,因为它是一个子模块

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

---
dependencies:
- rvm1-ruby
- ansistrano-deploy
那么你需要在剧本中增加的就是这个新角色。我在一些项目中使用这种技术,在这些项目中,许多依赖项在剧本中共享。因此,我有一个常见的角色
dependencies
,它的
meta/main.yml
中只有大量的依赖项定义

要明确回答这个问题:

我有没有办法在playbook级别指定
rvm1 ruby
应该在
ansistrano部署之前运行


只有你已经这样做了,在剧本《角色》一节中以正确的顺序引用了两个角色。

我并没有真正理解这个问题。在示例剧本中,您将向剧本中添加这两个角色。但你的问题是,你是如何在剧中添加角色作为依赖项的。。。你的意思是从剧本中删除
rvm1 ruby
,让它作为
ansistrano deploy
的魔法依赖运行吗

除非您修改
ansistrano deploy
meta/main.yml
,否则这是不可能的,因为它是一个子模块

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

---
dependencies:
- rvm1-ruby
- ansistrano-deploy
那么你需要在剧本中增加的就是这个新角色。我在一些项目中使用这种技术,在这些项目中,许多依赖项在剧本中共享。因此,我有一个常见的角色
dependencies
,它的
meta/main.yml
中只有大量的依赖项定义

要明确回答这个问题:

我有没有办法在playbook级别指定
rvm1 ruby
应该在
ansistrano部署之前运行


只有你已经这样做了,在剧本《角色》一节中以正确的顺序引用两个角色。

的确如此。事实证明,我的存储库设置有一个错误,这意味着rvm_io.rvm1-ruby没有运行。我未能正确克隆rvm1子模块,并且没有检测到我试图运行一个空角色,Ansible只是继续,好像没有什么问题。我会把这个问题标记为结束。真的。事实证明,我的存储库设置有一个错误,这意味着rvm_io.rvm1-ruby没有运行。我未能正确克隆rvm1子模块,并且没有检测到我试图运行一个空角色,Ansible只是继续,好像没有什么问题。我将标记此问题以关闭。