Mein grundlegendes Problem ist, dass bei der Erstellung einer Reihe von AWS-Servern ich möchte sie konfigurieren, um voneinander zu wissen.Ist es möglich Listen mit Ansible/Jinja2 zu plätten?
Nach der Erstellung jedes Servers werden ihre Daten in einer registrierten "Server" -Var gespeichert (siehe unten). Was ich möchte in der Lage zu tun, wirklich nach der Erstellung einer Aufgabe wie so ausgeführt wird:
- name: Add servers details to all other servers
lineinfile:
dest: /path/to/configfile
line: "servername={{ item.1.private_ip }}"
delegate_to: "{{ item.0.public_dns_name }}"
with_nested:
- list_of_servers
- list_of_servers
Versorgung der Liste zweimal zu ‚with_nested‘ ist hier unerlässlich.
eine Liste der Liste zu bekommen ist leicht genug, um mit dem zu tun:
"{{ servers.results | map(attribute='tagged_instances') | list }}"
, die zurückgibt:
[
[ { "private_ip": "ip1", "public_dns_name": "dns1" } , { ... }],
[ { ... }, { ... } ]
]
aber wie würden Sie diese in drehen:
[
{ "private_ip": "ip1", "public_dns_name": "dns1" },
{ ... },
{ ... },
{ ... }
]
Die ' Die registrierte Var des Servers sieht so aus:
"servers": {
"changed": true,
"msg": "All items completed",
"results": [
{
...
"tagged_instances": [
{
...
"private_ip": "ip1",
"public_dns_name": "dns1",
...
},
{
...
"private_ip": "ip2",
"public_dns_name": "dns2",
...
}
]
},
{
...
"tagged_instances": [
{
...
"private_ip": "ip3",
"public_dns_name": "dn3",
...
},
{
...
"private_ip": "ip4",
"public_dns_name": "dns4",
...
}
]
},
...
]
}
Hinweis: Ich habe eine ziemlich hässliche Lösung, indem ich 'with_flattened' und eine Debug-Anweisung verwende, um eine neue registrierte var 'flattened_servers' zu erstellen, die ich dann erneut abbilde. Aber ich hoffe auf eine elegantere Lösung :)
Dies ist definitiv eine große Verbesserung der laufenden Schleifen in Yml! Wird sehen, ob jemand weiß, wie man ein Listenverständnis in jinja2 macht. Ansonsten ist dies wahrscheinlich die Antwort. – TomDotTom
Jinja unterstützt offiziell keine List Comprehensions oder andere "fortgeschrittene" Python-Operationen: http://jinja.pocoo.org/docs/dev/faq/#isn-t-it-a-terrible-idea-to-put- Logik-in-Vorlagen. Ich habe "Jinja2 Listenverständnis" zu oft gegoogelt, um es zu vergessen. :( – thankyour