2016-05-28 4 views
0

Ich versuche Ansible zu verwenden, um zwei Instanzen zu erstellen, jeweils eine in zwei Subnetzen, die die Wiedergabe unten verwenden. Ich verwende exact_count mit Tag Name, um Instanzen zu verfolgen. Es gibt zwei Probleme hier:Ansible: Instanzen in verschiedenen Subnetzen erstellen

  1. Ansible endet, erstellt zwei Instanzen im ersten Subnetz und meldet [ok] für das zweite Subnetz.
  2. Ansible scheint sich nicht um gestoppte Instanzen zu kümmern. Es erstellt neue Instanzen, anstatt bestehende zu starten oder zumindest als Teil der Instanzgruppe zu betrachten.
- name: Create kafka instances 
    with_items: 
     - "{{ vpc_pvt_subnet_2 }}" 
     - "{{ vpc_pvt_subnet_1 }}" 
    ec2:  
     group: "{{ kafka_sg }}" 
     key_name: "{{ ec2_keypair }}" 
     region: "{{ region }}" 
     image: "{{ ami_id }}" 
     wait: true 
     instance_type: "{{ kafka_inst_type }}" 
     vpc_subnet_id: "{{ item }}" 
     instance_tags: 
     Name: "kafka-instance"   
     Owner: data 
     exact_count: 2 
     count_tag: 
     Name: "kafka-instance" 
    register: ec2 

Kann mir bitte jemand sagen, was hier mit dem Textbuch falsch?

Antwort

2

Unter der Annahme, dass man 1 EC2 Instanz in jedem Subnetz, ein sichtbarer Fehler im Schnipsel Sie ist vorgesehen, erstellt werden soll, dass der Wert von exact_count sollte auf 1 (nicht mehr als 2), weil with_items schlingt ec2 Modul zweimal auszuführen eingestellt wird in dein Spielbuch. Sie möchten, dass jede Iteration genau 1 Instanz erstellt.

Als nächstes werde ich nach Ihren Fragen beantworten -

1] Sie müssen zone Parameter als auch auf ec2 Modul spezifizieren. Da zone dynamisch nach einem vpc_subnet_id, würde ich die folgende Struktur vorschlagen -

In Ihrem Vars -

subnets: 
    - { zone: "us-east-1a", vpc_pvt_subnet: "subnet-abcdafa5"} 
    - { zone: "us-east-1b", vpc_pvt_subnet: "subnet-zyxwvb51"} 

Im ec2 Aufgabe -

- name: "Create kafka instances" 
    with_items: "{{ subnets }}" 
    ec2: 
    group: "{{ kafka_sg }}" 
    key_name: "{{ ec2_keypair }}" 
    region: "{{ region }}" 
    image: "{{ ami_id }}" 
    wait: true 
    instance_type: "{{ kafka_inst_type }}" 
    vpc_subnet_id: "{{ item.vpc_pvt_subnet }}" 
    zone: "{{ item.zone }}" 
    instance_tags: 
     Name: "kafka-instance" 
     Owner: "data" 
    exact_count: 1 
    count_tag: 
     Name: "kafka-instance" 
    register: ec2 

2] Ja, die obige Art und Weise erstellt immer eine neue Instanz, auch wenn eine Instanz in einem Subnetz mit dem Status "Stopped" bereits existiert, als ob diese Instanz niemals existiert hätte. Wenn Sie die "gestoppten" Instanzen explizit mit Tags starten möchten, können Sie dies erreichen, indem Sie den Parameter state an eine neue ec2-Task übergeben. Sie können die Parameter state und exact_count nicht zusammen in derselben Task verwenden.

Hoffe, das hilft!

+0

Ihre Antwort auf die erste Frage hat mein Problem gelöst, obwohl ich nicht sicher bin, warum es nicht ausreicht, nur das Subnetz anzugeben. Mit anderen Worten, warum benötigt Ansible, dass ich die Zone erneut erwähne, da das Subnetz für immer an ein bestimmtes AZ gebunden ist? Ich hatte versucht, eine separate ec2-Aufgabe zu verwenden, um gestoppte Instanzen zu starten, aber ich stieß auf ein anderes Problem, an das ich mich nicht sofort erinnern kann. Ich denke, es hatte damit zu tun, dass die Instanzen gestartet wurden, bevor Konfigurationsaufgaben für sie ausgeführt wurden. Ich werde eine Antwort hinzufügen, nachdem ich dies erneut versuche (und dies als Antwort markieren). Danke! – urover

+0

@urover hast du jemals eine Chance bekommen, das zu testen? – rk2

Verwandte Themen