2017-08-07 41 views
0

我正在运行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!", 

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

+1

出租车你尝试:' - debug:var = item.public_ip' – helloV

+0

你可以试试这个:with_items:“{{ec2_webserver1.instances [0]}}” –

回答

1

这是引用该值的正确方法。


问题在于使用debug模块。您应该使用:

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

或:

- debug: var=item.public_ip 

当您在var参数中使用的模板是解决了,所以Ansible认为你问名为1X.XX.XXX.X6(变量的值,当然, 不存在)。