2016-03-21 19 views
0

私はいくつかの例を見てきましたが、ec2のインスタンスを起動した結果からIPを設定するのは失敗しています。誰もがなぜアイデアを持っていますか? Iam in ansible 2.0.1.0ec2の結果から不可能なset_factを使用します。

3つの異なるサブネットで3つのインスタンスを起動するタスクは、次のように重要です。

tasks: 
- name: elastic instance provisioning 
    local_action: 
    module: ec2 
    region: "{{ region }}" 
    key_name: "{{ key }}" 
    instance_type: "{{ instance_type }}" 
    image: "{{ image }}" 
    user_data: "{{ lookup('file', '/etc/ansible/host_vars/elasticsearch/user_data') }}" 
    key_name: "{{ key }}" 
    wait: yes 
    count: 1 
    group: ["{{ main_sg }}", "{{ jenkins_sg}}"] 
    instance_tags: 
     Name: elastic-test-cluster 
     class: database 
     environment: staging 
    vpc_subnet_id: "{{ item }}" 
    assign_public_ip: no 
    with_items: 
    - "{{ private_subnet_1 }}" 
    - "{{ private_subnet_2 }}" 
    - "{{ private_subnet_3 }}" 
    register: ec2 
- debug: msg="{{ ec2.results[0].instances[0].private_ip }}" 

私はデバッグすることができ、その結果

TASK [debug]  
ok: [localhost] => { 
"msg": "10.1.100.190" 
} 

しかし、失敗した脚本で、この次のパート予想ます。

- name: Add Ip for each Server 
    set_fact: 
    instance_private_ip0: "{{ ec2.results[0].instances[0].private_ip }}" 
    instance_private_ip1: "{{ ec2.results[1].instances[1].private_ip }}" 
    instance_private_ip2: "{{ ec2.results[2].instances[2].private_ip }}" 
    register: result 
- debug: var=result 

デバッグの結果は次のとおりです。それをどうするかわからない。

fatal: [localhost]: FAILED! => {"failed": true, "msg": "list object has no element 1"} 
+0

最終アイテムをキャプチャしていると思います。 – Vor

+1

モジュールはたぶん1つのアイテムしか返さないため、インスタンスは常にインスタンス[0] 'としてアクセスされます。 'ec2.results [2] .instances [0] .private_ip' – udondan

答えて

0

また、前のタスクの結果をループすることができます

- name: Add Ip for each Server 
    set_fact: 
    instance_private_ip{{ item.0 }}: "{{ item.1.instances[0].private_ip }}" 
    with_indexed_items: "{{ ec2.results }}" 

はここについて item.0item.1を混同しないでください。 The with_indexed_items loopは、反復ごとに2つのアイテムを提供します。 item.0はインデックス(0,1,2、...)で、 item.1は実際のコンテンツです。

+0

ありがとう、私はそれを試してみる、私は混乱している場所を見ていると思う。その間、user_dataファイルを起動して各サーバでbashコマンドを実行してクラスタを設定することができます。しかし、私の間違いを訂正し、それを行ってください。 –

関連する問題