【问题标题】:Ansible - do-release-upgrade without promptsAnsible - 没有提示的做发布升级
【发布时间】:2022-07-15 18:55:57
【问题描述】:

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

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

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

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

在这个过程中有很多无法回避的提示。

【问题讨论】:

  • 这是一个非常漫无边际的问题,没有一点现有的尝试、您尝试过的代码、您收到的错误或其他可以使其成为编程站点on topic 的事情。但是,本着乐于助人的精神,您是否已经尝试过expect:
  • 警告:最好避免对操作系统进行就地升级,尤其是从 16.04 升级到 20.04。更好的做法是在当前虚拟机旁边创建一个新虚拟机,然后像在旧虚拟机上一样安装/配置应用程序。此外,由于您只能通过 Ansible 进行 SSH 访问,因此您不知道 VM 本身发生了什么。同样,强烈建议不要执行就地升级。

标签: ubuntu ansible upgrade


【解决方案1】:

有没有办法使用 ansible playbook 来让运行 ansible 脚本的用户回答 shell 脚本提示?

您可以使用expect module。示例:

- name: Upgrading Software
  expect:
    command: do-release-upgrade
    responses:
      'First Question in the prompt' : 'y'
      'Second Question in the prompt' : 'y'

但是,您希望在没有提示的情况下执行 do-release-upgrade。

- command: do-release-upgrade -f DistUpgradeViewNonInteractive

请注意:

  • 确保在升级前做好备份
  • 确保所有软件包都是最新版本
  • 确保已安装 update-manager-core
  • 确保在 do-release-upgrade 后重启机器

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

【讨论】:

  • 我会建议相同的解决方案:command: do-release-upgrade -f DistUpgradeViewNonInteractive。干得好。
【解决方案2】:

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

这适用于从 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多