通过ansible处理Ubuntu升级过程中提出的所有问题?

通过ansible处理Ubuntu升级过程中提出的所有问题?,ansible,Ansible,我正在把我的机器从Ubuntu14升级到Ubuntu16。我有大约200多台机器。我想通过ansible来实现这一点,这样我就可以将其自动化,而不是手动完成。当我在下面运行升级命令时,它在屏幕上问了我一些问题,我总是为这些问题选择默认答案,这对我很有效 大多数情况下,弹出屏幕上都会出现一些问题,我会默认回答这些问题,有时命令行上会出现问题,在运行升级时,我会默认回答“N” do-release-upgrade 那么现在如果我想通过ansible实现这一点,我们如何处理升级过程中出现的问题?我总

我正在把我的机器从Ubuntu14升级到Ubuntu16。我有大约200多台机器。我想通过ansible来实现这一点,这样我就可以将其自动化,而不是手动完成。当我在下面运行升级命令时,它在屏幕上问了我一些问题,我总是为这些问题选择默认答案,这对我很有效

大多数情况下,弹出屏幕上都会出现一些问题,我会默认回答这些问题,有时命令行上会出现问题,在运行升级时,我会默认回答“N”

do-release-upgrade
那么现在如果我想通过ansible实现这一点,我们如何处理升级过程中出现的问题?我总是想为这些问题选择默认答案,但有没有办法通过ansible解决这个问题?下面是我得到的,但不确定如何处理这些问题

---
- hosts: upgrade_test
  serial: "{{ num_serial }}"

  tasks:
    # Use a block to perform tasks conditionally—only if running Ubuntu 14.04.
    - block:

      - debug:
          msg: 'This server is running Ubuntu 14.04 LTS and will be upgraded to 16.04 LTS.'

      - name: Run do-release-upgrade.
        command: do-release-upgrade

      # Note: In Ansible 2.7+, use the reboot module instead.
      - name: Reboot the server.
        command: reboot
        async: 0
        poll: 0

      - name: Wait for server to reboot.
        wait_for:
          host: "{{ ansible_ssh_host }}"
          port: 22
          state: started
        connection: local
        become: no

      when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == '14.04'

这里有两个选项:

要么你用

这可能是最安全的解决方案,因为您可以真正控制发生的事情,甚至可以使用regex脚本说明问题是您对第二种形式的模块所期望的

- name: Run do-release-upgrade.
   expect:
     command: do-release-upgrade
     responses:
        Configuration file '/etc/pam.d/login'.*: N
尽管如此,这还是迫使你要么编写所有问题的脚本,要么百分之百地确定你总是有相同数量的问题

或者您可以使用实用程序命令
yes

$ yes
y
y
y
y
^C
默认情况下,它回答
y
,但可以回答您想要的任何问题,作为参数传递

名称 是-重复输出字符串,直到终止

提要 是[字符串]…
是选项

描述 重复输出包含所有指定字符串的行,或“y”

资料来源:

yes的默认用法

$ yes
y
y
y
y
^C
带参数的yes用法

$ yes N
N
N
N
N
^C
这样,您就可以将任务更改为

 - name: Run do-release-upgrade.
   shell: yes N | do-release-upgrade
注意:您需要从更改为,因为命令模块不接受管道的使用(
|

命令将不会通过shell进行处理,因此$HOME等变量以及诸如“”、“;”和“&”等操作将不起作用。如果需要这些功能,请使用shell模块

资料来源: