我使用Ansistrano部署php应用程序,我需要在代码更新后使用""挂钩做一些最终任务,包括一些以角色形式创建的任务。
由于该钩子是一个包含,我不知道如何执行某些任务,然后执行一个角色,然后继续执行更多的任务。
在Ansible中,以某种方式可以调用角色形成包含的任务文件吗?
答案 0 :(得分:2)
不,您无法从任务中调用角色。角色只能应用于游戏或作为其他角色的依赖。
如果您的角色不是太复杂,您可以只包含角色的tasks/main.yml
。但是,如果你有角色defaults
,vars
,meta
等,这将无效。如果您使用模板或文件,则可能需要提供相对甚至绝对路径,而不是简单地使用文件或模板的名称。
答案 1 :(得分:1)
您可以在ansistrano.deploy/meta
中指定角色依赖关系,但这只允许您使用Ansistrano指定一个依赖关系步骤,除非您将其拆分为单独的角色。
这正是我建议你做的。我对Capistrano并不熟悉,但通过Ansistrano角色,它主要是通过巧妙地使用变量来为那些更熟悉Capistrano而不是Ansible的人提供另一层抽象。
使用带符号链接的Capistrano部署工作流程和回滚技术创建单独的角色,并按照您指定的顺序调用这些角色的deploy.yml
rollback.yml
个剧本。
这是一个示例剧本,其中包含所有可能的步骤作为角色,但您只需要创建实际使用的那些。
---
- hosts: all
roles:
- pre-setup
- setup
- pre-update
- update-code
- pre-symlink-shared
- symlink-shared
- pre-symlink
- symlink
- pre-cleanup
- cleanup
- post-cleanup
答案 2 :(得分:0)
现在(在Ansible v2.2及更新版本中),您可以将角色包含为include_role module的任务。请参阅使用示例here