播放之间的Ansible Playbook错误处理

播放之间的Ansible Playbook错误处理,ansible,Ansible,我正在使用剧本实现以下目标: 通过OpenVPN将本地主机连接到远程网络 将软件包安装到远程网络中的远程主机 断开本地主机与OpenVPN连接的连接 值得注意的是,第一步和最后一步必须在本地主机上运行,才能(dis-)连接OpenVPN 当播放#2(软件安装)中出现任何错误时,按照默认设置,播放将中止。 但是,这反过来会完全中止playbook的执行,OpenVPN连接保持不变,这是不需要的 我已经搜索了错误处理,但他们没有指定任何在“游戏级别”上进行解救并继续剧本中的下一个游戏的方法 我不

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

  • 通过OpenVPN将本地主机连接到远程网络
  • 将软件包安装到远程网络中的远程主机
  • 断开本地主机与OpenVPN连接的连接
值得注意的是,第一步和最后一步必须在本地主机上运行,才能(dis-)连接OpenVPN

当播放#2(软件安装)中出现任何错误时,按照默认设置,播放将中止。 但是,这反过来会完全中止playbook的执行,OpenVPN连接保持不变,这是不需要的

我已经搜索了错误处理,但他们没有指定任何在“游戏级别”上进行解救并继续剧本中的下一个游戏的方法

我不能将
block
rescue
一起使用,因为此方法仅限于当前正在运行的播放

我的剧本如下:

- 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'


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

试着像下面的例子一样

- 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

AFAIK失败时,只能设置为角色和任务,不能设置为整个播放。确定。现在我明白了。。您正在使用3个播放,因为每个播放都有不同的主机(1、3在本地主机中,第2个播放在远程主机中)。。为此,我建议您使用delegate_to。请参阅我的答案,其中更新了代表的示例。。