Как разделить на ansible - PullRequest
       6

Как разделить на ansible

1 голос
/ 02 апреля 2020

Я относительно новичок в ansible, но я пытаюсь преобразовать некоторые из моих python сценариев в ansible playbooks, и мне трудно понять, как назначать переменные через l oop. У меня есть playbook, который запускает show vlanrief:

---
- name: Get ARP information
  hosts: all
  gather_facts: false


  tasks:
    - name: show vlan brief
      raw: "show vlan brief | i test"
      register: vlan_output

    - debug: var=vlan_output.stdout_lines

Это дает следующий вывод:

PLAY [Get ARP information] *****************************************************

TASK [show vlan brief] *********************************************************
changed: [sw1]

TASK [debug] *******************************************************************
ok: [sw1] => {
    "vlan_output.stdout_lines": [
        "100  test                             active    Gi0/3, Gi0/1, Gi0/2",
        "101  test2                            active    "
    ]
}

PLAY RECAP *********************************************************************
sw1                        : ok=2    changed=1    unreachable=0    failed=0

Я хочу получить только номер vlan, в этом случае это будет 100 & 101, а затем l oop и выполнить "show ma c адресную таблицу | в c VLAN_NUM"

Я пытался добавить расщепления в строки реестра и отладки, но продолжаю получать ошибки, скажем:

#split added
- debug: var=vlan_output.stdout_lines.split(' ')

#return error
"vlan_output.stdout_lines.split(\" \")": "VARIABLE IS NOT DEFINED!"

В python Я бы провел oop через предметы и разделил бы строки, чтобы получить то, что мне нужно. Что является предпочтительным или эквивалентным этому процессу в ansible?

1 Ответ

1 голос
/ 02 апреля 2020

Q: Run command:

"show mac address-table | include <VLAN_NUMBER>"

Попробуйте это

    - set_fact:
        my_vlan_numbers: "{{ vlan_output.stdout_lines|
                             map('regex_replace', myregex, myreplace)|
                             list }}"
      vars:
        myregex: '^(\S*) (.*)$'
        myreplace: '\1'
    - shell:
        cmd: "show mac address-table | include {{ item }}"
      loop: "{{ my_vlan_numbers }}"


Подробная информация о myregex
^ ..... match beginning of the line
(\S*) . first group of any non-space chars
      . match space
(.*) .. second group of any chars
$ ..... match end of the line

Подробная информация о replace

\1 .... backreference the first group of myregex
...