Use o Junos PyEZ para comparar a configuração do candidato e uma configuração previamente comprometida
RESUMO Use o Junos PyEZ diff() e pdiff() os métodos para comparar a configuração do candidato com uma configuração previamente comprometida.
Os dispositivos Junos armazenam uma cópia da configuração mais recentemente comprometida e até 49 configurações anteriores. O utilitário Junos PyEZ jnpr.junos.utils.config.Config permite que você compare a configuração do candidato com uma configuração previamente comprometida e imprima ou devolva a diferença. A Tabela 1 descreve os métodos, que são equivalentes à emissão do comando de show | compare rollback n modo de configuração no Junos OS CLI.
Método |
Descrição |
|---|---|
| Compare a configuração do candidato com a configuração de reversão especificada e devolva a diferença como um objeto. |
|
| Compare a configuração do candidato com a configuração de reversão especificada e imprima a diferença diretamente à saída padrão. |
O banco de dados de configuração efêmero armazena apenas a versão atual dos dados de configuração efêmeros comprometidos e, como resultado, não suporta comparar a configuração efêmera modificada com configurações previamente comprometidas.
Os diff() métodos e pdiff() os métodos recuperam a diferença entre a configuração do candidato e uma configuração previamente comprometida, que é mencionada pelo parâmetro de ID de reversão, rb_idna chamada do método. Se o parâmetro for omitido, a ID de reversão é padrão para 0, o que corresponde à configuração ativa.
A diferença é devolvida no formato de patch, onde:
As declarações que existem apenas na configuração do candidato são prefixadas com um sinal plus (+)
As declarações que existem apenas na configuração de comparação e não na configuração do candidato são prefixadas com um sinal negativo (-)
Os métodos retornam ou imprimem
Nonese não houver diferença entre as configurações.
Em um aplicativo Junos PyEZ, após estabelecer uma conexão com o dispositivo, você pode chamar o método ou pdiff() o diff() método de um Config objeto ou tabela para comparar as configurações do candidato e da reversão. O exemplo a seguir usa a Config classe para carregar alterações de configuração na configuração do candidato e, em seguida, chama o pdiff() método para impressão das diferenças entre a configuração modificada do candidato e a configuração ativa antes de comprometer as mudanças.
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='router1.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
cu.load(path='configs/junos-config-mx.conf', merge=True)
cu.pdiff()
cu.commit()
Quando você executa o código, ele imprime as diferenças para a saída padrão. Por exemplo:
[edit system scripts op]
+ file bgp-neighbors.slax;
[edit interfaces]
+ ge-1/0/0 {
+ unit 0 {
+ family inet {
+ address 198.51.100.1/26;
+ }
+ }
+ }
- ge-1/1/0 {
- unit 0 {
- family inet {
- address 198.51.100.65/26;
- }
- }
- }
Para recuperar a diferença entre as configurações como um objeto para mais manipulação, ligue para o diff() método em vez do pdiff() método e armazene a saída em uma variável. Por exemplo:
cdiff = cu.diff(rb_id=2)
print (cdiff)
Quando você usa tabelas e visualizações de configuração do Junos PyEZ para fazer alterações de configuração estruturadas em um dispositivo, você pode carregar e comprometer os dados de configuração, seja ligando para olock(), commit() load()e unlock() métodos individualmente, ou ligando para o set() método, que chama todos esses métodos automaticamente. Se você usa tabelas de configuração para configurar um dispositivo e deseja comparar a configuração atualizada do candidato com uma configuração previamente comprometida usando os diff() métodos ou pdiff() em seu aplicativo, você deve usar os métodos e os commit() load() métodos em vez do set() método. Fazer isso permite que você recuperar as diferenças após o carregamento dos dados de configuração na configuração do candidato, mas antes que eles sejam comprometidos. Por exemplo:
from jnpr.junos import Device
from myTables.ConfigTables import UserConfigTable
with Device(host='router1.example.com') as dev:
with UserConfigTable(dev, mode='exclusive') as userconf:
userconf.user = 'user1'
userconf.class_name = 'read-only'
userconf.append()
userconf.load(merge=True)
userconf.pdiff()
userconf.commit()
O exemplo a seguir compara a configuração do candidato com a configuração com o ID 5 de reversão, mas não faz nenhuma alteração na configuração:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='router1.example.com') as dev:
cu = Config(dev)
cu.pdiff(rb_id=5)