完成后无法移至下一步

时间:2019-04-18 23:17:06

标签: linux ansible

我有一个烦人的shell任务,该任务执行一个sh脚本,

#/bin/bash

echo Which version will you be using
read VERSION
export VERSION=$VERSION

sh deployvcenter.v1.sh

sh deployf5.v1.sh

sh deployadmin.sh

这个烦人的任务看起来像这样:

- name: Run build scripts
  shell:
    cmd: echo "beta-1" | sudo sh /home/admin/buildscripts/deployall.sh >> /tmp/build.log
    chdir: /home/admin/buildscripts
  become: true
  become_method: su
  become_user: root

deployadmin.sh的最后一部分是这样:

terraform init && terraform apply -var-file=static-ip.tfvars -auto-approve -input=false

terraform确实完成了,因为/tmp/build.log最后是这样的:

vsphere_virtual_machine.vm: Still creating... (1m10s elapsed)
vsphere_virtual_machine.vm: Creation complete after 1m17s (ID: 4226c091-bb3a-4d3a-d2af-c31933425991)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

ip_address = ip addy

但是ansible只是坐在那个任务上,不会移到下一个任务。

TASK [Run build scripts] *******************************************************

我不明白为什么它不移到下一个或错误输出?

更新:

我让它运行,大约一个小时后,我得到了:

TASK [Run build scripts] *******************************************************

fatal: [ip]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to ip closed.\r\n", "unreachable": true}

这很奇怪,因为我在一个单独的终端上进入了机器,然后又在那儿再次进行了操作...任务确实成功完成,所以我不确定它要做什么... < / p>

1 个答案:

答案 0 :(得分:0)

我将在这里发布我自己的答案,作为一种变通方法,因为数小时后我无法弄清楚它不会继续进行下一步。

这绝对是最不高效的方法(更不用说与此有关的其他问题了),但是希望这会使遇到类似情况的其他任何人都知道在类似情况下如何解决它。

我最终用nohup进行了这样的品尝:

   - name: Run build scripts
      shell: cd /home/admin/buildscripts; nohup sh deployall.sh > /tmp/build.log 2>&1 &
      become: true
      become_method: su
      become_user: root

运行shell命令的任务已完成,并且进程确实退出了,但不确定ansible为什么不选择它。

然后我添加了另一个任务,以查看vcenter服务器和其他服务器是否像这样出现:

- name: Wait for Vcenter to come alive
  uri:
    url: "https://vcenter/vsphere-client/?csp"
    status_code: 200
    validate_certs: False
  register: result
  until: result.status == 200
  retries: 240
  delay: 30
  tags:
    - debug

- name: Wait for F5 to come alive and get token
  uri:
    url: https://{{ f5_addr }}/mgmt/shared/authn/login
    method: POST
    body_format: json
    body:
      username: '{{ f5_user }}'
      password: '{{ f5_pass }}'
      needsToken: true
    return_content: yes
    validate_certs: no
  register: token
  until: token.status == 200
  retries: 240
  delay: 30
  tags:
    - f5license

- name: Waits ws to come up
  wait_for:
    host: '{{ admin_ip }}'
    port: 22