Use o Junos PyEZ para recuperar fatos dos dispositivos Junos
Entender os fatos do dispositivo Junos PyEZ
O Junos PyEZ é um microframework para Python que permite gerenciar e automatizar dispositivos Junos. O Junos PyEZ modela cada dispositivo como uma instância da jnpr.junos.device.Device classe. Após a conexão a um dispositivo Junos, os aplicativos Junos PyEZ podem recuperar fatos sobre o dispositivo. Os fatos do dispositivo são acessados como atributo facts do Device objeto. Para obter informações detalhadas sobre as chaves incluídas nos fatos do dispositivo devolvido, consulte jnpr.junos.facts.
O exemplo a seguir estabelece uma sessão NETCONF sobre SSH com o dispositivo e imprime os fatos do dispositivo. O dispositivo usa chaves SSH para autenticar o usuário.
from jnpr.junos import Device
from pprint import pprint
with Device(host='router1.example.net') as dev:
pprint (dev.facts['hostname'])
pprint (dev.facts)
user1@server:~$ python3 get-facts.py
'router1'
{'2RE': True,
'HOME': '/var/home/user1',
'RE0': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'master',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 22 minutes, 40 seconds'},
'RE1': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'backup',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 23 minutes, 55 seconds'},
...
No Junos PyEZ Release 2.0.0 e versões anteriores, quando o aplicativo chama o Device open() método para se conectar a um dispositivo, o Junos PyEZ coleta automaticamente os fatos do dispositivo para conexões NETCONF-over-SSH e reúne os fatos do dispositivo para conexões Telnet e console em série quando você inclui gather_facts=True explicitamente na lista de Device argumentos.
A partir do Junos PyEZ Release 2.1.0, os fatos dos dispositivos são coletados sob demanda para todos os tipos de conexão. Cada fato é coletado e armazenado em cache na primeira vez que o aplicativo acessa seu valor ou o valor de um fato dependente. Ao imprimir ou usar fatos do dispositivo, os fatos acessados anteriormente são servidos do cache, e os fatos que ainda não foram acessados são recuperados do dispositivo. Se um fato não for suportado em uma determinada plataforma, ou se o aplicativo encontrar um problema reunindo o valor de um fato específico, então o valor desse fato é None.
O Junos PyEZ armazena um fato de dispositivo quando acessa pela primeira vez o fato ou um fato dependente, mas não atualiza o valor em cache no acesso subsequente. Para atualizar os fatos do dispositivo, ligue para o facts_refresh() método. O facts_refresh() método esvazia o cache de todos os fatos, de modo que, quando o aplicativo acessar um fato em seguida, ele o recupera do dispositivo e armazena o valor atual no cache.
from jnpr.junos import Device
from pprint import pprint
with Device(host='router1.example.net') as dev:
pprint (dev.facts)
dev.facts_refresh()
pprint (dev.facts)
Para atualizar apenas um único fato ou um conjunto de fatos, inclua o keys argumento no facts_refresh() método e especifique as chaves para limpar do cache. Por exemplo:
dev.facts_refresh(keys='hostname')
dev.facts_refresh(keys=('hostname','domain','master'))
Começando no Junos PyEZ Release 2.0.0, exceções que ocorrem ao reunir fatos levantam um aviso em vez de um erro, o que permite que o script continue em execução.
Por padrão, o Junos PyEZ devolve os fatos do dispositivo como um objeto semelhante a um dicionário. A partir do Junos PyEZ Release 2.2.1, você pode visualizar os fatos do dispositivo na Notação de Objetos JavaScript (JSON). Para ver uma representação JSON dos fatos, importar o json módulo e chamar a json.dumps() função.
from jnpr.junos import Device
import json
with Device(host='router1.example.net') as dev:
print (json.dumps(dev.facts))
Exemplo: recupere fatos de um dispositivo Junos
Com o Junos PyEZ, você pode executar rapidamente comandos no modo interativo Python ou criar programas para realizar tarefas. O exemplo a seguir estabelece uma sessão NETCONF sobre SSH com um dispositivo Junos e recupera e imprime fatos para o dispositivo usando um programa Python simples e um modo interativo Python. Os exemplos usam chaves SSH existentes para autenticação.
Para criar um aplicativo Junos PyEZ que estabelece uma sessão NETCONF sobre SSH com um dispositivo Junos e imprime os fatos do dispositivo:
Todo o programa é apresentado aqui:
import sys
from jnpr.junos import Device
from jnpr.junos.exception import ConnectError
from pprint import pprint
dev = Device(host='router1.example.net')
try:
dev.open()
except ConnectError as err:
print ("Cannot connect to device: {0}".format(err))
sys.exit(1)
pprint (dev.facts['hostname'])
pprint (dev.facts)
dev.close()
Você também pode executar rapidamente as mesmas operações no modo python interativo.
user1@server:~$ python
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from jnpr.junos import Device
>>> from pprint import pprint
>>>
>>> dev = Device('router1.example.net')
>>> dev.open()
Device(router1.example.net)
>>>
>>> pprint (dev.facts)
{'2RE': True,
'HOME': '/var/home/user1',
'RE0': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'master',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 22 minutes, 40 seconds'},
'RE1': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'backup',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 23 minutes, 55 seconds'},
...>>>
>>> dev.close()
>>> quit()
O vídeo a seguir apresenta uma curta sessão Python que demonstra como usar o Junos PyEZ para se conectar e recuperar fatos de um dispositivo Junos.