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)
我想运行解锁部署角色,无论失败/成功。
问题是我不想为每项任务都进行阻止、救援。我只想删除锁定文件,以防任何任务失败。我尝试环顾四周是否可以将角色本身放入块中,但没有找到任何东西。参考
您可以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)