---
SW1:
router-id: "1.1.1.1"
vlans:
- vlan: 100
desc: "Vlan da rede 192.168.100.0"
- vlan: 200
desc: "Vlan da rede 192.168.200.0"
- vlan: 300
desc: "Vlan da rede 10.10.10.0"
ospf:
networks:
- net: 192.168.100.0
netmask: "0.0.0.255"
area: 0
- net: 192.168.200.0
netmask: "0.0.0.128"
area: 1
- net: 10.10.10.0
netmask: "0.0.0.255"
area: 2
...
O seguinte script lê o arquivo yaml e armazena o resultado em um dicionário de nome config.
#!/usr/bin/python
import yaml
from pprint import pprint
YAMFILE="/home/jose/teste.yml"
config = yaml.load(open(YAMFILE))
pprint(config)
O método load() é o encarregado de fazer o parseamento. O print do dicionário seria:
{'SW1': {'ospf': {'networks': [{'area': 0,
'net': '192.168.100.0',
'netmask': '0.0.0.255'},
{'area': 1,
'net': '192.168.200.0',
'netmask': '0.0.0.128'},
{'area': 2,
'net': '10.10.10.0',
'netmask': '0.0.0.255'}]},
'router-id': '1.1.1.1',
'vlans': [{'desc': 'Vlan da rede 192.168.100.0', 'vlan': 100},
{'desc': 'Vlan da rede 192.168.200.0', 'vlan': 200},
{'desc': 'Vlan da rede 10.10.10.0', 'vlan': 300}]}}
Podemos utilizar esse dicionário para criar um arquivo de configuração para SW1 por exemplo:
#!/usr/bin/python
import yaml
from pprint import pprint
#Carregando arquivo YAML na variavel dicionario config
config = yaml.load(open('teste.yml'))
#pprint(config)
for vlan in config['SW1']['vlans']:
print("!")
print("vlan %s" % vlan['vlan'])
print("desc %s" % vlan['desc'])
print("!")
print("router ospf 1")
print("router-id %s" % config['SW1']['router-id'])
for networks in config['SW1']['ospf']['networks']:
print("network %s %s area %s" % (networks['net'],networks['netmask'],networks['area']))
O código acima quando executado resulta em:
!
vlan 100
desc Vlan da rede 192.168.100.0
!
vlan 200
desc Vlan da rede 192.168.200.0
!
vlan 300
desc Vlan da rede 10.10.10.0
!
router ospf 1
router-id 1.1.1.1
network 192.168.100.0 0.0.0.255 area 0
network 192.168.200.0 0.0.0.128 area 1
network 10.10.10.0 0.0.0.255 area 2
Que é uma configuração para um dispositivo Cisco IOS.
Temos visto que é possivél utilizar o dicionário gerado pelo parser pyyaml para gerar o nosso arquivo de configuração.
No script acima toda a lógica de como gerar o arquivo de configuração, esta no código fonte do script, dessa forma se outra pessoa por exemplo tem um arquivo yaml igual ao nosso e precisa gerar um arquivo de configuração, ela terá que desenvolver novamente a mesma lógica no seu código fonte.
Não seria legal por exemplo, ter essa lógica de como gerar o arquivo de configuração em algum "template", de forma a que nosso script simplesmente carrega o arquivo yaml, chama esse "template" e o nosso arquivo de configuração é gerado automaticamente?
Para isso utilizamos JINJA2!!, com JINJA2, podemos criar um template e simplesmente colocar como dados de entrada para dito template, os dados do nosso arquivo YAML, e pronto arquivo de configuração gerado.
Próximo post falaremos sobre a sintaxes de JINJA2... Obrigado e Bom Final de Semana...
Abçs
Jose
Nenhum comentário:
Postar um comentário