无法从EC2结果获取专用IP

时间:2019-05-11 17:46:00

标签: ansible

尝试创建一个剧本,让我选择是否要通过传递外部变量来实现即期或按需EC2,除了从结果中获取专用ip并将其设置为进一步使用的部分之外,其他一切都很好。

我尝试了不同的路径,例如item.instances [0] .private_ip 似乎无法找到合适的人。

---

- hosts: localhost
  tasks:
  - name: when true
    ec2:
      region: us-east-1
      instance_type: t2.nano
      key_name: test_key
      instance_type: t2.micro
      image: ami-0aec0138b2*****
      wait: yes
      count: 1
      vpc_subnet_id: subnet-00fdda1452d****
      assign_public_ip: no
      spot_price: 1
    register: ci_ec2_true
    when: var == "true"


  - name: when false
    ec2:
      region: us-east-1
      instance_type: t2.nano
      key_name: test_key
      instance_type: t2.micro
      image: ami-0aec0138b2****
      wait: yes
      count: 1
      vpc_subnet_id: subnet-00fdda1452d0****
      assign_public_ip: no
    register: ci_ec2_false
    when: var == "false"



  - name: ci_ec2_true
    debug:
      msg: "{{ ci_ec2_true }}"

  - name: Spot / On-demand var router
    set_fact:
      ci_ec2: "{{ ci_ec2_true if ci_ec2_false is skipped else ci_ec2_false }}"


  - name: debug ci_ec2
    debug:
      msg: "{{ ci_ec2 }}"

  - name: ec2_prov - set fact for all ci_machine_ips
    set_fact: private_ips="{{ item.instances[0].private_ip }}"
    with_items: "{{ ci_ec2 }}"
    register: ci_ec2_ip_results

  - debug:
      msg: "{{ ci_ec2_ip_results }}"

预期结果应该是私有ip值,而不是我收到此错误:

TASK [ec2_prov - set fact for all ci_machine_ips] ******************************
**********
fatal: [localhost]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'ansible.vars.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'instances'\n\nThe error appears to have been in '/root/test/when-create.yml': line 50, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: ec2_prov - set fact for all ci_machine_ips\n    ^ here\n"}

用于运行剧本的命令是:

ansible-playbook when-create.yml -e var=true
TASK [debug ci_ec2] ************************************************************

ok: [localhost] => {
    "msg": {
        "changed": true,
        "instance_ids": [
            "i-0485794cd8a299b27"
        ],
        "instances": [
            {
                "ami_launch_index": "0",
                "architecture": "x86_64",
                "block_device_mapping": {
                    "/dev/xvda": {
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "vol-0cd42f8696aef9bbd"
                    }
                },
                "dns_name": "",
                "ebs_optimized": false,
                "groups": {
                    "sg-07c7177c": "default"
                },
                "hypervisor": "xen",
                "id": "i-0485794cd8a299b27",
                "image_id": "ami-0aec0138b2a5****",
                "instance_type": "t2.micro",
                "kernel": null,
                "key_name": "test_Key",
                "launch_time": "2019-05-11T16:41:10.000Z",
                "placement": "us-east-1a",
                "private_dns_name": "ip-10-220-129-224.ec2.internal",
                "private_ip": "10.220.129.224",
                "public_dns_name": "",
                "public_ip": null,
                "ramdisk": null,
                "region": "us-east-1",
                "root_device_name": "/dev/xvda",
                "root_device_type": "ebs",
                "state": "running",
                "state_code": 16,
                "tags": {
                    "Created_By": "InstanceLaunch"
                },
                "tenancy": "default",
                "virtualization_type": "hvm"
            }
        ],
        "tagged_instances": []
    }
}

1 个答案:

答案 0 :(得分:0)

所以最终我找到了方法...

<div class='MemoryCards'></div>