2016-10-11 3 views
0

зарегистрировать список переменных 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 
     " 
} 

ответ

0

Если вы обратите пристальное внимание на container_config, вы заметили, что список строковых элементов.
Вы не можете получить доступ к lxc.group строки "lxc.group = mdblxc".

Таким образом, вы when заявления должны выглядеть следующим образом:

when: '"lxc.group = mdblxc" in item.item.container_config' 
+0

Спасибо @ константин-Суворова за правильный ответ! Я заметил, что список yaml/json содержит эти строковые элементы в глубине структуры, но не нашел способ настроить их для сравнения в задачах, но теперь ваш A работает, и в моей пьесе я немного расширил его (для удовлетворения моих потребностей в задаче). Вот как выглядит выражение when-where в рабочей книге: –

+0

'when: '(" lxc.group = mdblxc "в item.container_config и" dbserver "== inventory_hostname) или (" lxc.group = weblxc "в элементе. container_config и "webserver" == inventory_hostname) ' –

+0

Хмм. кажется, что уценка не работает в этих комментариях («at» и back-ticks не влияют на мои комментарии), не знаю, почему;) –