2016-09-28 74 views
0

我有一個創建一個ec2實例的劇本,並從該創建我想註冊輸出爲var。從那裏我會使用註冊的var創建並附加一個ebs卷。不過,我遇到了以下錯誤。註冊ec2創建變量的問題

- name: Create EC2 instance for zone A 
    ec2: 
    key_name: "{{ keypair }}" 
    group: "{{ security_groups }}" 
    image: "{{ ami }}" 
    instance_type: "{{ instance_type }}" 
    wait: true 
    region: "{{ ec2_region }}" 
    vpc_subnet_id: "{{ subneta }}" 
    assign_public_ip: "{{ public_choice }}" 
    zone: "{{ zonea }}" 
    count: 1 
    instance_tags: 
     Name: "db{{ item }}a.{{ env }}" 
     envtype: "{{ envtype }}" 
    register: ec2 
    with_sequence: "start=1 end={{ num }}" 


- debug: 
    msg: "{{ ec2 }}" 
- debug: 
    msg: "{{ ec2.instance_ids }}" 

有了這個,我得到以下輸出

[email protected]:/etc/ansible/roles/db_ec2/tasks > ansible-playbook db_ec2.yml -e 'env=qa num=1 ebs=true' 
______ 
<PLAY> 
------ 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

______________________ 
< TASK [db_ec2 : fail] > 
---------------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

_______________________ 
< TASK [db_ec2 : debug] > 
----------------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

ok: [localhost] => { 
    "msg": "If you need to change any default variables for this playbook edit vars/qa.yml and vars/ebs.yml for ebs configs" 
} 
_________________________ 
< TASK [db_ec2 : include] > 
------------------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

included: /etc/ansible/roles/db_ec2/tasks/./db_create.yml for localhost 
________________________________________________ 
< TASK [db_ec2 : Create EC2 instance for zone A] > 
------------------------------------------------ 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

changed: [localhost] => (item=1) 
_______________________ 
< TASK [db_ec2 : debug] > 
----------------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

ok: [localhost] => { 
    "msg": { 
     "changed": true, 
     "msg": "All items completed", 
     "results": [ 
      { 
       "_ansible_no_log": false, 
       "changed": true, 
       "instance_ids": [ 
        "i-1046c108" 
       ], 
       "instances": [ 
        { 
         "ami_launch_index": "0", 
         "architecture": "x86_64", 
         "block_device_mapping": { 
          "/dev/sda1": { 
           "delete_on_termination": true, 
           "status": "attached", 
           "volume_id": "vol-55812edd" 
          } 
         }, 
         "dns_name": "", 
         "ebs_optimized": false, 
         "groups": { 
          "sg-749f3c0d": "qa-ssh", 
          "sg-8f983bf6": "qa-db" 
         }, 
         "hypervisor": "xen", 
         "id": "i-1046c108", 
         "image_id": "ami-55e31a35", 
         "instance_type": "m4.xlarge", 
         "kernel": null, 
         "key_name": "ccpkey", 
         "launch_time": "2016-09-28T00:28:00.000Z", 
         "placement": "us-west-2a", 
         "private_dns_name": "ip-10-50-36-201.us-west-2.compute.internal", 
         "private_ip": "10.50.36.201", 
         "public_dns_name": "", 
         "public_ip": null, 
         "ramdisk": null, 
         "region": "us-west-2", 
         "root_device_name": "/dev/sda1", 
         "root_device_type": "ebs", 
         "state": "running", 
         "state_code": 16, 
         "tags": { 
          "Name": "db1a.qa", 
          "envtype": "qa-db" 
         }, 
         "tenancy": "default", 
         "virtualization_type": "hvm" 
        } 
       ], 
       "invocation": { 
        "module_args": { 
         "assign_public_ip": false, 
         "aws_access_key": null, 
         "aws_secret_key": null, 
         "count": 1, 
         "count_tag": null, 
         "ebs_optimized": false, 
         "ec2_url": null, 
         "exact_count": null, 
         "group": [ 
          "qa-db", 
          "qa-ssh" 
         ], 
         "group_id": null, 
         "id": null, 
         "image": "ami-55e31a35", 
         "instance_ids": null, 
         "instance_profile_name": null, 
         "instance_tags": { 
          "Name": "db1a.qa", 
          "envtype": "qa-db" 
         }, 
         "instance_type": "m4.xlarge", 
         "kernel": null, 
         "key_name": "ccpkey", 
         "monitoring": false, 
         "network_interfaces": null, 
         "placement_group": null, 
         "private_ip": null, 
         "profile": null, 
         "ramdisk": null, 
         "region": "us-west-2", 
         "security_token": null, 
         "source_dest_check": true, 
         "spot_price": null, 
         "spot_type": "one-time", 
         "spot_wait_timeout": 600, 
         "state": "present", 
         "tenancy": "default", 
         "termination_protection": false, 
         "user_data": null, 
         "validate_certs": true, 
         "volumes": null, 
         "vpc_subnet_id": "subnet-5d625c39", 
         "wait": true, 
         "wait_timeout": 300, 
         "zone": "us-west-2a" 
        }, 
        "module_name": "ec2" 
       }, 
       "item": "1", 
       "tagged_instances": [] 
      } 
     ] 
    } 
} 
_______________________ 
< TASK [db_ec2 : debug] > 
----------------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

fatal: [localhost]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'instance_ids'"} 
____________ 
< PLAY RECAP > 
------------ 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

localhost     : ok=4 changed=1 unreachable=0 failed=1 

所以我可以看到,應該存在變量確實在充分EC2變量的輸出。但是,試圖利用ec2.instance_ids的失敗的關鍵特定變量...

編輯時:

這似乎是特定於with_sequence。如果我刪除序列並將其更改爲這樣的內容。

- name: Create EC2 instance for zone A 
    ec2: 
    key_name: "{{ keypair }}" 
    group: "{{ security_groups }}" 
    image: "{{ ami }}" 
    instance_type: "{{ instance_type }}" 
    region: "{{ ec2_region }}" 
    vpc_subnet_id: "{{ subneta }}" 
    assign_public_ip: "{{ public_choice }}" 
    zone: "{{ zonea }}" 
    count: "{{ num }}" 
    wait: true 
    instance_tags: 
     envtype: "{{ envtype }}" 
    register: ec2 

- debug: 
    msg: "{{ item.id }}" 
    with_items: "{{ ec2.instances }}" 

我不再有任何錯誤,它打印實例ID沒有問題。

回答

1

不知道如何with_sequence會影響到這裏,但我看到這裏至少有一個基本問題。

當您註冊EC2任務的一個名爲「EC2」可變輸出,你可以參考instance_ids具有以下 -

ec2.results[0].instance_ids 

Ansible任務是抱怨,因爲沒有命名爲頂級鍵「 「ec2」中的「instance_ids」,而是出現在「ec2」中的「results」鍵中。

希望這是有道理的,除非我錯誤地解釋你的問題。

+0

啊,那完全是我所錯過的。在這裏謝謝你的答案,這正是我所需要的。 – stobiewankenobi

+0

酷!很高興幫助! – rk2