Ansible - 在没有提示的情况下进行发布升级

问题描述 投票:0回答:2

在 Ubuntu 上,我想通过 Ansible 使用命令“do-release-upgrade”升级操作系统,但它有无法避免的提示。

有没有办法使用 Ansible 来回答运行 Ansible 脚本的用户的提示?

我们有几台服务器无法通过 SSH 访问,但通过 Ansible 可以。

服务器运行Ubuntu 16.04,所有服务器都需要升级到Ubuntu 20.04。

这个过程中有很多不可避免的提示。

ubuntu ansible upgrade
2个回答
7
投票

有没有一种方法可以使用 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

请注意:

  • 确保在升级之前有备份和/或快照
  • 确保所有软件包都是最新版本
  • 确保已安装 update-manager-core
  • 确保在 do-release-upgrade 后重新启动机器

另外,请阅读我的第一条评论。由于您没有与机器的 SSH 连接,因此很难调试并查看出现问题时发生了什么。

请注意,Ubuntu 默认情况下会在

/var/log/dist-upgrade
处留下日志,使用这些日志来检查/验证升级。他们提供了很多帮助!


0
投票

这对我来说是一个可行的解决方案。

这适用于从 Ubuntu 16 升级到 Ubuntu 18Ubuntu 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"

注意: 请注意,在开始版本升级之前,必须更新和升级所有软件包。

当很难从头开始设置新服务器然后安装所需的软件包和其他内容时,这是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.