- name: Installed packages.
ansible.builtin.shell:
cmd: apt list --installed | cut -d'/' -f1 | uniq
register: installed_packages
- name: Install packages.
ansible.builtin.apt:
name: "{{ item }}"
state: present
when: 'item | string not in installed_packages.stdout'
loop:
- 7zip
- acl
我有上述任务。除了“string”匹配部分包名外,运行良好。这意味着如果我想安装“acl”包,它会被跳过,因为“libacl1”已安装。我需要它匹配整个包名,并且只匹配整个包名。
有什么办法可以做到这一点?
4
最佳答案
1
删除单独的检查步骤。包模块处于所需状态,并且仅根据其输入参数执行必要的操作。
删除循环。大多数包模块可以在一个事务中安装一个列表,这样速度更快。列表可以是任务中的静态列表,也可以是变量表达式。
- name: Install packages.
ansible.builtin.apt:
name:
- 7zip
- acl
state: present
|
–
–
–
apt
已经完成的工作。现在,如果软件包已安装,则会检查两次。–
|