预置后无法使用 Ansible 提取 EC2 public_ip



我正在运行一个 Ansible 播放来预置 EC2 实例,但我无法提取public_ip参数。这是重头戏:

---
- name: Launch the new EC2 Instance
local_action:
module: ec2
group_id: "{{ webserver_firewall.group_id }}"
instance_type: "{{ instance_type}}"
image: "{{ ami_id }}"
region: "{{ aws_region }}"
count: "{{ count }}"
key_name: "{{ key_name }}"
wait: yes
volumes:
- device_name: /dev/sda1
volume_type: gp2
volume_size: 10
delete_on_termination: true
instance_tags:
Name: aws-webserver
register: ec2_webserver1
- debug: var="{{ item.public_ip }}"
with_items: "{{ ec2_webserver1.instances }}"

下面是调试输出的一部分:

ok: [localhost] => (item={u'kernel': None, u'root_device_type': u'ebs', <snip>, u'public_ip': u'1X.XX.XXX.X6', <snip>, u'root_device_name': u'/dev/sda1', u'hypervisor': u'xen'}) => {                  
"1X.XX.XXX.X6": "VARIABLE IS NOT DEFINED!", 
"item": {
"ami_launch_index": "1", 
"architecture": "x86_64", 
<snip> 
"public_ip": "1X.XX.XXX.X6", 
"root_device_name": "/dev/sda1", 
"root_device_type": "ebs", 
"state": "running", 
"hypervisor": "xen",
<snip>
}
}

如果我尝试配置一个实例(count: 1(,那么我可以使用ec2_webserver1.instances[0]['public_ip']提取IP - 我不确定这是提取 IP 的正确方法。我猜这可能是错误的相关部分:

"1X.XX.XXX.X6": "VARIABLE IS NOT DEFINED!", 

但不确定如何修改播放。我在这里错过了什么?

这是引用值的正确方法。


问题出在debug模块的使用上。您应该使用:

- debug: msg="{{ item.public_ip }}"

或:

- debug: var=item.public_ip

当你在参数中使用模板时var它被解析了,所以 Ansible 认为你要求名为1X.XX.XXX.X6的变量的值(当然,它不存在(。

相关内容

  • 没有找到相关文章

最新更新