Сопоставить точную строку с массивом / списком - Ansible - PullRequest
0 голосов
/ 27 февраля 2020

Переменная service_name выводит следующее.

"msg": [
    "BLAH PEX",
    "BLAH AEX non prod",
    "BLAH BIND",
    "BLAH DBFactory"
]

Я хочу сопоставить переменную BSA, которая содержит строку BLAH BIND. Я пробовал что-то вроде этого:

- debug:
    msg: "Match found"
  when: "BSA in service_name"

Это работает! Но проблема в том, что он также совпадает, если BSA содержит строку BLAH. Я хочу, чтобы он совпадал только при точном совпадении. Прямо сейчас это соответствует слово за словом, я думаю.

Ожидаемый вывод: следует пропустить задачу отладки, поскольку, если BSA содержит строку BLAH, она не должна совпадать ни с одной строкой в ​​списке service_name.

Любая помощь, как добиться, чтобы соответствовать всей точной строке в массиве.

Я использую ansible 2.7

1 Ответ

1 голос
/ 27 февраля 2020

Q: "Ожидаемый вывод: он должен пропустить задачу отладки, потому что, когда BSA содержит строку BLAH, он не должен совпадать ни с одной строкой в ​​списке service_name."

A: Это работает, как ожидалось. Строка "BLAH" не совпадает, и задача отладки пропускается.

- hosts: localhost
  vars:
    service_name: [ "BLAH PEX", "BLAH AEX non prod", "BLAH BIND", "BLAH DBFactory" ]
    BSA: "BLAH"

  tasks:
    - debug:
        var: service_name
    - debug:
        var: BSA
    - debug:
        msg: "Match found"
      when: "BSA in service_name"
    - debug:
        msg: "Continue"

дает

shell> ansible-playbook playbook.yml

PLAY [localhost] ***

TASK [debug] ***
ok: [localhost] => {
    "service_name": [
        "BLAH PEX", 
        "BLAH AEX non prod", 
        "BLAH BIND", 
        "BLAH DBFactory"
    ]
}

TASK [debug] ***
ok: [localhost] => {
    "BSA": "BLAH"
}

TASK [debug] ***
skipping: [localhost]

TASK [debug] ***
ok: [localhost] => {
    "msg": "Continue"
}

PLAY RECAP ***
localhost: ok=3  changed=0  unreachable=0  failed=0  skipped=1  rescued=0  ignored=0
...