Definir visualizações para tabelas de configuração do Junos PyEZ
Configuração do Junos PyEZ Tabelas podem extrair dados específicos do banco de dados de configuração selecionado de um dispositivo Junos, ou podem definir recursos estruturados que podem ser usados para configurar programáticamente um dispositivo Junos. Uma tabela está associada a uma visualização, usada para selecionar e fazer referência aos dados da Tabela. Você associa uma Tabela a uma visão específica, incluindo a view
propriedade na definição da Tabela, que tem o nome View como seu argumento.
Uma vista mapeia os nomes de campo definidos pelo usuário para elementos XML nos itens de Tabela selecionados. Uma visão permite que você acesse campos específicos nos dados como variáveis com propriedades que podem ser manipuladas em Python. O Junos PyEZ lida com a extração dos dados em Python, bem como qualquer tipo de conversão ou normalização de dados.
Ao recuperar dados de configuração usando tabelas que têm a get
propriedade ou a set
propriedade, os campos de visualização especificam quais dados de configuração o aplicativo deve recuperar para o objeto. Para tabelas que incluam a set
propriedade e definem recursos que você pode configurar em um dispositivo, os campos definidos na Vista restringem quais declarações você pode configurar para esse recurso.
As visualizações do Junos PyEZ, como tabelas, são formatadas usando YAML. Visualizar definições associadas às tabelas de configuração pode incluir uma série de parâmetros, que são resumidos na Tabela 1.
Visualizar o nome do parâmetro |
Parâmetro de visualização |
Tipo de tabela |
Descrição |
---|---|---|---|
Veja o nome |
– |
|
Identificador de visualização definido pelo usuário. |
Itens de campo |
|
|
Array associativo, ou níquete, de pares de valor-chave que mapeiam nomes de campo definidos pelo usuário para expressões XPath que selecionam elementos nos dados de configuração. Os nomes de campo devem ser nomes variáveis de Python válidos. As expressões XPath são relativas ao contexto definido pela Quando o escopo da Tabela é usado, os campos identificam os dados a serem extraídos |
Grupos de campo |
|
|
Array associativo, ou níquete, de pares de valor-chave que mapeiam nomes de campo definidos pelo usuário para expressões XPath que selecionam elementos nos dados de configuração. Os nomes de campo devem ser nomes variáveis de Python válidos. As expressões XPath são relativas ao contexto definido pelo parâmetro correspondente Quando o escopo da Tabela é usado, os campos identificam os dados a serem extraídos |
Grupos |
|
|
Array associativo, ou níquete, de pares de valor-chave que mapeiam um nome de grupo definido pelo usuário para uma expressão XPath que define o contexto XPath para campos nesse grupo. A expressão Xpath é relativa ao contexto definido pela |
Considere as seguintes tabelas e visualizações de configuração do Junos PyEZ. UserTable
, que inclui a get
propriedade, extrai dados de configuração para contas de usuário no dispositivo alvo. UserConfigTable
, que inclui a set
propriedade, define um recurso de configuração estruturado que pode ser usado para configurar contas de usuário no dispositivo alvo, bem como recuperar dados de configuração para contas de usuário.
--- UserTable: get: system/login/user view: UserView UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password --- UserConfigTable: set: system/login/user key-field: username view: UserConfigView UserConfigView: groups: auth: authentication fields: username: name userclass: class uid: uid fields_auth: password: encrypted-password
As seções a seguir discutem os diferentes componentes da visão:
Veja o nome
O nome De visualização é um identificador definido pelo usuário para a visualização. Você associa uma Tabela a uma visão específica, incluindo a view
propriedade na definição da Tabela e fornecendo o nome De visualização como argumento. Por exemplo:
--- UserTable: # Table definition view: UserView UserView: # View definition
Campos (campos)
Você personaliza visualizações para que elas apenas referenciem os elementos necessários nos dados de configuração selecionados. Para isso, você inclui a fields
propriedade e um conjunto associativo que contém o mapeamento de nomes de campo definidos pelo usuário para as expressões XPath que selecionam os elementos desejados dos itens da Tabela de configuração. Os nomes de campo devem ser nomes variáveis de Python válidos. As expressões XPath são relativas ao escopo de configuração definido pela get
propriedade ou set
pela definição da Tabela.
Ao recuperar dados de configuração usando tabelas que incluem a get
propriedade ou a set
propriedade, os campos definidos na Visualização identificam as declarações a serem extraídas da configuração. Para tabelas que incluam a set
propriedade e definem recursos que você pode configurar em um dispositivo, os campos identificam as declarações que você pode configurar para esse recurso. Você deve definir campos explicitamente para todos os elementos identificadores para um recurso de configuração. Esses campos de identificador são então mencionados na key-field
propriedade na definição da Tabela correspondente.
Considere a hierarquia de configuração de amostra a seguir:
user@router> show configuration system login | display xml <rpc-reply> <configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration> </rpc-reply>
Se a Tabela get
ou set
parâmetro definir o escopo comosystem/login/user
, a expressão XPath para cada campo na definição de Visualização for relativa a esse contexto. A definição de visualização a seguir mapeia os nomes username
userclass
de campo definidos pelo usuário e uid
os elementos infantis do <user>
elemento:
UserTable: get: system/login/user ... UserView: fields: username: name userclass: class uid: uid
Se a definição da Tabela incluir a set
propriedade, você deve definir campos explicitamente para quaisquer elementos identificadores que identifiquem o objeto de forma exclusiva, o que neste caso é <name>
. A propriedade da key-field
Tabela deve fazer referência a todos os campos de visualização que mapeiam para identificar elementos para um objeto. Você deve sempre definir pelo menos um elemento identificador nas propriedades e fields
key-field
nas set
tabelas.
No script Python, você pode então acessar um item De visualização como uma propriedade variável.
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev) users.get() for account in users: print("Username is {}\nUser class is {}".format(account.name, account.userclass))
Ao recuperar dados de configuração, cada objeto que tem um <name>
elemento nos dados tem uma propriedade padrão name
que você pode usar para acessar o valor desse elemento.
Os campos de visualização podem incluir diferentes opções dependendo do tipo da Tabela que faz referência a essa visualização. As tabelas que definem recursos de configuração estruturados (set
) podem incluir verificações de tipo e restrição para cada campo para garantir que o aplicativo Junos PyEZ forneça dados válidos ao configurar o recurso em um dispositivo. As tabelas que recuperam dados de configuração (get
) podem incluir opções que devolvem valores de atributos para elementos específicos ou que especificam o tipo de dados a ser usado no aplicativo. As opções de campo ('get' Tables) e opções de campo ('definir' Tabelas) descrevem as opções que podem ser incluídas ao usar get
e set
tabelas, respectivamente.
Opções de campo ('get' Tables)
Tabelas que incluem a get
propriedade e recuperam apenas dados de configuração de um dispositivo podem definir uma série de opções ou operadores para campos na Visão associada. Esta seção descreve as várias opções.
O formato de campo determina o tipo para obter o valor de um campo. Por padrão, os valores de campo são armazenados como strings. Você pode especificar um tipo diferente para o valor no mapeamento de campo. O exemplo a seguir define o valor do uid
elemento como um inteiro:
UserView: fields: username: name userclass: class uid: { uid : int }
Você também pode definir o valor do item de campo para um Boolean usando a seguinte sintaxe:
fieldname: { element-name: (True | False)=regex(expression) }
O valor do elemento é avaliado em relação à expressão regular passada para regex()
. Se o valor do elemento corresponde à expressão, o valor do item de campo será definido para o Boolean definido no formato. No exemplo a seguir, o superuser
campo é definido como verdadeiro se o valor do class
elemento contém "super-usuário":
superuser: { class : True=regex(super-user) }
O Junos PyEZ também fornece o group
operador para campos em visualizações de configuração. O group
operador permite que você acesse o valor do atributo para junos:group
elementos herdados dos grupos de configuração do Junos. Esse valor indica o grupo do qual esse elemento foi herdado.
Por exemplo, na configuração a seguir, o remote
usuário é herdado do grupo de global
configuração configurado no nível de [edit groups global]
hierarquia.
<user junos:group="global"> <name junos:group="global">remote</name> <uid junos:group="global">2000</uid> ... </user>
Você inclui o group
operador no mapeamento de campo para fazer referência ao valor do junos:group
atributo em vez do valor do elemento. O exemplo a seguir define os campos e fullgroup
os uidgroup
campos com o group
operador. Quando você acessa esses nomes de campo em um script, o campo faz referência ao valor do junos:group
atributo associado ao uid
elemento ou full-name
elemento.
UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password
Opções de campo ('definir' tabelas)
As tabelas que definem recursos de configuração estruturados (set
) podem incluir verificações de tipo e restrição para cada campo na Vista associada para garantir que o aplicativo Junos PyEZ forneça dados válidos ao configurar o recurso em um dispositivo. Verificações de tipo garantem que o aplicativo Junos PyEZ fornece o tipo de dados correto quando configura as declarações para um recurso específico. As verificações de restrição permitem que você defina um valor padrão para as declarações e garanta que o aplicativo fornece valores que estão na faixa correta para essas declarações. As verificações de tipo e restrição suportadas, incluídas como opções para os campos da Vista associada, estão descritas nesta seção.
A Tabela 2 e a Tabela 3 resumem o tipo e as verificações de restrição, respectivamente, que você pode definir para campos na Visualização de uma set
Tabela de configuração. As verificações de tipo são mutuamente exclusivas, mas várias verificações de restrição podem ser definidas para cada campo.
|
Descrição |
Exemplo |
---|---|---|
|
O campo só aceita valores Boolean de |
|
|
O campo só aceita um dos valores definidos na |
|
|
O campo só aceita valores de ponto flutuante |
|
|
O campo só aceita valores inteiros |
|
|
O campo só aceita valores de strings |
|
Nome de verificação de restrições |
Descrição |
Exemplo |
---|---|---|
|
Valor padrão para um campo. Um campo usa seu valor padrão quando o usuário não configura explicitamente o campo. Se o usuário chamar o |
|
|
Valor máximo para um campo, que é interpretado com base no campo |
|
|
Valor mínimo para um campo, que é interpretado com base no campo |
|
Você só pode definir uma verificação de tipo único para um campo, mas você pode definir várias verificações de restrição. Assim, um campo poderia incluir um default
valor, um valor mínimo (minValue
) e um valor máximo (maxValue
).
native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'default' : 501, 'minValue' : 0, 'maxValue' : 4094 } }
As minValue
opções e as maxValue
opções são interpretadas com base no valor para a opção type
. Por padrão, os valores de campo são strings. Para strings, minValue
e maxValue
são os comprimentos mínimos e máximos para a corda. Para inteiros e flutuadores, os valores são os valores mínimos e máximos para esse tipo.
Se você incluir verificações de tipo ou restrição para um campo, e o usuário fornecer dados de configuração que falharem nas verificações, o aplicativo Junos PyEZ eleva o apropriado TypeError
ou ValueError
exceção com uma mensagem que descreve o erro.
Grupos (grupos) e grupos de campo (fields_)
Os grupos fornecem um método de atalho para selecionar e referenciar elementos em um nó específico definido em um item de Tabela.
Nos dados de configuração a seguir, o <authentication>
elemento contém um elemento infantil correspondente ao método de autenticação do usuário:
<configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration>
Dentro da definição view, você pode usar a fields
propriedade para acessar os elementos infantis, fornecendo a expressão XPath completa a cada elemento em relação à hierarquia de configuração selecionada. Por exemplo, se a Tabela get
ou set
a propriedade selecionar elementos <user>
no nível de [edit system login]
hierarquia, o mapeamento de itens de campo usará a seguinte expressão XPath:
UserConfigTable: set: system/login/user ... UserConfigView: fields: password: authentication/encrypted-password
Alternativamente, você pode criar um grupo que define o contexto XPath para o <authentication>
elemento e, em seguida, definir itens de grupo de campo que apenas fornecem a expressão XPath em relação a esse contexto. Você pode definir qualquer número de grupos em uma definição de visualização.
Para criar um grupo, inclua a groups
propriedade e mapeie um nome de grupo definido pelo usuário para a expressão XPath que define o novo contexto. Em seguida, definir um grupo de campo cujo nome é fields_
seguido pelo nome do grupo. O grupo de campo é um conjunto associativo que contém o mapeamento de nomes de campo definidos pelo usuário para expressões XPath que agora são relativas ao contexto definido dentro groups
. Os nomes de campo devem ser nomes variáveis de Python válidos.
O exemplo a seguir define o grupo auth
e o grupo fields_auth
de campo correspondente. O auth
grupo define o contexto para o nível de system/login/user/authentication
hierarquia, e o password
campo faz referência ao valor do encrypted-password
elemento.
UserConfigTable: set: system/login/user ... UserConfigView: groups: auth: authentication fields_auth: password: encrypted-password ...
Quer você use campos ou grupos de campo, você acessa o valor da mesma maneira dentro do script Junos PyEZ usando os nomes de campo definidos pelo usuário.