我有一个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
ansible任务看起来像这样:
- 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}
这很奇怪,因为我在一个单独的终端上进入机器并再次执行它仍然在那里......任务确实成功完成所以我不太确定它试图做什么...
我将在这里发布我自己的答案作为一种解决方法,因为在几个小时之后,我无法弄清楚它不会移动到下一步。
绝对是效率最低的方式(更不用说其他问题了),但希望这能让其他任何遇到类似问题的人如果遇到类似的情况就能解决这个问题。
我最终用这样的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