在我的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
变量来执行此操作?
答案 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
的循环,那么它就会发生冲突。