我有一个烦人的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>
答案 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