我正在尝试使用Ansible创建两个实例,使用下面的播放分别在两个子网中创建一个实例。我正在使用带有标签名称的exact_count来跟踪实例。这里有两个问题:
- name: Create kafka instances with_items: - "{{ vpc_pvt_subnet_2 }}" - "{{ vpc_pvt_subnet_1 }}" ec2: group: "{{ kafka_sg }}" key_name: "{{ ec2_keypair }}" region: "{{ region }}" image: "{{ ami_id }}" wait: true instance_type: "{{ kafka_inst_type }}" vpc_subnet_id: "{{ item }}" instance_tags: Name: "kafka-instance" Owner: data exact_count: 2 count_tag: Name: "kafka-instance" register: ec2
有人可以告诉我这里的剧本有什么问题吗?
答案 0 :(得分:2)
假设您要在每个子网中创建1个EC2实例,则您提供的代码段中的一个可见错误是with_items
的值应设置为1(而非2),因为ec2
将循环以在您的剧本中运行zone
模块两次。您希望每次迭代都创建一个实例。
接下来,我将根据您的问题回答 -
1]您还需要为ec2
模块指定zone
参数。由于vpc_subnet_id
根据subnets:
- { zone: "us-east-1a", vpc_pvt_subnet: "subnet-abcdafa5"}
- { zone: "us-east-1b", vpc_pvt_subnet: "subnet-zyxwvb51"}
是动态的,我建议使用以下结构 -
在你的变种中 -
ec2
在- name: "Create kafka instances"
with_items: "{{ subnets }}"
ec2:
group: "{{ kafka_sg }}"
key_name: "{{ ec2_keypair }}"
region: "{{ region }}"
image: "{{ ami_id }}"
wait: true
instance_type: "{{ kafka_inst_type }}"
vpc_subnet_id: "{{ item.vpc_pvt_subnet }}"
zone: "{{ item.zone }}"
instance_tags:
Name: "kafka-instance"
Owner: "data"
exact_count: 1
count_tag:
Name: "kafka-instance"
register: ec2
任务 -
state
2]是的,即使一个实例已存在于具有“已停止”状态的子网中,上述方法也将始终创建新实例,就好像此实例从未存在过一样。如果您希望按标记显式启动“已停止”实例,则可以通过将ec2
参数传递给新的state
任务来实现此目的 - 您无法使用exact_count
和{{1} }参数在同一任务中一起。
希望这有帮助!