首页 > 解决方案 > Play 之间的 Ansible Playbook 错误处理

问题描述

我正在使用剧本来实现以下目标:

值得注意的是,第一步和最后一步必须在 localhost 上运行才能(断开)连接 OpenVPN。

当播放#2(软件安装)出现任何错误时,播放默认中止。然而,这反过来又完全中止了剧本的执行,OpenVPN 连接保持不变,这是不希望的。

我已经在文档中搜索了错误处理,但他们没有指定任何在“播放级别”上进行救援并继续在剧本中进行下一场比赛的方式。

我不能使用blockwithrescue因为这个方法受限于当前正在运行的播放。

我的剧本如下:

- name:                   Connect to OpenVPN-Server
  hosts:                  localhost
  roles:
    - role:               ovpn-connect
      when:               HOSTING_TYPE == 'openvpn'


- name:                   'Setup {{ PRODUCT }} server on {{ HOSTNAME }}'  
  hosts:                  '{{ HOSTNAME }}'
  gather_facts:           no
  roles:    
  - role:                 docker

  - role:                 certbot
    when:                 SSL == 'yes'

  - role:                 {{ PRODUCT }}

  - role:                 seeding
    vars:
      INITIAL_USER:       admin
      INITIAL_PASS:       ***

  - role:                 restore
    when:                 FILENAME is defined and FILENAME != ''

  - role:                 zabbix-agent
    when:                 MONITORING is defined and MONITORING == 'yes'

- name:                   Disconnect from OpenVPN-Server
  hosts:                  localhost
  roles:
    - role:               ovpn-close
      when:               HOSTING_TYPE == 'openvpn'

你们中有人知道我如何克服这个问题吗?

标签: ansible

解决方案


尝试delegate_to,如示例所示

- name: This is my play
  hosts: my-web-server

  tasks:
      - name: Disable pool member for upgrading
        bigip_pool_member:
          pool: foo
          name: "{{ inventory_hostname }}"
          state: disabled
        delegate_to: localhost

      - name: Upgrade the webserver
        apt:
          name: apache2
          state: latest

      - name: Re-enable pool member after upgrading
        bigip_pool_member:
          pool: foo
          name: "{{ inventory_hostname }}"
          state: enabled
        delegate_to: localhost

推荐阅读