Ansible总是扮演角色

时间:2017-11-30 14:00:09

标签: ansible ansible-2.x ansible-role

有没有办法一直运行一个角色?我在开始之前创建锁文件  任何防止并行部署的部署。如果有任何失败/成功我  想删除锁文件。

- { role: lock-deployment, tags: always }
- { role: fetch-artifactory, tags: always }
- { role: unlock-deployment, tags: always }

我想运行解锁部署角色而不管失败/成功。

3 个答案:

答案 0 :(得分:3)

  问题是我不想做阻止,为每项任务进行救援。我只是想在任何任务失败的情况下删除锁文件。我试着四处寻找角色本身是否可以被阻止,但没有找到任何东西。 ref

可以使用block构建always。角色可以包含在include_role中:

tasks:
  - include_role:
      name: lock-deployment
  - block:
    - include_role:
        name: fetch-artifactory
    always:
      - include_role:
          name: unlock-deployment

这会产生您想要的流量(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]

答案 1 :(得分:0)

您可以在这种情况下使用Ansible 阻止始终

http://docs.ansible.com/ansible/latest/playbooks_blocks.html

答案 2 :(得分:0)

如何使用block并包含角色中的yaml文件,而不是将角色声明为依赖项:

tasks:
  - name: "start deployment"
    block:
      - include: "<path to roles>/lock-deployment/tasks/main.yaml"
      - include: "<path to roles>/fetch-artifactory/tasks/main.yaml"
      - include: "<path to roles>/unlock-deployment/tasks/main.yaml"
    always:
      - name: "remove lock file"
        ...

如果您需要在default中添加roles个变量,可以执行以下操作:

roles:
  - { role: lock-deployment,
      when: False
    }

我的解决方案不是一个优雅的解决方案,但我真的建议您从roles转移到那些行为,然后转而includes

另外:我没有测试过解决方案,可能实际上没有用。但它提出了替代解决方案的想法。