Ich habe eine wirklich harte Zeit zu tun, was scheint wie eine ziemlich Standard-Aufgabe, so hoffe ich, jemand kann mir helfen. Ich habe das wie verrückt gegoogelt und die meisten Beispiele sind nicht in VPC oder verwenden veraltete Strukturen, die sie in meinem Anwendungsfall falsch oder unbrauchbar machen.Erstellen n neuer Instanzen in AWS EC2 VPC und dann konfigurieren
Hier sind meine Ziele:
- ich will (unten hat 3 der gleiche Code, aber es könnte ein hundert sein) ein ganzes Durcheinander von neuen Instanzen in meiner VPC starten
- Ich will warten für thoseinstances am leben zu kommen
- ich diese Instanzen dann konfiguriert werden soll (ssh in sie, Hostnamen ändern, einige Dienste, etc. etc. ermöglichen)
N Ich könnte das wahrscheinlich in 2 Aufgaben machen. Ich könnte die Instanzen in 1 Playbook erstellen. Warte, bis sie sich beruhigt haben. Führen Sie dann ein zweites Playbook aus, um sie zu konfigurieren. Wahrscheinlich werde ich das jetzt tun, weil ich in Bewegung kommen will - aber es muss eine einzige Antwort geben.
Hier ist, was ich bisher für ein Textbuch
---
- hosts: localhost
connection: local
gather_facts: False
tasks:
- name: Provision Lunch
with_items:
- hostname: eggroll1
- hostname: eggroll2
- hostname: eggroll3
ec2:
region: us-east-1
key_name: eggfooyong
vpc_subnet_id: subnet-8675309
instance_type: t2.micro
image: ami-8675309
wait: true
group_id: sg-8675309
exact_count: 1
count_tag:
Name: "{{ item.hostname }}"
instance_tags:
Name: "{{ item.hostname }}"
role: "supper"
ansibleowned: "True"
register: ec2
- name: Wait for SSH to come up
wait_for: host={{ item.private_ip }} port=22 delay=60 timeout=900 state=started
with_items: '{{ec2.instances}}'
- name: Update hostname on instances
hostname: name={{ item.private_ip }}
with_items: '{{ec2.instances}}'
Und die doens't Arbeit. Was ich bekomme, ist
TASK [Wait for SSH to come up] *************************************************
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.. This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
TASK [Update hostname on instances] ********************************************
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.. This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
Was mich traurig macht. Das ist jetzt meine letzte Inkarnation dieses Playbooks. Aber ich habe versucht, es mit jedem Beispiel neu zu schreiben, das ich im Internet finden kann. Die meisten von ihnen haben with_items auf eine andere Art geschrieben, aber ansible sagt mir, dass dieser Weg entzogen ist, und dann scheitert.
Bis jetzt war Ansible lustig und einfach, aber das lässt mich meinen Laptop über die Straße werfen.
Irgendwelche Vorschläge? Sollte ich überhaupt register und with_items benutzen? Würde ich besser mit etwas wie diesem sein:
add_host: hostname={{item.public_ip}} groupname=deploy
statt? Ich bin weit offen für eine Neufassung hier. Ich schreibe das in 2 Spielbüchern und würde gerne Vorschläge bekommen.
Danke!
**** EDIT **** Jetzt fängt es an, sich gebrochen oder ernsthaft verändert zu fühlen. Ich habe Dutzende von Beispielen gegooglet und alle sind auf die gleiche Weise geschrieben und alle scheitern mit dem gleichen Fehler. Das ist mein einfaches Spielbuch jetzt:
---
- hosts: localhost
connection: local
gather_facts: False
vars:
builderstart: 93
builderend: 94
tasks:
- name: Provision Lunch
ec2:
region: us-east-1
key_name: dakey
vpc_subnet_id: subnet-8675309
instance_type: t2.micro
image: ami-8675309
wait: True
group_id: sg-OU812
exact_count: 1
count_tag:
Name: "{{ item }}"
instance_tags:
Name: "{{ item }}"
role: "dostuff"
extracheese: "True"
register: ec2
with_sequence: start="{{builderstart}}" end="{{builderend}}" format=builder%03d
- name: the newies
debug: msg="{{ item }}"
with_items: "{{ ec2.instances }}"
Es könnte wirklich nicht einfacher sein. Egal wie ich es schreiben, egal, wie ich es variieren, bekomme ich die gleichen grundlegenden Fehler:
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.: 'dict object' has no attribute 'instances'.
So sieht es aus wie es die with_items ist: „{{ec2.instances}}“ Zeile, die den Fehler verursacht .
Ich habe Debug verwendet, um ec2 auszudrucken, und dieser Fehler sieht genau aus. Es sieht so aus, als hätte sich die Struktur zu mir verändert. Es sieht so aus, als ob ec2 jetzt ein Wörterbuch mit Ergebnissen als Schlüssel zu einem anderen Wörterbuchobjekt enthält und Instanzen ein Schlüssel in diesem Wörterbuch sind. Aber ich kann keinen vernünftigen Weg finden, auf die Daten zuzugreifen.
Für das, was es wert ist, ich in 2.0.1 versucht habe diesen Zugriff auf 2.0.2 und 2.2 und ich das gleiche Problem in jedem Fall erhalten.
sind der Rest von euch 1,9 oder etwas mit? Ich kann nirgends ein Beispiel finden, das funktioniert. Es ist sehr frustrierend.
Nochmals vielen Dank für jede Hilfe.
Müssen Sie das Paradigma der "veränderbaren Infrastruktur" verwenden? Eine Möglichkeit besteht darin, Ihre AMIs vorab mit Packer zu konfigurieren. Sie könnten Packer sogar Ihr Ansible-Playbook für Sie ausführen lassen. Dann können Sie das AMI einfach direkt starten. In Bezug auf Ihren Ansible-Fehler, nicht sicher in diesem. –
Nun, Ihr Problem hier ist in der Art und Weise, wie Sie EC2-Modul verwenden – vvchik
Sie könnten eine Autoscaling-Gruppe verwenden, um die ec2 hinzufügen, dann haben Sie ein Ende der Konfiguration – Vorsprung