【问题标题】:Run Ansible Tasks against failed hosts针对失败的主机运行 Ansible 任务
【发布时间】:2023-03-13 17:05:01
【问题描述】:

我正在运行一个包含多个任务和主机的 ansible playbook。在这本剧本中,我试图将任务重新运行到失败的主机。我会尝试重建这种情况:

库存:

[hostgroup_1]
host1 ansible_host=1.1.1.1
host2 ansible_host=1.1.1.2

[hostgroup_2]
host3 ansible_host=1.1.1.3
host4 ansible_host=1.1.1.4

“hostgroup_1”中的主机应该出现故障,所以我可以检查两台主机上的错误处理。

剧本:

---
- name: firstplaybook
  hosts: all
  gather_facts: false
  connection: network_cli
  vars:
    - ansible_network_os: ios

tasks:

- name: sh run
  cisco.ios.ios_command:
    commands: show run

- name: sh run
  cisco.ios.ios_command:
    commands: show run

正如预期的那样,前两个主机(1.1.1.1 和 1.1.1.2)出现故障,不会被考虑执行第二个任务。在查看了几个 Ansible 文档后,我发现了 meta clear_host_errors 任务。所以我尝试像这样运行剧本:

---
- name: firstplaybook
  hosts: all
  gather_facts: false
  connection: network_cli
  vars:
    - ansible_network_os: ios

tasks:

- name: sh run
  cisco.ios.ios_command:
    commands: show run

- meta: clear_host_errors

- name: sh run
  cisco.ios.ios_command:
    commands: show run

遗憾的是,元输入没有重置主机,并且 Playbook 继续运行而没有再次考虑失败的主机。

其实我只是想知道 Ansible 如何再次考虑运行失败的主机,所以我可以继续这些。

提前谢谢大家

问候,卢卡斯

【问题讨论】:

    标签: error-handling ansible


    【解决方案1】:

    使用时有没有不同的结果:

    ignore_errors: true 
    

    ignore_unreachable: yes
    

    第一个任务?

    【讨论】:

      【解决方案2】:

      问:Ansible 如何再次考虑失败的主机?

      答:使用ignore_unreachable(2.7 版中的新功能。)。例如,在下面的播放中,主机 test_99 无法访问

      - hosts: test_11,test_12,test_99
        gather_facts: false
        tasks:
          - ping:
          - debug:
              var: inventory_hostname
      

      正如预期的那样,调试任务省略了无法访问的主机

      PLAY [test_11,test_12,test_99] ********************************************
      
      TASK [ping] ***************************************************************
      fatal: [test_99]: UNREACHABLE! => changed=false 
        msg: 'Failed to connect to the host via ssh: ssh: Could not resolve
              hostname test_99: Name or service not known'
        unreachable: true
      ok: [test_11]
      ok: [test_12]
      
      TASK [debug] ***************************************************************
      ok: [test_11] => 
        inventory_hostname: test_11
      ok: [test_12] => 
        inventory_hostname: test_12
      
      PLAY RECAP *****************************************************************
      

      如果您设置ignore_unreachable: true,主机将被跳过并包含在下一个任务中

      - hosts: test_11,test_12,test_99
        gather_facts: false
        tasks:
          - ping:
            ignore_unreachable: true
          - debug:
              var: inventory_hostname
      
      PLAY [test_11,test_12,test_99] ********************************************
      
      TASK [ping] ***************************************************************
      fatal: [test_99]: UNREACHABLE! => changed=false 
        msg: 'Failed to connect to the host via ssh: ssh: Could not resolve
              hostname test_99: Name or service not known'
        skip_reason: Host test_99 is unreachable
        unreachable: true
      ok: [test_11]
      ok: [test_12]
      
      TASK [debug] ***************************************************************
      ok: [test_11] => 
        inventory_hostname: test_11
      ok: [test_12] => 
        inventory_hostname: test_12
      ok: [test_99] => 
        inventory_hostname: test_99
      
      PLAY RECAP *****************************************************************
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 2017-02-23
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多