2017-08-07 46 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(變量的值,當然, 不存在)。