Ansible:在循环中为每个项目设置标记
是否可以使用\u item语句为Ansible:在循环中为每个项目设置标记,ansible,Ansible,是否可以使用\u item语句为中的每个项目设置标记 假设我有一个任务: - name: ensure required packages are installed apt: pkg={{ item }} state=present with_items: - package_1 - package_2 sudo: yes 当用户在命令行中定义--标记“second”时,我只希望安装包2 是否可以使用标签表达式或任何其他方式来获得所需的行为?我认为这是不可能的。y
中的每个项目设置标记
假设我有一个任务:
- name: ensure required packages are installed
apt: pkg={{ item }} state=present
with_items:
- package_1
- package_2
sudo: yes
当用户在命令行中定义--标记“second”
时,我只希望安装包2
是否可以使用标签
表达式或任何其他方式来获得所需的行为?我认为这是不可能的。yum模块(我认为类似于apt):
在剧本中与包名循环一起使用时,ansible
优化对yum模块的调用。而不是调用模块
每次通过循环时,ansible使用单个包调用
使用循环中的所有包名创建一次模块
您需要将该命令拆分为两个单独的包任务,包2任务上带有标记“second”
编辑
请参见下面的一个示例,该示例使用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"
谢谢,但这只解释了apt
命令的行为。但我举了一个例子(可能不太准确)。假设还有另一个命令,如command:make{{item}
或debug:msg=“{item}”
。因此,我的问题是,是否可以为循环中的项分配不同的标记。我已经修改了,以涵盖带有when条件的集合的一般情况。似乎目前唯一的解决方案是建议的解决方案。不幸的是,它强制用户在命令行中指定额外的参数:--tags“second”--extra-vars“items\u tags=second”
;并在条件中使用这个items\u tags
。我不知道标签可以作为变量使用,所以是的,您需要在命令行中使用两个不同的参数。提到这是不可用的,虽然这是在2013年,所以可能在路线图上。根据您的剧本,最好避免使用标记,只使用一个变量来运行特定任务,时间:条件而不是标记:。