我试图制作一个剧本,使用ansible-playbook在远程主机上安装升降索。其中一项任务是执行" InstallHalyard.sh"包装脚本到实际的安装程序(参考:https://www.spinnaker.io/setup/install/halyard/)。
没有错误/失败,但也没有任何更改,就像没有执行InstallHalyard.sh脚本一样。但是,如果我通过输入手动命令来完成它会很好。另一个类似的任务完美无缺。
您可以看到InstallHalyard.sh脚本实现:here
对发生的事情有什么看法?
以下是我的剧本中的任务:
name: Run InstallHalyard.sh
become: yes
become_user: sudo
shell: "{{ ansible_env.HOME }}/.spinnaker/InstallHalyard.sh"
非常感谢任何帮助,非常感谢:)
修改
已经尝试过使用脚本,命令和shell模块。
仅供参考,InstallHalyard.sh脚本将通过传递env变量来调用自身,并且需要执行curl -O
我怀疑"出口"由于Ansible对环境变量有不同的理解,因此脚本内部的操作并不起作用。 (例如,ansible不会识别" $ HOME"而是使用" {{ansible_env.HOME}}"。)
修改
我发现脚本执行的操作是一个fork,是否可以处理这种操作?
在localhost上测试,得到了相同的结果。
解
这是因为对安赛的环境变量的不同解释。如果我手动执行脚本,则包装器会设置环境变量并将其传递给下一个脚本调用,这些调用无法进行。所以我要做的是在执行脚本之前用ansible模块手动设置环境var(只添加2行)
这是我修改过的任务:
name: Run InstallHalyard.sh
become: yes
become_user: sudo
environment:
HAL_USER: "{{ ansible_env.USER }}"
shell: "{{ ansible_env.HOME }}/.spinnaker/InstallHalyard.sh"
答案 0 :(得分:0)
问题是我如何调试失败命令的输出。我猜测命令失败并显示有用的错误消息,但该消息未在任何地方显示。
以下是帮助调试此失败脚本的示例:
-name: Run InstallHalyard.sh
become: yes
become_user: sudo
shell: "{{ ansible_env.HOME }}/.spinnaker/InstallHalyard.sh"
register: output
- debug: msg="{{ output.stdout }}"
- debug: msg="{{ output.stderr }}"
试试看看它给你的错误信息。