Ansible:在循环中为每个项目设置标记

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

是否可以使用\u item语句为
中的每个项目设置
标记

假设我有一个任务:

- 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年,所以可能在路线图上。根据您的剧本,最好避免使用标记,只使用一个变量来运行特定任务,时间:条件而不是标记:。