
Executando WISL no Windows 10 e Ubuntu com ansible 2.9.9. Eu sou novo no Ansible. Eu executo um show em um dispositivo Cisco para gerar as interfaces nas quais um determinado protocolo de rede é executado. Quero então extrair as interfaces e executar comandos nelas. Neste caso, desligue o protocolo. Idealmente, o comando show poderia mudar facilmente. Quanto a muitos protocolos, esta é a maneira consistente de verificar esse estado. Pode haver maneiras de o Ansible armazenar essas informações de protocolo. Talvez com fatos? Encontrei exemplos usando ios_config emhttps://docs.ansible.com/ansible/latest/modules/ios_config_module.htmlmas as interfaces são codificadas conforme mostrado aqui com o exemplo auxiliar:
- 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
Minha tentativa é a seguinte, o que me dá as duas interfaces com multicast ativo. Mas o que vem a seguir para agir nessas interfaces em um loop? :
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"
]
}
Muito obrigado por qualquer orientação.
Responder1
É aqui que você usa umloop
(o que também desde a versão 2.5 fez com que todas with_
as diretivas fossem descontinuadas, embora muitos dos documentos ainda não reflitam isso).
Modificar o exemplo do Ansible nos dá:
- 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 }}'
Para apenas inspecionar a saída:
- debug:
var: item
loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'
Isto loop
foi modificado deComo preceder cada string em uma lista com um prefixo no Ansible.