我有这个剧本来创建 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 AWS
了tags in Ansible
。Tags 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