我已经看过几个例子,但是从启动ec2内容的结果中设置IP是失败的。有谁知道为什么? 我使用ansible 2.0.1.0
在3个不同子网中启动3个实例的任务核心工作如下。
tasks:
- name: elastic instance provisioning
local_action:
module: ec2
region: "{{ region }}"
key_name: "{{ key }}"
instance_type: "{{ instance_type }}"
image: "{{ image }}"
user_data: "{{ lookup('file', '/etc/ansible/host_vars/elasticsearch/user_data') }}"
key_name: "{{ key }}"
wait: yes
count: 1
group: ["{{ main_sg }}", "{{ jenkins_sg}}"]
instance_tags:
Name: elastic-test-cluster
class: database
environment: staging
vpc_subnet_id: "{{ item }}"
assign_public_ip: no
with_items:
- "{{ private_subnet_1 }}"
- "{{ private_subnet_2 }}"
- "{{ private_subnet_3 }}"
register: ec2
- debug: msg="{{ ec2.results[0].instances[0].private_ip }}"
我可以调试并获得预期的结果
TASK [debug]
ok: [localhost] => {
"msg": "10.1.100.190"
}
但剧本中的下一部分失败了。
- name: Add Ip for each Server
set_fact:
instance_private_ip0: "{{ ec2.results[0].instances[0].private_ip }}"
instance_private_ip1: "{{ ec2.results[1].instances[1].private_ip }}"
instance_private_ip2: "{{ ec2.results[2].instances[2].private_ip }}"
register: result
- debug: var=result
调试的结果如下。不知道该怎么做。
fatal: [localhost]: FAILED! => {"failed": true, "msg": "list object has no element 1"}
答案 0 :(得分:0)
您还可以循环上一个任务的结果:
- name: Add Ip for each Server
set_fact:
instance_private_ip{{ item.0 }}: "{{ item.1.instances[0].private_ip }}"
with_indexed_items: "{{ ec2.results }}"
不要在这里混淆item.0
和item.1
。 The with_indexed_items
loop每次迭代提供两个项目。 item.0
是索引(0,1,2,...),item.1
是实际内容。