从Ansible中包含的任务文件中调用角色

时间:2016-02-03 11:12:48

标签: ansible ansible-playbook

我使用Ansistrano部署php应用程序,我需要在代码更新后使用""挂钩做一些最终任务,包括一些以角色形式创建的任务。

由于该钩子是一个包含,我不知道如何执行某些任务,然后执行一个角色,然后继续执行更多的任务。

在Ansible中,以某种方式可以调用角色形成包含的任务文件吗?

3 个答案:

答案 0 :(得分:2)

不,您无法从任务中调用角色。角色只能应用于游戏或作为其他角色的依赖。

如果您的角色不是太复杂,您可以只包含角色的tasks/main.yml。但是,如果你有角色defaultsvarsmeta等,这将无效。如果您使用模板或文件,则可能需要提供相对甚至绝对路径,而不是简单地使用文件或模板的名称。

答案 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