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