是否可以在tags
声明中为每个项目设置with_item
?
假设我有一项任务:
- name: ensure required packages are installed
apt: pkg={{ item }} state=present
with_items:
- package_1
- package_2
sudo: yes
当用户在命令行中定义--tags "second"
时,我只想安装package_2
。
是否可以使用tags
表达式或任何其他方式来获得所需的行为?
答案 0 :(得分:1)
我不相信这是可能的。 yum模块(我想象的类似于apt)states:
当与剧本中的包名称循环一起使用时,ansible 优化对yum模块的调用。而不是调用模块 每次通过循环使用单个包,ansible调用 模块一次包含循环中的所有包名称。
您需要将命令拆分为两个单独的包任务,标记为" second"在package_2任务上。
修改强>
请参阅下面的迭代具有when条件的集合的示例,以便它仅使用正确的标记打印第二个项目。希望这会有所帮助。
---
- name: Only run certain items in a list
hosts: localhost
tasks:
- name: Echo items based on a tag condition
shell: echo {{item.cmd}}
with_items:
- {cmd: 'package_1', tag: 'first'}
- {cmd: 'package_2', tag: 'second'}
when: item.tag == "second"