Amazon web services 使用ec2结果中的Ansible set_事实。
我见过几个例子,但是根据启动ec2 intances的结果设置IP是失败的。有人知道为什么吗? Iam使用ansible 2.0.1.0 在3个不同的子网中启动3个实例的任务正确地工作如下Amazon web services 使用ec2结果中的Ansible set_事实。,amazon-web-services,elasticsearch,amazon-ec2,ansible,Amazon Web Services,elasticsearch,Amazon Ec2,Ansible,我见过几个例子,但是根据启动ec2 intances的结果设置IP是失败的。有人知道为什么吗? Iam使用ansible 2.0.1.0 在3个不同的子网中启动3个实例的任务正确地工作如下 tasks: - name: elastic instance provisioning local_action: module: ec2 region: "{{ region }}" key_name: "{{ key }}" instance_type: "{{
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"}
您还可以循环上一个任务的结果:
- 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
。每个迭代提供两个项目item.0
是索引(0,1,2,…),而item.1
是实际内容。我猜每次迭代只捕获最后一个项目,模块可能只返回一个项目,因此实例应始终作为实例[0]
访问ec2.results[2]。实例[0]。private_-ip
谢谢,我会尝试一下,我想我知道我哪里弄糊涂了。同时,iam使用ansible启动一个用户数据文件,在每台服务器上运行bash命令来配置集群。但我会改正我的错误,尝试一下。