Ansible 始终运行角色

Lok*_*a S 5 ansible ansible-2.x ansible-role

有什么办法可以一直运行一个角色吗?我在开始任何部署之前创建锁定文件以防止并行部署。如果发生任何失败/成功,我想删除锁定文件。

- { role: lock-deployment, tags: always }
- { role: fetch-artifactory, tags: always }
- { role: unlock-deployment, tags: always }
Run Code Online (Sandbox Code Playgroud)

我想运行解锁部署角色,无论失败/成功。

tec*_*raf 5

问题是我不想为每项任务都进行阻止、救援。我只想删除锁定文件,以防任何任务失败。我尝试环顾四周是否可以将角色本身放入块中,但没有找到任何东西。参考

可以block与构造一起使用always。角色可以包含在include_role

tasks:
  - include_role:
      name: lock-deployment
  - block:
    - include_role:
        name: fetch-artifactory
    always:
      - include_role:
          name: unlock-deployment
Run Code Online (Sandbox Code Playgroud)

这会产生您想要的流程(fetch-artifactory包含fail模拟失败的任务):

PLAY [localhost] ***************************************************************************************

TASK [include_role] ************************************************************************************

TASK [lock-deployment : file] **************************************************************************
changed: [localhost]

TASK [include_role] ************************************************************************************

TASK [fetch-artifactory : fail] ************************************************************************
Unaltered: {'msg': u'Failed as requested from task', 'failed': True, 'changed': False}
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Failed as requested from task"}

TASK [include_role] ************************************************************************************

TASK [unlock-deployment : file] **********************************************************************
changed: [localhost]
Run Code Online (Sandbox Code Playgroud)