Siehe auch: /programming/29003420/reload-ansibles-dynamic-inventory .
Meine Frage: Gibt es eine bessere Möglichkeit, das zu tun, was unten steht?
Ich habe eine ansible Rolle, die AWS-Maschinen bereitstellt und korrekt ausgeführt wird (beachten Sie das provisionTag):
- name: AWS provision
hosts: localhost
gather_facts: no
vars_files:
- vars/dev.yml
user: ec2-user
roles:
- provision
tags:
- provision
Ich habe dann eine baseRolle, die ich unabhängig ausführen möchte (zum Beispiel während der Entwicklung, damit ich nicht auf die erneute Bereitstellung warten muss (beachten Sie das baseTag). Ich führe ein Spiel aus find running instances, in dem die Hosts gefiltert und gespeichert werden die Gruppe started:
- name: find running instances
hosts: localhost
vars_files:
- vars/dev.yml
gather_facts: no
tags:
- base
tasks:
- name: gather remote facts
ec2_remote_facts:
region: "{{ target_aws_region }}"
filters:
instance-state-name: running
"tag:Name": "{{ instance_name }}"
register: ec2_facts
- debug: var=ec2_facts
- name: add hosts to groups
add_host:
name: "{{ item.id }}"
ansible_ssh_host: "{{ item.public_dns_name }}"
groups: started
changed_when: false
with_items: ec2_facts.instances
- name: base setup
hosts: started
gather_facts: no
vars_files:
- vars/dev.yml
user: ec2-user
roles:
- base
tags:
- base
Meine Frage: Die Stücke funktionieren, aber gibt es einen besseren Weg, dies zu tun? Zum Beispiel wurde ich gather_facts: noverfolgt ec2_remote_factsund das filters- alles scheint ziemlich verworren.
Eine Klarstellung: Danke für den Kommentar zu ec2.py- ich benutze ihn bereits in meinem ersten Spiel (wenn ich die provisionRolle aufrufe).
Aber zu Testzwecken möchte ich in nachfolgende Spiele springen, ohne die (langsame) Bereitstellung erneut durchzuführen. Also wie kann ich meine Rechner Daten wieder bevölkern ? Wird ec2_remote_factsgefolgt von add_hostdem richtigen Weg? Oder kann ich irgendwie verwenden gather_facts: yes?