зарегистрировать список переменных lxcs_info.results
в моем анзибле PlayBook, который заполняется со следующей LXC данных, связанными с:Как проверить строку condtion глубоко в переменной Ansible list?
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
}
]
}
}
Как я заинтересован в container_config
-сече- в основном, мне нужна задача, которая выполняет команду основанный на условии содержания этих элементов, в частности, при условии, что содержимое в item.container_config действительно lxc.group = mdblxc
.
Как мне написать when
-clause? Я попытался с ниже задачи,
- name: Test task
debug: msg="Found mdblxc in {{ item }}"
with_items: lxcs_info.results
when: item.item.container_config.0.lxc.group == "mdblxc"
, но он не работает - анзибль-Playbook с ошибкой:
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
"
}
Спасибо @ константин-Суворова за правильный ответ! Я заметил, что список yaml/json содержит эти строковые элементы в глубине структуры, но не нашел способ настроить их для сравнения в задачах, но теперь ваш A работает, и в моей пьесе я немного расширил его (для удовлетворения моих потребностей в задаче). Вот как выглядит выражение when-where в рабочей книге: –
'when: '(" lxc.group = mdblxc "в item.container_config и" dbserver "== inventory_hostname) или (" lxc.group = weblxc "в элементе. container_config и "webserver" == inventory_hostname) ' –
Хмм. кажется, что уценка не работает в этих комментариях («at» и back-ticks не влияют на мои комментарии), не знаю, почему;) –