Olá Pessoal,
Esse post acabou surgindo depois de discussões em nosso foruns, mais especificamente no Telegram, onde eu já havia feito essa alteração mas acabei não detalhando em nosso BLOG, sobre essa possível alteração e de que forma poderia ser feito dentro de nossa estrutura de playbook para o Ansible.
Como já mencionado em nossos posts, inúmeras ideias podem surgir baseado na necessidade de seu ambiente e lógicas para cada tipo de configuração, portanto explorar as ideias são sempre bem vindas. Enfim, o que gostaria de agregar aqui nesse post seria sobre uma hipótese de precisarmos fazer uma validação de algum ID de loopback para que possamos amarrar a nossa base externa.
Pensando nesse item e respondendo ao questionamento, é possivel. Com isso iremos fazer atualização em nosso arquivo de teste ( .csv ) definindo variáveis ( x e y ) para popular em nosso exemplo de amarração com loopback ID ( 12 e 13 ).
inventory_hostname,DHCP,dhcp_exclude1_start,dhcp_exclude1_end,dhcp_network,dhcp_netmask,dhcp_gateway,new_hostname,id_loopback,ip_loopback,mask_loopback,ip_loopback_x,mask_loopback_x,ip_loopback_y,mask_loopback_y R1,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R1_floor1,10,10.10.10.1,255.255.255.255,2.2.2.2,255.255.255.255, R2,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R2_floor1,10,10.10.10.1,255.255.255.255,3.3.3.3,255.255.255.255,5,5 R3,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R3_floor1,10,10.10.10.1,255.255.255.255,1,2,5.5.5.5,255.255.255.255 R4,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R4_floor1,10,10.10.10.1,255.255.255.255,1,2,5,5 R31,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R31_floor1,10,10.10.10.1,255.255.255.255,1,2,5,5 R32,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R32_floor1,10,10.10.10.1,255.255.255.255,1,2,5,5 R5,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R5_floor1,10,10.10.10.1,255.255.255.255,1,2,5,5 R6,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R6_floor1,10,10.10.10.1,255.255.255.255,1,1,5.5.5.5,255.255.255.255
Obs.: Vocês podem achar que estou louco , mas na verdade estou somente jogando valores ficticios nas variaveis definidas como IP Address de loopback, para que possamos de fato validar automação, então não se espante com esses IPs.
Para comparar os IDs ( 12 e 13 ) adicionei eles em nosso arquivo ( /group_vars/all.yml ).
--- vars_from_csv: "{{ vars_dict }}" cisco_881_l2_interfaces: - FastEthernet0 - FastEthernet1 - FastEthernet2 - FastEthernet3 loopback_id: - 5 - 6 - 7 - 10 - 11 - 12 - 13
Com isso agora já preparei minha base ( .csv ) e minha variáveis para que agora eu possa montar minha condição obviamente dentro de meu arquivo Jinja2, usando as condições de ” if, elif e else “. Segue alteração de nosso jinja template.
! {% for loopback in loopback_id %} {% if loopback == 12 %} interface loopback {{loopback}} ip address {{ vars_from_csv.ip_loopback_x }} {{ vars_from_csv.mask_loopback_x }} no shutdown ! {% elif loopback == 13 %} interface loopback {{loopback}} ip address {{ vars_from_csv.ip_loopback_y }} {{ vars_from_csv.mask_loopback_y }} no shutdown ! {% else %} interface loopback {{loopback}} ip address {{ vars_from_csv.ip_loopback }} {{ vars_from_csv.mask_loopback }} no shutdown ! {% endif %} {% endfor %} !
Vocês podem observar que estou criando condições de se coincidir com o ID escrevo isso, caso contrario coincidir com o IDy escrevo aquilo e por fim execute isso.
Dentro desse contexto estou comparando meu ID com o valor quero propagar em meu script e obviamente exportar para meu futuro device. 😉
Agora como desafio e ideias que vocês podem adicionar em nossos comentários, vocês já imaginaram de que forma também eu poderia agregar se eu consolidar o script comparando familias de equipamentos ( 881, 1941, etc ) para após isso montar meu template? E se em meu arquivo de base externa ( .csv ) eu não tiver com uma variável preenchida o que irá acontecer? Posso remediar?
Aguardo os comentários e claro depois de nossas discussões coloco meus exemplos/ideias para esses problemas.
Abs,
Rodrigo
1 menção
[…] Neste detalhamento vou atrelar aos códigos que já estavamos desenvolvendo nos posts anteriores que trazia o conceito de trabalhar com ( .csv ) e scripts Jinja2, bem como respondendo o que eu […]