ANSIBLE 在 with_items 循环中为每个项目设置标签

ANSIBLE 在 with_items 循环中为每个项目设置标签

我有这个剧本来创建 ec2 实例,并且想通过标签定位每个 ec2 创建,但是不起作用...当我运行剧本时,我没有收到任何错误,但没有创建。

---
- name: Build or Check environment
  hosts: localhost
  connection: local
  become: yes
  vars_files:
    - ../vars/kafka-east.yml

  tasks:

    # name: launch kafka-east-1 ec2 instance
    - ec2:
       image: "{{ ami_id }}"
       key_name: "{{ key_name }}"
       instance_type: "{{ instance_type }}"
       instance_profile_name: "{{ instance_profile_name }}"
       region: us-east-1
       network_interfaces: "{{ item.eni }}"
       with_items:
          - {eni: 'kafka_east_1', tag: 'kafka_east_1'}
          - {eni: 'kafka_east_2', tag: 'kafka_east_2'}
       volumes:
       - device_name: /dev/sda1
         volume_size: "{{ ebs_size }}"
         device_type: "{{ ebs_type }}"
         delete_on_termination: true
       user_data: "{{ lookup('file', '../group_vars/kafka-east/user_data') }}"
       state: present

我遇到了错误,但只是发布来展示我想要完成的任务。有人知道如何正确实现吗?并在 with_items 中为每个项目设置标签并循环

所以我可以运行剧本并定位特定的标签,像这样

ansible-playbook launch_ec2.yml --extra-vars "items_tags=kafka_east_1"

或者

ansible-playbook launch_ec2.yml --tags "kafka_east_1"

无论哪种方式都是正确的。

谢谢!

答案1

首先:循环的正确语法with_items是:

- name: task name
  module:
    parameter1: value1
    parameter2: "{{ item }}"
  with_items:
    - item1
    - item2

这是错误的,我想知道为什么 Ansible 没有抛出错误。

第二:您混淆tags in AWStags in AnsibleTags in AWS用于标记 AWS 中的资源,Ansible AWS 模块通常通过参数提供此功能。 但这与 不同tags in Ansible。 它们用于标记剧本中的任务,以便能够将执行的任务限制为ansible-playbook剧本中任务的子集。

在 Ansible 中标记任务如下:

- name: task name
  module:
    parameter1: value1
  tags:
    - tag1
    - tag2

ansible-playbook你可以通过如下方式限制执行的任务:

ansible-playbook --tags=tag1 play.yml

相关内容