ansible - json_query сравнивает логическое значение с внешней переменной - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь сделать тест в ansible внутри json_query, сравнивая значение моего dict с другой переменной моего playbook:

Мой dict:

cust_pkg:
  - { name: "a" }
  - { name: "b", web: true }

Iкак вывод:

Когда web_host имеет значение true

dict_pkg:
  - { name: "a" }
  - { name: "b", web: true }

В противном случае (web_host false или undefined)

 dict_pkg:
  - { name: "a" }

Я пытаюсь так:

- set_fact:
    dict_pkg: "{{ cust_pkg | json_query(\"[?web == '\" + web_host + \"']\") }}"

Но, у меня есть эта ошибка:

{"msg": "Unexpected templating type error occurred on ({{ cust_pkg | json_query(\"[?web == '\" + web_host + \"']\") }}): cannot concatenate 'str' and 'bool' objects"}

Как мне тогда выполнить фильтрацию в зависимости от внешней логической переменной?

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Спасибо, вот и все:

---
- hosts: localhost
  gather_facts: false
  vars:
    cust_pkg:
      - { name: "a" }
      - { name: "b", web: true }

  tasks:

  - name: Step 1
    debug:
      msg: "{{ cust_pkg | json_query(\"[?web == nul || web == `\" + (web_host|default('false')|lower) + \"`]\") }}"

С выводом:

$ ansible-playbook test.yml

PLAY [localhost] ***************************************************************

TASK [Step 1] ******************************************************************
ok: [localhost] => {
    "msg": [
        {
            "name": "a"
        }
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

И:

$ ansible-playbook test.yml --extra-vars="web_host=true"

PLAY [localhost] ***************************************************************

TASK [Step 1] ******************************************************************
ok: [localhost] => {
    "msg": [
        {
            "name": "a"
        }, 
        {
            "name": "b", 
            "web": true
        }
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0   
0 голосов
/ 22 декабря 2018

не может объединить объекты 'str' и 'bool'

Насколько яснее вы хотели бы видеть сообщение об ошибке?

Что вам нужноявно приведите это значение к str, чтобы типы совпали:

dict_pkg: "{{ cust_pkg | json_query(\"[?web == `\" + (web_host|lower) + \"`]\") }}"

Затем вы, вероятно, захотите рассмотреть возможность изменения конструкции yaml, чтобы избежать кавычек:

dict_pkg: >-
   {{ cust_pkg | json_query("[?web == `" + (web_host|lower) + "`]") }}
...