Проверить подстроку со специальным символом в списке - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть список с некоторыми именами ландшафта приложения, и мне нужно найти конкретное c приложение со специальными символами в Jinja2

landscape_list: ["cmdb: app1 landscape", "cmdb : app2 (ex app3) landscape "," cmdb: app4 landscape "]
app_to_look:" app2 (ex app3) "

Я пытаюсь использовать этот код для проверки списка:

{{landscape_list | select('search',land_key) | list | count > 0}}

Но я всегда получаю 0, когда пытаюсь протестировать "app2 (ex app3)".
Я думаю, что эта проблема связана со специальными символами, такими как ().

Можно ли посмотреть список для этого конкретного c приложения в jinja2?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Я использую аналогичный метод. Вместо использования search я использовал содержит в качестве метода поиска

{{completed_list | select('contains',solution_search) | list | count > 0}}

solution_search содержит полное имя того, что я ищу.

{%-set solution_search = env_key ~' '~env_server_key ~' TEST'-%}

Где env_key - это имя приложения, которое может содержать специальные символы, а env_server_key - это среда приложения.

0 голосов
/ 17 февраля 2020

Q: "Эта проблема связана со специальными символами, такими как ()."

A: Да. Скобка должна быть экранирована в регулярном выражении. Например

    - set_fact:
        land_key: 'app2 \(ex app3\)'
    - debug:
        msg: "{{ landscape_list|select('search', land_key)|list }}"
    - debug:
        msg: "{{ landscape_list|select('search', land_key)|list|length }}"
    - debug:
        msg: One or more items match the searched pattern.
      when: landscape_list|select('search', land_key)|list|length > 0

дать

    "msg": [
        "cmdb:app2 (ex app3) landscape"
    ]

    "msg": "1"

    "msg": "One or more items match the searched pattern."
...