在播放过程中Ansible SSH错误

问题描述 投票:0回答:1

我得到Ansible一个奇怪的错误。首先,第一个作用,工作正常,但Ansible试图何时执行一个Seconde系列失败,因为SSH的错误。

环境:

  • 操作系统:CentOS的7
  • Ansible版本:2.2.1.0
  • Python版本:2.7.5
  • OpenSSH的版本:OpenSSH_6.6.1p1,OpenSSL的1.0.1e - FIPS 2013年2月11日

其中执行命令Ansible:

ansible-playbook -vvvv -i inventory/dev playbook_update_system.yml --limit "db[0]"

剧本:

- name: "HUB Playbook | Updating system packages on {{ ansible_hostname }}"
  hosts: release_first_half
  roles:
    - upgrade_system_package
    - reboot_server

作用:upgrade_system_package:

- name: "upgrading CentOS system packages on {{ ansible_hostname }}"
  shell: sudo puppet apply -e 'exec{"upgrade-package":command => "/usr/bin/yum clean all; /usr/bin/yum -y update;"}'
  when: ansible_distribution == 'CentOS' and 'cassandra' not in group_names

作用:reboot_server:

- name: "reboot CentOS [{{ ansible_hostname }}] server"
  shell: sudo puppet apply -e 'exec{"reboot-os":command => "/usr/sbin/reboot"}'
  when: ansible_distribution == 'CentOS' and 'cassandra' not in group_names

当前的行为:

  1. 连接到“DB1”节点并执行角色“升级系统的软件包” => OK
  2. 尝试连接到“DB1”,并执行作用“rebo​​ot_server” =>由于SSH失败。

通过Ansible返回的错误信息:

致命:[DB1]:UNREACHABLE! => { “改变”:假, “msg” 中:“未能通过ssh连接到主机:OpenSSH_6.6.1,OpenSSL的1.0.1e-FIPS 2013年2月11日\ r \ ndebug1:读取配置数据/ USR / newtprod /。 SSH /配置\ r \ ndebug1:读取配置数据的/ etc / SSH / ssh_config中\ r \ ndebug1:在/ etc / SSH / ssh_config中管线56:应用选项* \ r \ ndebug1:自动MUX:试图现有主\ r \ ndebug2:FD 3设置O_NONBLOCK \ r \ ndebug2:mux_client_hello_exchange:主版本4 \ r \ ndebug3:mux_client_forwards:请求forwardings:0本地,0远程\ r \ ndebug3:mux_client_request_session:进入\ r \ ndebug3:mux_client_request_alive:进入\ r \ ndebug3:mux_client_request_alive:进行PID = 64994 \ r \ ndebug3:mux_client_request_session:会话请求发送\ r \ ndebug1:mux_client_request_session:主会话ID:2 \ r \ ndebug3:mux_client_read_packet:读头失败:中断的管道\ r \ ndebug2:控制主意外终止\ r \ nShared到DB1连接关闭\ r \ n”, “可达”:真正}

我不明白,因为以前的角色已在此节点上成功执行。此外,我们有很多这是使用相同的库存文件剧本和他们工作得很好。我尝试另一个节点太多,但同样的结果上。

ssh ansible ansible-2.x
1个回答
1
投票

这是一个简单而漂亮的著名问题:关机过程中导致SSH守护进程退出,这打破当前的SSH会话(你得到的“断管”的错误)。服务器重新启动正常,但Ansible流被中断。

您需要将延迟添加到您的shell命令,并与async选项来运行它,这样Ansible的SSH会话能够完成它被杀害之前。

shell: sleep 5; sudo puppet apply -e 'exec{"reboot-os":command => "/usr/sbin/reboot"}'
async: 0
poll: 0
© www.soinside.com 2019 - 2024. All rights reserved.