melde ich mich eine Liste mit variabler lxcs_info.results
in meinem ansible Textbuch, das mit folgenden LXC bezogenen Daten aufgefüllt wird:Wie kann man eine String-Bedingung tief in Ansible List-Variable testen?
ok: [webserver] => {
"lxcs_info": {
"changed": false,
"results": [
{
"_ansible_item_result": true,
"changed": false,
"invocation": {
"module_args": {
"name": "cndev",
"state": "started",
"template": "ubuntu",
},
"module_name": "lxc_container"
},
"item": {
"backing_store": "dir", ,
"container_config": [
"lxc.group = dev",
"lxc.group = mdblxc",
"lxc.network.type = veth",
"lxc.network.link = lxcbr0"
],
"name": "cndev",
"state": "started",
"template": "ubuntu",
},
"lxc_container": {
"interfaces": [
"eth0",
"lo"
],
"ips": [
"10.0.3.2"
],
"name": "cndev",
"state": "running"
}
},
{
# another result-item like the above
},
{
# yet another item with same structure as above
}
]
}
}
Wie ich bin interessiert an dem container_config
-Abschnitt meist, ich brauche eine Aufgabe, die einen Befehl ausführt basierend auf der Bedingung des Inhalts dieser Elemente, insbesondere unter der Bedingung, dass Inhalt in der item.container_config ist genau lxc.group = mdblxc
. Wie soll ich die when
-Klausel dafür schreiben? Ich habe mit der untenen Aufgabe versucht,
- name: Test task
debug: msg="Found mdblxc in {{ item }}"
with_items: lxcs_info.results
when: item.item.container_config.0.lxc.group == "mdblxc"
, aber es funktioniert nicht - ansible-Textbuch wird mit Fehler:
fatal: [webserver]: FAILED! => {
"failed": true,
"msg": "The conditional check '(item.item.container_config.0.lxc.group == \"mdblxc\")' failed.
The error was: error while evaluating conditional ((item.item.container_config.0.lxc.group == \"mdblxc\"): 'unicode object' has no attribute 'lxc'
The error appears to have been in 'mytask.yaml': line nnn, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
with_items: lxcs_info.results
- name: Test task
^here
"
}
Thanks @ konstantin-suvorov für Ihre richtige Antwort! Ich hatte bemerkt, dass die yaml/json-Liste diese String-Elemente tief in der Struktur hat, aber keine Möglichkeit gefunden hatte, diese in Vergleichsoperationen in Tasks anzusteuern, aber jetzt funktioniert dein A und in meinem Playbook habe ich es etwas erweitert (um auf meine Bedürfnisse bei der Aufgabenstellung eingehen zu können). So sieht die when-Klausel im Produktions-Playbook aus: –
'when: '(" lxc.group = mdblxc "in item.container_config und" dbserver "== inventory_hostname) oder (" lxc.group = weblxc "in item. container_config und "webserver" == inventory_hostname) ' –
Hmm. scheint, dass der Abschlag in diesen Kommentaren nicht funktioniert (die "at" und back-ticks haben in den obigen Kommentaren keine Auswirkung), weiß nicht warum;) –