Ansible 远程连接超时和升级

2019-07-04 0 By admin

当我们使用 Ansible 管理远程主机过程中,如果一个任务在远程主机需要运行很长时间,这时候我们就需要考虑ansible 远程连接的保持时间。

一、问题

如果 Ansible 在远程主机执行的任务耗时很长;很可能Ansible 返回给我们的执行任务结果为失败;
"changed": false,
"msg":Failed to connect to the host via ssh,
"unreachable": true

二、增加连接保持时间

可以通过调整Ansible 远程连接的保持时间。
修改/etc/ansible/ansible.cfg 文件
配置SSH 服务远程连接的保持时间为一小时。
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=3600s

这样的话,只要单个远程连接任务在一个小时内执行完成,就不会报错。

三、忽略连接失败错误

除了上面提到的增加连接保持时间外;对于那些确实因为网络等原因,导致ansible返回unreachable 状态的任务,也应该将这个错误状态通知出来。
首先我们需要忽略这个任务task 的失败状态,使其继续执行playbook。

Ansible 提供了两个ignore 的参数:
1、ignore_errors
Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.
忽略任务的失败状态,继续执行。但是不对连接失败生效。
2、ignore_unreachable
Boolean that allows you to ignore unreachable hosts and continue with play. This does not affect other task errors but is useful for groups of volatile/ephemeral hosts.
忽略主机连接失败的状态,但是不对其他失败状态生效。
所以对任务设置 ignore_unreachable :True 状态即可,不过这个参数使从Ansible 2.7 版本以后添加的,请视情况升级Ansible。

四、Ansible 升级

Ansible 的RPM 包下载地址:https://releases.ansible.com/ansible/rpm/ ; 选择合适的包,使用yum 安装即可。