Как выполнить поиск по регулярному выражению с использованием переменных в Ansible - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь сопоставить регулярные выражения в Ansible (2.7), используя переменную, инициализированную в начале скрипта

Переменная, используемая для соответствия регулярному выражению-

group: 12

Ниже приведена строка кода, которая должна соответствовать

set_fact: run_pc="{{ lacp_output|select("match","Po{{ group }}") | list}}"

Вводится список, написанный ниже -

lacp_output = 
["Flags:  D - Down        P - Up in port-channel (members)",
        "        I - Individual  H - Hot-standby (LACP only)",
        "        s - Suspended   r - Module-removed",
        "        S - Switched    R - Routed",
        "        U - Up (port-channel)",
        "        M - Not in use. Min-links not met",
        "--------------------------------------------------------------------------------",
        "Group Port-       Type     Protocol  Member Ports",
        "      Channel",
        "--------------------------------------------------------------------------------",
        "10    Po10(SD)    Eth      NONE      --",
        "11    Po11(SU)    Eth      LACP      Eth1/1(P)    Eth1/2(P)    ",
        "12    Po12(SU)    Eth      LACP      Eth1/3(P)    Eth1/4(P)    ",
        "100   Po100(SD)   Eth      NONE      --",
        "121   Po121(SD)   Eth      NONE      --",
        "122   Po122(SD)   Eth      LACP      Eth2/1(D)    ",
        "123   Po123(SD)   Eth      NONE      --",
        "125   Po125(SD)   Eth      NONE      --",
        "322   Po322(SD)   Eth      NONE      --",
        "323   Po323(SD)   Eth      NONE      --",
        "345   Po345(SD)   Eth      NONE      --",
        "456   Po456(SD)   Eth      NONE      --",
        "777   Po777(SD)   Eth      NONE      --" ]

Я пытаюсь найти точное соответствие для Po12 из приведенного выше списка.

Фактический объем производства -

TASK [assert] ***************************************************************************************************
fatal: [localhost]: FAILED! => {
    "assertion": "run_pc | length>0",
    "changed": false,
    "evaluated_to": false,
    "msg": "Can not find port channel 12"
}

Ожидаемый результат

TASK [debug] ****************************************************************************************************
ok: [localhost] => {
    "run_pc": [
        "12    Po12(SU)    Eth      LACP      Eth1/3(P)    Eth1/4(P)    "
    ]
}

1 Ответ

0 голосов
/ 19 июня 2019

Попробуйте

- set_fact:
    run_pc: "{{ run_pc|default([]) + [ item ] }}"
  loop: "{{ lacp_output }}"
  when: item is search('Po' ~ group ~ '\(')

Фиксированная задача с выбором ниже

- set_fact:
    run_pc: "{{ lacp_output|select('search','Po' ~ group ~ '\\(')|list }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...