Ansible任务安装不需要的软件包

时间:2018-06-07 14:07:04

标签: ubuntu ansible

在我的ansible playbook中,我有几个角色来运行安装许多不同包的任务。其中一些软件包似乎正在安装:

modemmanager wpasuppclient snapd apache

在ansible中使用when:条件我很陌生。有没有办法可以在我的ansible任务中添加when条件,阻止他们在运行我的playbook时安装这些包?

伪代码:

- name: installing packages when: if modemmanager, wpasuppclient, snapd, and apache are getting installed stop them from being installed? apt: pkg={{item}} state=latest with items: list of items

我的另一个想法是,有没有办法可以使用state变量来执行此操作?

1 个答案:

答案 0 :(得分:0)

创建一个变量,该变量是要排除的包的列表,将其添加到剧本的vars部分:

vars:
  package_exclusion_list: [modemmanager, wpasuppclient, snapd, apache]

更新您添加when条件的任务:

- name: installing packages
  apt: pkg={{item}} state=latest
  when: item not in package_exclusion_list
  with items:
       list of items

希望有所帮助

侧面任务:

如果你想运行一批简单的"任务(如您在评论中所述),您可以使用include_tasks

示例:

  - name: include tasks
    include_tasks: various_tasks.yml
    with_items: 
      - "{{ packages_to_install }}"

但要注意,various_tasks.yml应该使用packages_to_install引用每个item项。

various_tasks.yml示例:

---
- name: print items name
  debug:
    var: item

- name: print items name #2
  debug:
    msg: "variable value: {{ item }}"

显然,如果你尝试在这个various_tasks文件中添加一些必须使用自己的items的循环,那么它就会发生冲突。