Назад | Перейти на главную страницу

ANSIBLE установить теги для каждого элемента в цикле with_items

У меня есть эта книга для создания экземпляров ec2, и я хотел бы настроить таргетинг на каждое создание ec2 по тегам, но не работает ... когда я запускаю playbook, я не получаю никаких ошибок, но создается запись.

---
- 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 и зациклите

поэтому я могу запустить playbook и настроить таргетинг на конкретный тег, подобный этому

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

ИЛИ

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

в зависимости от того, какой способ правильный.

Спасибо!

Во-первых: правильный синтаксис для with_items цикл:

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

Так что это неправильно, и мне интересно, почему Ansible не выдал ошибку.

Во-вторых: вы путаете tags in AWS с участием tags in Ansible. Tags in AWS используются для тегирования ресурсов в AWS, а модули Ansible AWS обычно предоставляют это с помощью параметров. Но это отличается от tags in Ansible. Они используются для маркировки задач в playbook, чтобы иметь возможность ограничивать задачи, выполняемые ansible-playbook к подмножеству задач в игре.

пометить задачу в Ansible следующим образом:

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

Вы можете ограничить количество задач, выполняемых ansible-playbook как это:

ansible-playbook --tags=tag1 play.yml