Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 设置后无法使用Ansible提取EC2公用_ip_Python 3.x_Amazon Ec2_Ansible_Ansible Template - Fatal编程技术网

Python 3.x 设置后无法使用Ansible提取EC2公用_ip

Python 3.x 设置后无法使用Ansible提取EC2公用_ip,python-3.x,amazon-ec2,ansible,ansible-template,Python 3.x,Amazon Ec2,Ansible,Ansible Template,我正在运行Ansible play以提供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: "

我正在运行Ansible play以提供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>
    }
}

但我不知道如何修改剧本。我在这里遗漏了什么?

这是引用值的正确方法

问题在于调试模块的使用。您应该使用:

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


当您在var参数中使用模板时,它已被解析,因此Ansible认为您需要名为1X.XX.XXX.X6的变量的值,而该变量当然不存在。

Cab您可以尝试:-debug:var=item.public\u ipcan您可以尝试以下操作:使用\u items:{ec2\u webserver1.instances[0]}
- debug: msg="{{ item.public_ip }}"
- debug: var=item.public_ip