在Ubuntu上,我想用命令"进行发布升级";通过Ansible,但它有无法避免的提示。
有没有一种方法可以使用Ansible来回答运行Ansible脚本的用户的提示?
我们有几个服务器无法使用SSH访问,但使用Ansible可以访问。
服务器在Ubuntu 16.04上,所有服务器都需要升级到Ubuntu 20.04。
在这个过程中,有很多不可避免的提示。
有没有一种方法可以使用ansible剧本,让运行ansible脚本的用户在shell脚本提示下回答问题?
您可以使用expect模块。示例:
- name: Upgrading Software
expect:
command: do-release-upgrade
responses:
'First Question in the prompt' : 'y'
'Second Question in the prompt' : 'y'
但是,您希望在没有提示的情况下执行do版本升级。
- shell: do-release-upgrade -f DistUpgradeViewNonInteractive
请注意:
- 请确保在升级前有备份和/或快照
- 确保所有软件包都是最新版本
- 确保已安装更新管理器核心
- 确保在do版本升级后重新启动计算机
另外,请阅读我的第一条评论。由于您没有与机器的SSH连接,因此很难进行调试,也很难在出现问题时查看情况。
注意,Ubuntu默认情况下会将日志保留在/var/log/dist-upgrade
,使用这些日志来检查/验证升级。他们提供了很多帮助!
这对我来说是一个有效的解决方案。
这适用于从Ubuntu 16升级到Ubuntu18以及Ubuntu 18到Ubuntu 20
但这里的问题是,如果您错过了一个问题,服务器将无法访问
---
- name: Upgrading Software
shell: echo "N N N N N N N N N N" | do-release-upgrade -f DistUpgradeViewNonInteractive
- name: Reboot the machine (Wait up to 10 min)
include_tasks: /vagrant/ansible/roles/_handlers/reboot-and-reconect.yml
when: reboot_and_reconnect == "y"
注意:请注意,在开始版本升级之前,必须更新和升级所有软件包。
当很难从头开始设置新服务器,然后安装所需的软件包和其他东西时,这是一个演练解决方案。