在 Ubuntu 上,我想通过 Ansible 使用命令“do-release-upgrade”升级操作系统,但它有无法避免的提示。
有没有办法使用 Ansible 来回答运行 Ansible 脚本的用户的提示?
我们有几台服务器无法通过 SSH 访问,但通过 Ansible 可以。
服务器运行Ubuntu 16.04,所有服务器都需要升级到Ubuntu 20.04。
这个过程中有很多不可避免的提示。
有没有一种方法可以使用 ansible playbook 来让运行 ansible 脚本的用户回答 shell 脚本提示?
您可以使用expect模块。示例:
- name: Upgrade Ubuntu w do release upgrade
expect:
command: do-release-upgrade
responses:
'First Question in the prompt' : 'y'
'Second Question in the prompt' : 'y'
但是,您想要在没有提示的情况下执行 do-release-upgrade。
- shell: do-release-upgrade -f DistUpgradeViewNonInteractive
请注意:
另外,请阅读我的第一条评论。由于您没有与机器的 SSH 连接,因此很难调试并查看出现问题时发生了什么。
请注意,Ubuntu 默认情况下会在
/var/log/dist-upgrade
处留下日志,使用这些日志来检查/验证升级。他们提供了很多帮助!
这对我来说是一个可行的解决方案。
这适用于从 Ubuntu 16 升级到 Ubuntu 18 和 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"
注意: 请注意,在开始版本升级之前,必须更新和升级所有软件包。
当很难从头开始设置新服务器然后安装所需的软件包和其他内容时,这是解决方案。