用于在EC2实例上收集事实的Ansible设置模块永久挂起

2024-05-16 23:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个执行多个Ansible剧本的气流DAG

Playbook1通过Ansible分配两个EC2(Ubuntu 20.04的默认AMI)实例(一切正常)

Playbook 2和3按顺序执行,并通过不同的Ansible Playbook在这些实例上部署两个不同的服务。两个剧本都以相同的调用开始,如以下代码段所示

然而,playbook2或playbook3都被困在Playbook的setup调用中

剧本片段:

- name: init tasks on all hosts
  hosts: all
  remote_user: ubuntu
  gather_facts: no

  vars:
    ansible_python_interpreter:  /usr/bin/python3.8

  tasks:
    
    - name: Wait until hosts are reachable
      wait_for_connection:
        connect_timeout: 5
        sleep: 10
        timeout: 300
    # setting the path to the python interpreter manually for Ubuntu 20.04, otherwise python 2.7 might be chosen randomly

    - name: Gather facts for first time as host is reachable
      setup:
    
    - name: check which python version is used by ansible
      debug:
        msg: "python version is {{ ansible_python_version }}"

然而,在两个EC2实例中的一个实例上,playbook将永远停留在这个任务中,永远不会到达check which python version is used by ansible

另一个工作没有问题

在下面找到卡住的剧本的-vvv日志输出:

<52.209.69.27> ESTABLISH SSH CONNECTION FOR USER: ubuntu
[2020-12-08 10:04:40,164] {bash_operator.py:157} INFO - <52.209.69.27> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile="/opt/baas/keys/ec2"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ubuntu"' -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c0fdd259e3 52.209.69.27 '/bin/sh -c '"'"'echo ~ubuntu && sleep 0'"'"''
[2020-12-08 10:04:40,240] {bash_operator.py:157} INFO - <52.209.69.27> (0, b'/home/ubuntu\n', b'')
[2020-12-08 10:04:40,240] {bash_operator.py:157} INFO - <52.209.69.27> ESTABLISH SSH CONNECTION FOR USER: ubuntu
[2020-12-08 10:04:40,241] {bash_operator.py:157} INFO - <52.209.69.27> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile="/opt/baas/keys/ec2"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ubuntu"' -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c0fdd259e3 52.209.69.27 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ubuntu/.ansible/tmp `"&& mkdir "` echo /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202 `" && echo ansible-tmp-1607421880.2405577-3462-268510123659202="` echo /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202 `" ) && sleep 0'"'"''
[2020-12-08 10:04:40,314] {bash_operator.py:157} INFO - <52.209.69.27> (0, b'ansible-tmp-1607421880.2405577-3462-268510123659202=/home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202\n', b'')
[2020-12-08 10:04:40,761] {bash_operator.py:157} INFO - Using module file /usr/local/lib/python3.7/site-packages/ansible/modules/setup.py
[2020-12-08 10:04:40,763] {bash_operator.py:157} INFO - <52.209.69.27> PUT /root/.ansible/tmp/ansible-local-3395wtci4jxr/tmp1wpwdhy1 TO /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202/AnsiballZ_setup.py
[2020-12-08 10:04:40,764] {bash_operator.py:157} INFO - <52.209.69.27> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile="/opt/baas/keys/ec2"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ubuntu"' -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c0fdd259e3 '[52.209.69.27]'
[2020-12-08 10:04:41,153] {bash_operator.py:157} INFO - <52.209.69.27> (0, b'sftp> put /root/.ansible/tmp/ansible-local-3395wtci4jxr/tmp1wpwdhy1 /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202/AnsiballZ_setup.py\n', b'')
[2020-12-08 10:04:41,154] {bash_operator.py:157} INFO - <52.209.69.27> ESTABLISH SSH CONNECTION FOR USER: ubuntu
[2020-12-08 10:04:41,155] {bash_operator.py:157} INFO - <52.209.69.27> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile="/opt/baas/keys/ec2"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ubuntu"' -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c0fdd259e3 52.209.69.27 '/bin/sh -c '"'"'chmod u+x /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202/ /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202/AnsiballZ_setup.py && sleep 0'"'"''
[2020-12-08 10:04:41,226] {bash_operator.py:157} INFO - <52.209.69.27> (0, b'', b'')
[2020-12-08 10:04:41,226] {bash_operator.py:157} INFO - <52.209.69.27> ESTABLISH SSH CONNECTION FOR USER: ubuntu
[2020-12-08 10:04:41,227] {bash_operator.py:157} INFO - <52.209.69.27> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile="/opt/baas/keys/ec2"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ubuntu"' -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c0fdd259e3 -tt 52.209.69.27 '/bin/sh -c '"'"'/usr/bin/python3.8 /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202/AnsiballZ_setup.py && sleep 0'"'"''

在卡住的实例上手动调用此模块,例如/usr/bin/python3.8 /home/ubuntu/.ansible/tmp/ansible-tmp-1607421880.2405577-3462-268510123659202/AnsiballZ_setup.py,不会出错

更新:

Not通过!hardware收集硬件事实解决了问题,但后续任务依赖于硬件事实,因此这不是解决方案

在通过setup模块收集事实之前添加延迟可以解决以下问题:

- name: Sleep for 30 seconds and continue with play otherwise setup module might hang forever
      wait_for:
        timeout: 30

但是,在调用setup模块作为所需的解决方案之前,需要等待确切的条件得到满足


Tags: nopyinfobashhomebinubuntuwith