Ich habe eine Variable namens "Netzwerk" in Ansible registriert:
{
"addresses": {
"private_ext": [
{
"type": "fixed",
"addr": "172.16.2.100"
}
],
"private_man": [
{
"type": "fixed",
"addr": "172.16.1.100"
},
{
"type": "floating",
"addr": "10.90.80.10"
}
]
}
}
Ist es möglich, die IP-Adresse ("addr") mit type = "float" abzurufen?
- debug: var={{ network.addresses.private_man | filter type="fixed" | get "addr" }}
Ich weiß, dass die Syntax falsch ist, aber Sie haben die Idee.
Um eine Liste von Diktaten zu filtern, können Sie den Selectattr-Filter zusammen mit dem Equalto-Test verwenden :
Für das oben Gesagte ist Jinja2 v2.8 oder höher erforderlich (unabhängig von der Ansible-Version).
Ansible hat auch die Tests
match
undsearch
, die reguläre Ausdrücke nehmen:Um die Liste der Diktate auf eine Liste von Zeichenfolgen zu reduzieren, sodass Sie nur eine Liste der
addr
Felder erhalten, können Sie den Kartenfilter verwenden :Oder wenn Sie eine durch Kommas getrennte Zeichenfolge möchten:
Zusammen würde es so aussehen.
quelle
{{ network.addresses.private_man | selectattr("type", "equalto", "fixed") | map(attribute='addr') | list }}
Nicht unbedingt besser, aber da es schön ist, Optionen zu haben, geht es hier mit Jinja-Anweisungen so :
Oder wenn Sie es vorziehen, alles in eine Zeile zu setzen:
Welches kehrt zurück:
quelle