IOS에서 인터페이스의 하위 집합을 반복하는 Ansible

IOS에서 인터페이스의 하위 집합을 반복하는 Ansible

Ansible 2.9.9를 사용하여 Windows 10 및 Ubuntu에서 WISL을 실행합니다. 저는 Ansible을 처음 사용합니다. 주어진 네트워크 프로토콜이 실행되는 인터페이스를 생성하기 위해 Cisco 장치에서 쇼를 실행합니다. 그런 다음 인터페이스를 추출하고 이에 대한 명령을 실행하고 싶습니다. 이 경우 프로토콜을 끄십시오. 이상적으로는 show 명령을 쉽게 변경할 수 있습니다. 많은 프로토콜의 경우 이는 이 상태를 확인하는 일관된 방법입니다. Ansible이 이 프로토콜 정보를 저장하는 방법이 있을 수 있습니다. 어쩌면 사실로? ios_config를 사용하여 예제를 찾았습니다.https://docs.ansible.com/ansible/latest/modules/ios_config_module.html그러나 인터페이스는 도우미 예제와 함께 여기에 표시된 것처럼 하드 코딩되어 있습니다.

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: "{{ item }}"
  with_items:
    - interface Ethernet1
    - interface Ethernet2
    - interface GigabitEthernet1

내 시도는 다음과 같으며 멀티캐스트가 활성화된 두 개의 인터페이스를 제공합니다. 하지만 루프에서 해당 인터페이스에 대해 다음으로 수행할 작업은 무엇입니까? :

  tasks:
  - name: Gather interfaces running PIM
    ios_command:
      commands:
        - show ip pim interface
    register: pim

  - name: Write PIM interface data to file
    copy:
      content: "{{pim.stdout_lines[0]}}"
      dest: "backups/{{ansible_alias}}-pim-interfaces.txt"


  - name: Glean PIM INTF's
    shell: cat backups/{{ ansible_alias }}-pim-interfaces.txt | tr ' ' '\n' | grep 'GigabitEthernet'
    register: pim

  - debug: msg='{{ pim.stdout_lines }}'


TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [10.239.121.2] => {
    "msg": [
        "GigabitEthernet0/0/0",
        "GigabitEthernet0/0/1.125"
    ]
}

어떤 지침이라도 감사드립니다.

답변1

이것은 당신이 사용하는 곳입니다loop(또한 2.5 이후로 모든 with_지시문이 더 이상 사용되지 않지만 많은 문서가 아직 이를 반영하지 않습니다).

Ansible 예제를 수정하면 다음이 제공됩니다.

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

출력을 검사하려면 다음을 수행하십시오.

- debug:
    var: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

이것은 loop다음에서 수정되었습니다.Ansible에서 접두사를 사용하여 목록의 모든 문자열 앞에 추가하는 방법.

관련 정보