Ubuntu Ansible任务安装不需要的包

Ubuntu Ansible任务安装不需要的包,ubuntu,ansible,Ubuntu,Ansible,在我的ansible playbook中,我有几个角色运行安装了许多不同软件包的任务。其中一些软件包似乎正在安装: modemmanager、wpasupclient、snapd和apache 我对在ansible中使用when:条件时使用非常陌生。有没有一种方法可以在ansible任务中添加一个when条件,防止他们在运行playbook时安装这些包 伪代码: -名称:安装软件包 何时:如果安装了modemmanager、WPASupClient、snapd和apache,是否停止安装它们?

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

modemmanagerwpasupclientsnapdapache

我对在ansible中使用when:条件时使用
非常陌生。有没有一种方法可以在ansible任务中添加一个when条件,防止他们在运行playbook时安装这些包

伪代码:

-名称:安装软件包
何时:如果安装了modemmanager、WPASupClient、snapd和apache,是否停止安装它们?
apt:pkg={{item}}state=latest
随附项目:
项目列表


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

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

vars:
  package_exclusion_list: [modemmanager, wpasuppclient, snapd, apache]
在以下情况下添加
时更新您的任务:

- name: installing packages
  apt: pkg={{item}} state=latest
  when: item not in package_exclusion_list
  with items:
       list of items
希望能有帮助

侧任务:

如果要运行一批“简单”任务(如注释中所述),可以使用
include\u tasks

例如:

  - name: include tasks
    include_tasks: various_tasks.yml
    with_items: 
      - "{{ packages_to_install }}"
但是请注意,
各种任务.yml
应该引用每个
包来安装带有
项的

各种任务。yml
示例:

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

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

显然,如果您试图在这个不同的任务文件中添加一些必须使用自己的
项的循环,那么它将有冲突。

如果我正在安装的包试图安装排除列表中的项,它们会被安装吗?因为我仍然需要这些软件包,我只是不想让它们安装该列表中的任何软件包。是的,如果存在依赖项,它们将被安装。当
指示ansible在“项目”名称为排除列表OK之一的情况下跳过运行
apt install
时,此
。我会试一试。快速跟进,如果我有一堆不同的任务,有没有办法将when语句作为开销,这样我就不必在每个任务中重复它了?回到这里。这个解决方案很有效,但相当笨重(我还没有弄清楚include_任务,但我现在正在研究它。)再次感谢!