Ansible如何在任务失败或无法访问主机时创建XML文件或exec外壳脚本

Ansible如何在任务失败或无法访问主机时创建XML文件或exec外壳脚本,ansible,Ansible,我已经写了一本剧本,其中介绍了备份网络设备的配置。我的剧本已经完成了 - name: run backup configuration hosts: HOST_NAME gather_facts: no connection: local vars: date: "{{ lookup('pipe', 'date +%Y%m%d') }}" backup_dir: "/backup/backup-{{ date }}" cli: host: "{

我已经写了一本剧本,其中介绍了备份网络设备的配置。我的剧本已经完成了

- name: run backup configuration
  hosts: HOST_NAME
  gather_facts: no
  connection: local
  vars:
    date: "{{ lookup('pipe', 'date +%Y%m%d') }}"
    backup_dir: "/backup/backup-{{ date }}"
    cli:
      host: "{{ ansible_host }}"
      username: <username>
      password: <password>
  tasks:
    - sros_command:
        commands: <command backup>
        provider: "{{ cli }}"
      register: config

    - copy:
        content: "{{ config.stdout[0] }}"
        dest: "{{ backup_dir }}/backup_conf-{{ inventory_hostname }}.txt"
-名称:运行备份配置
主机:主机名
收集事实:不
连接:本地
变量:
日期:“{lookup('pipe',date+%Y%m%d')}”
备份目录:“/backup/backup-{{date}”
cli:
主机:{{ansible_host}}”
用户名:
密码:
任务:
-sros_命令:
命令:
提供程序:“{{cli}}”
寄存器:config
-副本:
内容:“{config.stdout[0]}”
dest:{{backup_dir}}/backup_conf-{{inventory_hostname}}.txt”
但在主机无法访问或无法运行备份命令或任务时失败。如果出现这种情况,我们可以编写剧本来创建XML或exec shell脚本吗?因为我必须向监控工具发出警报

请帮忙提建议


谢谢

您可以在播放、阻止或任务级别使用
忽略错误
忽略不可访问
关键字。这将允许播放继续,并且您可以将注册结果用作未来任务的条件

例如(在游戏级别):

-名称:运行备份配置
主机:主机名
收集事实:不
连接:本地
忽略错误:是
忽略无法访问的内容:是
变量:
日期:“{lookup('pipe',date+%Y%m%d')}”
备份目录:“/backup/backup-{{date}”
cli:
主机:{{ansible_host}}”
用户名:
密码:
任务:
-sros_命令:
命令:
提供程序:“{{cli}}”
寄存器:config
- 
当:config.unreachable
-副本:
内容:“{config.stdout[0]}”
dest:{{backup_dir}}/backup_conf-{{inventory_hostname}}.txt”
当:config.unreachable未定义时
寄存器:复制结果
- 
时间:复制_result.failed
请注意,您需要有Ansible 2.7或更高版本才能使用
ignore\u unreachable

- name: run backup configuration
  hosts: HOST_NAME
  gather_facts: no
  connection: local

  ignore_errors: yes
  ignore_unreachable: yes

  vars:
    date: "{{ lookup('pipe', 'date +%Y%m%d') }}"
    backup_dir: "/backup/backup-{{ date }}"
    cli:
      host: "{{ ansible_host }}"
      username: <username>
      password: <password>

  tasks:
    - sros_command:
        commands: <command backup>
        provider: "{{ cli }}"
      register: config

    - <task to send alarm notification>
      when: config.unreachable

    - copy:
        content: "{{ config.stdout[0] }}"
        dest: "{{ backup_dir }}/backup_conf-{{ inventory_hostname }}.txt"
      when: config.unreachable is not defined
      register: copy_result

    - <task to send alarm notification>
      when: copy_result.failed