Use tabelas de configuração do Junos PyEZ para recuperar dados de configuração
Tabelas e visualizações de configuração do Junos PyEZ oferecem uma maneira simples e eficiente de extrair informações específicas do banco de dados de configuração selecionado de um dispositivo Junos. Depois de carregar ou importar a definição de Tabela em seu módulo Python, você pode recuperar os dados de configuração.
Tabelas de configuração do Junos PyEZ que especificam a get
propriedade só podem recuperar dados de configuração. Tabelas que especificam a set
propriedade podem configurar recursos em dispositivos Junos, bem como recuperar dados da mesma maneira que tabelas que especificam a get
propriedade.
Para recuperar informações de um dispositivo específico, você deve criar uma instância de Tabela e associá-la ao Device
objeto que representa o dispositivo alvo. Por exemplo:
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev)
As seções a seguir discutem como recuperar e manipular os dados:
Recuperar itens de configuração
A Tabela get
de configuração ou set
a propriedade identifica os dados a serem extraídos da configuração. Por exemplo, a definição da tabela de amostra a seguir extrai elementos user
no nível de hierarquia de [edit system login]
configuração:
UserTable: get: system/login/user view: UserView UserView: fields: username: name userclass: class
Você recupera os dados de configuração em seu script Python ligando para o get()
método e fornecendo quaisquer argumentos desejados.
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev) users.get()
Se a definição da Tabela incluir o required_keys
parâmetro, você deve incluir pares de valor-chave para cada chave necessária na lista de argumentos do get()
método. A definição da Tabela a seguir exige que a lista de argumentos do get()
método inclua um user
argumento com um valor que corresponda ao valor de um name
elemento no nível hierárquicos [edit system login user]
:
UserTable: get: system/login/user required_keys: user: name view: UserView
get()
No método, você deve incluir a chave necessária na lista de argumentos; caso contrário, o código oferece uma exceção ao ValueError. O exemplo a seguir solicita os dados de configuração para o usuário chamado "operador":
users = UserTable(dev).get(user='operator')
Se o nome do argumento for hifenizado, você deve alterar qualquer traço no nome para sublinhar. O valor do argumento, no entanto, é uma corda e, como tal, pode conter hífens.
Você pode incluir o argumento do get()
método namesonly=True
para devolver dados de configuração que contêm apenas chaves de nome no nível de hierarquia especificado na get
propriedade da set
sua definição de Tabela.
from jnpr.junos import Device from myTables.ConfigTables import InterfaceTable with Device(host='router.example.com') as dev: interfaces = InterfaceTable(dev) interfaces.get(namesonly=True)
Por exemplo, suponha que get
seja definido para recuperar dados de configuração no interfaces/interface
nível de hierarquia, e você inclui o namesonly=True
argumento no get()
método quando você recupera os dados em seu script Junos PyEZ. Neste caso, o método devolve apenas os valores nos <name>
elementos que são filhos diretos do interfaces/interface
nível hierárquico. As informações em elementos que são irmãos do <name>
elemento não são devolvidas, e os dados para <name>
elementos em níveis mais baixos na hierarquia não são devolvidos.
Especifique o banco de dados de configuração
Por padrão, as tabelas de configuração do Junos PyEZ recuperam dados do banco de dados de configuração do candidato. Quando você liga para o get()
método no script Python para recuperar os dados da Tabela, você pode especificar que o método deve, em vez disso, devolver dados do banco de dados de configuração comprometido, passando o options
argumento e incluindo o 'database':'committed'
item no options
diagrama.
table_options = {'inherit':'inherit', 'groups':'groups', 'database':'committed'} with Device(host='router.example.com') as dev: users = UserTable(dev) users.get(options = table_options)
Especifique as opções de herança e grupo
Você pode controlar as opções de herança e grupo ao recuperar dados de configuração usando o options
argumento na lista de argumentos do get()
método. O options
argumento requer um argumento e, por padrão, é definido o seguinte valor, que aplica herança e grupos para os dados de configuração devolvidos:
options = {'inherit': 'inherit', 'groups': 'groups'}
Se você não redefinir o options
argumento em seu script Python, ele usa automaticamente o padrão.
A opção inherit
especifica como os dados de configuração exibem declarações definidas em grupos de configuração e intervalos de interface. Por padrão, a opção 'inherit':'inherit'
está incluída, e os dados de configuração incluem elementos de tag herdados de grupos ou intervalos de interface definidos pelo usuário dentro dos elementos de tag herdados em vez de exibir os <groups>
elementos<apply-groups>
<apply-groups-except>
, ou <interface-range>
elementos separadamente. Para aplicar a herança, mas também incluir elementos de tag para declarações definidas no junos-defaults
grupo, use 'inherit':'defaults'
no options
argumento.
Para desativar a herança, definir o valor do nípedes para uma corda vazia.
{'inherit':''}
Incluindo os dados de configuração e 'groups':'groups'
as 'inherit':'inherit'
opções, os dados de configuração também indicam o grupo de configuração do qual os elementos são herdados. Um elemento herdado de um determinado grupo inclui o junos:group="source-group"
atributo em sua tag de abertura, conforme mostrado no exemplo a seguir:
<configuration> <interfaces> <interface junos:group="re0"> <name junos:group="re0">fxp0</name> <unit junos:group="re0"> <name junos:group="re0">0</name> <family junos:group="re0"> <inet junos:group="re0"> <address junos:group="re0"> <name junos:group="re0">198.51.100.1/24</name> </address> </inet> </family> </unit> </interface> </interfaces> ... </configuration>
Para fornecer acesso aos atributos na definição de Visualização, você pode incluir a sintaxe XPath apropriada no mapeamento de campo. O exemplo a seguir define o ifgroup
campo e o mapeia para o junos:group
atributo do elemento da <name>
interface:
InterfaceTable: get: interfaces/interface view: InterfaceView InterfaceView: fields: ifname: name ifaddress: unit/family/inet/address/name ifgroup: name/@group
O Junos PyEZ também fornece o group
operador, que é um método de atalho para acessar o junos:group
atributo de um elemento. O exemplo a seguir define o ifgroup
campo, que é mapeado para o name
elemento com o group
operador. Quando você acessa ifgroup
dentro do seu script, ele faz referência ao valor do junos:group
atributo associado ao elemento da <name>
interface.
InterfaceTable: get: interfaces/interface view: InterfaceView InterfaceView: fields: ifname: name ifaddress: unit/family/inet/address/name ifgroup: { name : group }
Se um elemento não for herdado de um grupo, o valor de um campo que faz referência ao group
atributo é None
.
Itens da tabela de acesso
Depois de recuperar os itens de configuração, você pode tratá-los como um níquete Python, que permite que você use métodos na biblioteca Python padrão para acessar e manipular os itens.
Para ver a lista de chaves de itens correspondentes aos nomes dos itens de configuração, ligue para o keys()
método.
users = UserTable(dev).get() print (users.keys())
['user1', 'readonly']
Você pode verificar se uma chave específica está presente nos itens da Tabela usando o operador Python in
.
if 'readonly' in users:
Para ver uma lista dos campos ou valores associados a cada chave, ligue para o values()
método. O values()
método retorna uma lista de tuples com os pares de valor de nome para cada campo que foi definido no View.
print (users.values())
[[('username', 'user1'), ('userclass', 'super-user')], [('username', 'readonly'), ('userclass', 'read-only')]]
Para ver a lista completa de itens, incluindo chaves e valores, ligue para o items()
método.
print (users.items())
[('user1', [('username', 'user1'), ('userclass', 'super-user')]), ('readonly', [('username', 'readonly'), ('userclass', 'read-only')])]
Iterar através de uma mesa
As tabelas oferecem suporte à iteração, que permite que você faça loop por cada item de configuração da mesma forma que você faria loop por uma lista ou um pouco de informações. Com isso, é fácil formatar e publicar rapidamente os campos desejados.
A definição da Tabela a seguir extrai os system/login/user
itens dos dados de configuração:
UserTable: get: system/login/user view: UserView UserView: fields: username: name userclass: class
O aplicativo Junos PyEZ a seguir passa pelos user
itens e imprime o nome e a classe de cada usuário:
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev) users.get() for user in users: print("Username is {}\nUser class is {}".format(user.username, user.userclass))
Os username
campos e userclass
os campos, definidos no UserView, correspondem aos valores e name
class
elementos, respectivamente, nos dados de configuração. A saída inclui o nome e a classe do usuário.
Username is user1 User class is super-user Username is readonly User class is read-only
Embora o UserView defina um username
campo que mapeia o name
elemento, por padrão, cada item View tem uma name
propriedade que faz referência à chave que identifica esse item com exclusividade. Assim, você também pode usar user.name
neste exemplo para fazer referência ao valor do name
elemento.