Ansible:处理程序调用后清除主机错误

时间:2019-04-01 11:41:18

标签: ansible

我做什么

对于Bare Metal部署,我通过ansible 2.7.9 CentOS 7 服务器上配置接口。

有时,界面定义会更改

- name: Copy sysctl and ifcfg- files from templates.
  template: src={{ item.src }} dest={{ item.dest }}
  with_items:
    [...]
    - { src: 'network.j2', dest: '/etc/sysconfig/network' }
  notify:
    - Restart network service
    - Wait for reconnect
    - Reset host errors

这就是为什么在发生更改时我叫处理程序重新启动 network.service的原因:

- name: Restart network service
  service:
    name: network
    state: restarted

- name: Reset host errors
  meta: clear_host_errors

- name: Wait for reconnect
  wait_for_connection:
    connect_timeout: 20
    sleep: 5
    delay: 5
    timeout: 600

我想要的

重启网络服务处理程序失败时,我无法让ansible退出。由于服务重新启动在主机本身上运行良好,因此我要么希望重新启动始终以RC=0退出,要么希望在处理程序调用失败后清除主机错误。在下面的列表中,我有什么想念的或做错的吗?

我尝试过的事情

  • ignore errors: truefailed_when: falsechanged_when: false指令。重新启动网络处理程序块中的shell/command模块或service模块。
  • meta: clear_host_errors- name: Copy sysctl and ifcfg- files from templates.块正下方
  • 调用meta: clear_host_errors作为处理程序
  • 让处理程序重启网络服务|| true退出
  • 重新启动网络服务
  • async/poll个变体
  • Pipelining设置为 false

我总是以:

RUNNING HANDLER [os : Restart network service] *******************************************************************
fatal: [host-redacted]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to aa.bb.cc.dd closed.", "unreachable": true}

RUNNING HANDLER [os : Reset host errors] *************************************************************************
fatal: [host-redacted]: FAILED! => {"changed": false, "module_stderr": "Shared connection to aa.bb.cc.dd closed.\r\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 0}

RUNNING HANDLER [os : Wait for reconnect] ************************************************************************

在这种情况下,meta: clear_host_errors的正确位置在哪里?

一些其他信息

  • 重新启动network.service大约需要40秒。 (尝试过async: 120poll: 30
  • 已建立的,无法建立的SSH连接恢复时已足够超时
  • 在第一个退出工作正常后直接
  • 重新运行 ansible
  • 足够有趣的是,在使用Mitogen时,跳过与ignore_errors: true配合良好:
TASK [os : Restart network service] ******************************************************************************************************************************************************************************************************
skipping: [host-redacted]
skipping: [host-redacted]
fatal: [host-redacted]: FAILED! => {"msg": "EOF on stream; last 300 bytes received: 'ssh: connect to host aa.bb.cc.dd port 22: Connection refused\\r\\n'"}
...ignoring

在我看来,这似乎是一个错误。

0 个答案:

没有答案