2016-03-21 23 views
0

Birkaç örnek gördüm, ancak IP'yi ec2 sürümlerini başlatma sonuçlarından çıkarmak başarısız oluyor. Herkesin bir fikri var mı? Iam kullanarak ynsel 2.0.1.0ec2 sonuçlarından Ansible set_fact kullanın.

3 farklı alt ağda 3 örneği başlatmak için görev aşağıdaki gibi düzgün şekilde çalışır.

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 }}" 

ben hata ayıklama ve beklenen sonuç

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

olsun Ama oyun kitabında Bundan sonraki bölüm başarısız olabilir.

- 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 

Hata ayıklama sonuçları aşağıdaki gibidir. Ne yapacağından emin değilim.

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

Sadece son öğeyi yakaladım sanırım – Vor

+1

Yineleme sırasında modül muhtemelen yalnızca bir öğe döndürecek, bu nedenle örneğe her zaman "örnekler [0]" olarak erişilmesi gerekir. ec2.results [2] .instances [0] .private_ip' – udondan

cevap

0

Ayrıca, önceki görevin sonuçları üzerinde döngü edebilirsiniz:

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

burada yaklaşık item.0 ve item.1 karıştırılmamalıdır etmeyin. The with_indexed_items loop, yineleme başına iki öğe sağlar. item.0, dizin (0, 1, 2, ...) ve item.1 gerçek içeriğidir.

+0

Teşekkür ederim, bunu deneyeceğim, sanırım kafamın karıştığını görüyorum. Küme yapılandırmak için her sunucuda bir bash komutlarını çalıştırmak için user_data dosya ile başlatmak için ansible kullanarak ortalama zamanda. Ama hatalarımı düzeltir ve ona bir şey verir. –