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

时间:2015-09-18 09:30:56

标签: ansible

是否可以在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表达式或任何其他方式来获得所需的行为?

1 个答案:

答案 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"