ansible - Play 之间的 Ansible Playbook 错误处理
问题描述
我正在使用剧本来实现以下目标:
- 通过 OpenVPN 将 localhost 连接到远程网络
- 将软件包安装到远程网络中的远程主机
- 断开 localhost 与 OpenVPN 的连接
值得注意的是,第一步和最后一步必须在 localhost 上运行才能(断开)连接 OpenVPN。
当播放#2(软件安装)出现任何错误时,播放默认中止。然而,这反过来又完全中止了剧本的执行,OpenVPN 连接保持不变,这是不希望的。
我已经在文档中搜索了错误处理,但他们没有指定任何在“播放级别”上进行救援并继续在剧本中进行下一场比赛的方式。
我不能使用block
withrescue
因为这个方法受限于当前正在运行的播放。
我的剧本如下:
- 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'
你们中有人知道我如何克服这个问题吗?
解决方案
尝试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
推荐阅读
- sql-server - 如何将派生类添加到存储库
- angular - 减少 ngModel 函数绑定的负载
- python - Python:简单的 4 数求解器?
- c# - Dapper 可以映射包含破折号的枚举值吗?
- rest - 如何暂停http post请求直到聚合完成?
- python-3.x - 如何为构成最小生成树的图的边缘着色
- javascript - 在 EJS 模板中过滤
- node.js - 如何在查找方法猫鼬中运行多个查询?
- simulation - 如何在总线上没有连接真实 ECU 的情况下在 CANoe 中模拟单通道 CAN 网络?
- python - LeetCode“您可以从卡片中获得的最大积分”python 代码不起作用,我需要说明原因