我正在编写一个 ansible 剧本来设置我的系统。这包括安装应用程序(通过package
模块 - 其中一些(例如texlive-full
(需要很长时间才能下载和安装。
任务如下所示:
- name: install packages
package:
name: '{{ item }}'
state: present
with_items: [firefox, gimp, inkscape, texlive-full, ..., steam]
become: yes
我用ansible-playbook playbook.yml -K
执行包含此任务的剧本。
当安装过程花费太长时间时,ansible 不会保留其根权限(随become
升级(,因此安装下一个应用程序会失败。
如何让 ansible 保留特权?
作为一般规则,您不应该在循环中运行package
模块,因为这意味着您必须重新计算每个包的依赖项。这会导致大量额外的工作,从而延长执行时间。
您应该将包列表作为参数传递给name
参数,如下所示:
- name: install packages
package:
name: "{{ packages }}"
state: present
vars:
packages:
- firefox
- gimp
- inkscape
- texlive-full
...
- steam
become: yes
这将在一个步骤中安装所有软件包,这意味着无论需要多长时间,Ansible 实际上都没有以某种方式"失去"特权的机制。