NESTA PÁGINA
Como especificar o banco de dados de origem para os dados de configuração
Como especificar o escopo dos dados de configuração para retornar
Como especificar o formato dos dados de configuração para retornar
Como recuperar dados de configuração para modelos de dados YANG de terceiros
Como especificar opções que não têm um argumento de módulo equivalente
Como comparar a configuração ativa com uma configuração anterior
Use Ansible para recuperar ou comparar as configurações do Junos OS
RESUMO Use os módulos Ansible da Juniper Networks para recuperar ou comparar configurações em dispositivos Junos.
A Juniper Networks oferece um módulo Ansible que permite que você gerencie a configuração em dispositivos Junos. A Tabela 1 descreve o módulo disponível, que você pode usar para recuperar ou comparar as configurações do dispositivo Junos.
Conjunto de conteúdo |
Nome do módulo |
---|---|
|
Você pode usar o juniper.device.config
módulo para solicitar a configuração completa ou partes selecionadas da configuração tanto para a configuração nativa do Junos OS quanto para dados de configuração correspondentes a modelos de dados YANG de terceiros que foram adicionados ao dispositivo. Para recuperar a configuração de um dispositivo Junos, execute o config
módulo com o retrieve
parâmetro. A resposta do módulo inclui a configuração no formato de texto nas config
teclas e config_lines
nas teclas, a menos que a opção return_output
esteja definida para false
. Você também pode comparar a configuração ativa com uma configuração previamente comprometida.
As seções a seguir discutem como usar o módulo para recuperar ou comparar configurações.
Como especificar o banco de dados de origem para os dados de configuração
Ao usar o juniper.device.config
módulo para recuperar a configuração, você deve incluir o retrieve
parâmetro na lista de argumentos do módulo. O retrieve
parâmetro especifica o banco de dados de configuração a partir do qual recuperar os dados. Você pode definir retrieve
os seguintes valores para devolver dados de configuração do respectivo banco de dados:
-
retrieve: 'candidate'
— Recuperar dados da configuração do candidato. -
retrieve: 'committed'
— Recuperar dados da configuração comprometida.
Banco de dados de configuração comprometido
O manual a seguir recupera a configuração comprometida completa no formato de texto para cada dispositivo no grupo de inventário:
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Get committed configuration" juniper.device.config: retrieve: "committed" register: response - name: "Print result" ansible.builtin.debug: var: response
Banco de dados de configuração de candidatos
O manual a seguir recupera a configuração completa do candidato no formato de texto para cada dispositivo no grupo de inventário. O módulo retorna um erro se o banco de dados estiver bloqueado ou modificado.
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Get candidate configuration" juniper.device.config: retrieve: "candidate" register: response - name: "Print result" ansible.builtin.debug: var: response
Como especificar o escopo dos dados de configuração para retornar
Além de recuperar a configuração completa do Junos OS, você pode recuperar partes específicas da configuração, incluindo o config
parâmetro do filter
módulo. O filter
valor do parâmetro é uma string que contém o filtro sub-árvore que seleciona as declarações de configuração para retornar. O filtro subtree devolve os dados de configuração que correspondem aos critérios de seleção. Se você solicitar várias hierarquias, o valor deve filter
representar todos os níveis da hierarquia de configuração começando na raiz (representado pelo <configuration>
elemento) até cada elemento a ser exibido.
O manual a seguir recupera e imprime a configuração nos [edit interfaces]
níveis de hierarquia e [edit protocols]
hierarquia no banco de dados de configuração comprometido para cada dispositivo:
--- - name: "Get Junos OS configuration hierarchies" hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies" juniper.device.config: retrieve: "committed" filter: "<configuration><interfaces/><protocols/></configuration>" register: response - name: "Print result" ansible.builtin.debug: var: response
O manual a seguir recupera e imprime a configuração para a interface ge-1/0/1:
--- - name: "Get Junos OS configuration hierarchies" hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies" juniper.device.config: retrieve: "committed" filter: "<interfaces><interface> <name>ge-1/0/1</name></interface></interfaces>" register: response - name: "Print result" ansible.builtin.debug: var: response
O manual a seguir recupera e imprime a configuração comprometida no nível de [edit system services]
hierarquia:
--- - name: "Get Junos OS configuration hierarchies." hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies" juniper.device.config: retrieve: "committed" filter: "system/services" register: response - name: "Print result" ansible.builtin.debug: var: response
Como especificar o formato dos dados de configuração para retornar
Quando você usa o juniper.device.config
módulo para recuperar a configuração, o módulo invoca a operação de protocolo <get-configuration>
Junos XML, que pode devolver dados de configuração em diferentes formatos. Por padrão, o módulo retorna dados de configuração como texto formatado. O formato de texto usa novas linhas, guias e outros espaços brancos, aparelhos e parênteses quadrados para indicar as relações hierárquicas entre as declarações.
Para especificar o formato em que devolver os dados de configuração, defina o config
parâmetro do format
módulo igual ao formato desejado. Os valores aceitáveis incluem:
-
'json'
— Notação de objetos JavaScript (JSON) -
'set'
— comandos do Junos OSset
-
'text'
— Texto em formato (padrão) -
'xml'
— Elementos do Junos XML
Na saída de manual, a e config_lines
as config
chaves contêm a configuração no formato solicitado. Se você solicitar o formato Junos XML ou JSON, a config_parsed
chave contém a configuração equivalente no formato JSON.
O manual a seguir recupera a configuração completa e comprometida para cada dispositivo no grupo de inventário no formato XML:
--- - name: "Get Junos OS configuration." hosts: junos-all connection: local gather_facts: no tasks: - name: "Get configuration in XML format" juniper.device.config: retrieve: "committed" format: "xml" register: response - name: "Print result" ansible.builtin.debug: var: response
Como recuperar dados de configuração para modelos de dados YANG de terceiros
Você pode carregar módulos YANG padronizados ou personalizados em dispositivos Junos para adicionar modelos de dados que não são suportados nativamente pelo Junos OS, mas podem ser suportados pela tradução. Você configura modelos de dados não nativos na configuração do candidato usando a sintaxe definida para esses modelos. Quando você confirma a configuração, os scripts de tradução do modelo de dados traduzem esses dados e confirmam a configuração correspondente do Junos OS como uma mudança transitória na configuração de checkout.
O candidato e as configurações ativas contêm os dados de configuração para modelos de dados YANG não nativos na sintaxe definida por esses modelos. Você pode usar o juniper.device.config
módulo para recuperar dados de configuração para modelos padrão (IETF, OpenConfig) e YANG personalizados, além de recuperar a configuração nativa do Junos OS. Por padrão, os dados de configuração dos modelos de dados YANG de terceiros não estão incluídos na resposta do módulo.
Para recuperar dados de configuração definidos por um modelo de dados YANG não nativo, além de recuperar a configuração do Junos OS, executar o módulo com o model
parâmetro e incluir o namespace
parâmetro quando apropriado. O model
argumento leva a um dos seguintes valores:
-
custom
— Recuperar dados de configuração definidos por modelos de dados YANG personalizados. Você deve incluir onamespace
argumento ao recuperar dados para modelos de dados YANG personalizados. -
ietf
— Recuperar dados de configuração definidos pelos modelos de dados YANG do IETF. -
openconfig
— Recuperar dados de configuração definidos pelos modelos de dados do OpenConfig YANG. -
True
— Recuperar todos os dados de configuração, incluindo a configuração completa do Junos OS e dados de qualquer modelo de dados YANG.
Se o model
argumento especificar ietf
ou openconfig
o módulo usar automaticamente o namespace apropriado. Se você especificar model: "custom"
para recuperar dados para um modelo de dados YANG personalizado, você também deve incluir o namespace
argumento com o namespace correspondente.
Se você incluir o model
argumento com o valor custom
, ietf
ou openconfig
também incluir o filter
argumento para devolver uma subtree XML específica, o Junos OS só retorna a hierarquia correspondente do modelo de dados não nativos. Se a configuração do Junos OS contém uma hierarquia de mesmo nome, por exemplo, "interfaces", ela não está incluída na resposta. A opção filter
não é suportada ao usar model: "True"
.
Quando você usa o config
módulo para recuperar dados de configuração não nativos, você só pode especificar o formato dos dados devolvidos se você também incluir o filter
parâmetro. Se você omitir o filter
parâmetro, você deve especificar format: "xml"
.
O manual a seguir recupera a hierarquia de configuração do OpenConfig interfaces
a partir da configuração comprometida. Se você omitir o filter
argumento, o RPC retorna as configurações completas do Junos OS e OpenConfig.
--- - name: "Retrieve OpenConfig configuration" hosts: dc1 connection: local gather_facts: no tasks: - name: "Retrieve the OpenConfig interfaces configuration" juniper.device.config: retrieve: "committed" model: "openconfig" filter: "interfaces" format: "xml" register: response - name: "Print result" ansible.builtin.debug: var: response
A tarefa a seguir recupera a l2vpn
hierarquia de configuração da configuração comprometida para um modelo de dados YANG personalizado com o namespace determinado:
tasks: - name: "Retrieve custom configuration" juniper.device.config: retrieve: "committed" model: "custom" filter: "l2vpn" remove_ns: False namespace: "http://yang.juniper.net/customyang/l2vpn" format: "xml" register: response
A tarefa a seguir recupera a configuração completa comprometida do Junos OS, bem como os dados de configuração para outros modelos de dados YANG que foram adicionados ao dispositivo:
tasks: - name: "Retrieve Junos OS and all third-party configuration data" juniper.device.config: retrieve: "committed" model: "True" format: "xml" register: response
Como especificar opções que não têm um argumento de módulo equivalente
Quando você usa o juniper.device.config
módulo para recuperar a configuração, o módulo invoca a operação de protocolo <get-configuration>
Junos XML. O módulo oferece suporte a argumentos explícitos para muitos dos <get-configuration>
atributos, por exemplo, o format
atributo. O módulo também oferece suporte ao options
argumento, que permite incluir quaisquer atributos adicionais <get-configuration>
que não tenham um argumento de módulo equivalente. O options
argumento requer um pouco de pares de chave/valor de quaisquer atributos apoiados pela <get-configuration>
operação.
Para obter a lista completa de atributos suportados pela operação de protocolo <get-configuration>
Junos XML, consulte < configuração deget>.
Por exemplo, o config
módulo recupera dados da configuração pré-herança, na qual as etiquetas e <interface-range>
as <groups>
<apply-groups>
<apply-groups-except>
etiquetas são elementos separados na saída de configuração. Para recuperar dados da configuração pós-herança, que exibe declarações herdadas de grupos definidos pelo usuário e varia conforme crianças das declarações herdadas, você pode incluir o options
argumento com inherit: "inherit"
.
O manual a seguir recupera os dados de configuração no [edit system services]
nível de hierarquia a partir da configuração comprometida pós-herança. Neste caso, se a configuração também contiver declarações configuradas no nível de [edit groups global system services]
hierarquia, essas declarações serão herdadas na [edit system services]
configuração pós-herança e devolvidas nos dados de configuração recuperados.
--- - name: "Get Junos OS configuration hierarchies" hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected hierarchy from the post-inheritance configuration" juniper.device.config: retrieve: "committed" filter: "system/services" options: inherit: "inherit" register: response - name: "Print result" ansible.builtin.debug: var: response
Como salvar dados de configuração em um arquivo
Ao usar o juniper.device.config
módulo para recuperar a configuração, você pode salvar os dados de configuração devolvidos em um arquivo no nó de controle Ansible local, incluindo o módulo dest_dir
ou dest
o parâmetro. A opção dest_dir
apenas especifica um diretório, e a opção dest
pode especificar um caminho e um nome de arquivo. Se um arquivo de saída já existir com o nome-alvo, o módulo substituirá o arquivo.
Para especificar o diretório no nó de controle ansible local onde as configurações recuperadas são salvas, inclua o dest_dir
argumento e defina o caminho para o diretório alvo. A configuração para cada dispositivo é armazenada em um arquivo separado chamado hostname.config.
O manual a seguir recupera a configuração comprometida de todos os dispositivos do grupo de inventário. O manual economiza a configuração de cada dispositivo em um arquivo separado no diretório de configurações sob o diretório de playbook sobre o nó de controle Ansible.
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Save configuration to a file" juniper.device.config: retrieve: "committed" dest_dir: "{{ playbook_dir }}/configs"
Para especificar o caminho e o nome do arquivo para os arquivos de saída, inclua o dest
argumento e defina o caminho absoluto ou relativo do arquivo. Se você incluir o dest
argumento, mas omitir o diretório, os arquivos serão salvos no playbook directory. Se você recuperar a configuração para vários dispositivos, o dest
argumento deve incluir uma variável como {{ inventory_hostname }}
diferenciar o nome de arquivo para cada dispositivo. Se você não diferenciar os nomes de arquivo, o arquivo de configuração para cada dispositivo substituirá o arquivo de configuração dos outros dispositivos.
O manual a seguir recupera a [edit system services]
hierarquia do banco de dados de configuração comprometido em todos os dispositivos do grupo de inventário. O manual economiza a configuração de cada dispositivo em um arquivo separado no diretório de playbook no nó de controle Ansible. Cada arquivo é identificado com exclusividade pelo nome de host do dispositivo.
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies and save to file" juniper.device.config: retrieve: "committed" filter: "system/services" dest: "{{ inventory_hostname }}-system-services-config"
Se você estiver economizando os dados de configuração em arquivos e não quiser duplicar os dados de configuração na resposta do módulo, você pode incluir return_output: false
opcionalmente na lista de argumentos do módulo. Configuração return_output
para false
fazer com que o módulo omite as chaves e config_parsed
as config
config_lines
chaves em sua resposta. Fazer isso pode ser necessário se o dispositivo devolver uma quantidade significativa de dados de configuração.
Como comparar a configuração ativa com uma configuração anterior
O juniper.device.config
módulo permite comparar a configuração ativa com uma configuração ou configuração de reversão previamente comprometida. Para comparar a configuração ativa com uma configuração anterior, inclua os seguintes argumentos do módulo:
juniper.device.config: diff: true rollback: id check: false commit: false
Por padrão, quando você inclui o rollback: id
argumento, o módulo reverte a configuração, realiza uma verificação de confirmação e confirma as alterações. Você deve incluir o commit: false
argumento para comparar apenas as configurações e evitar que o módulo carregamento e comenda a configuração de reversão. Incluir o check: false
argumento impede a operação desnecessária de verificação de confirmação.
O módulo devolve as chaves e o diff
módulo diff_lines
. As chaves contêm as diferenças de configuração entre a configuração ativa e anterior no formato diff ou patch.
-
diff
— um princípio que contém uma única chave nomeadaprepared
e seu valor, que é uma única corda multi-linha que contém as diferenças. -
diff_lines
— lista de strings de linha única que contêm as diferenças.
Para salvar as diferenças em um arquivo no nó de controle ansible local, inclua o diffs_file
argumento e defina o caminho absoluto ou relativo do arquivo de saída. Se você incluir o diffs_file
argumento, mas omitir o diretório, os arquivos serão salvos no playbook directory. Se você comparar as configurações em vários dispositivos, o diffs_file
argumento deve incluir uma variável como {{ inventory_hostname }}
diferenciar o nome do arquivo para cada dispositivo. Se você não diferenciar os nomes de arquivo, o arquivo de saída para cada dispositivo substituirá o arquivo de saída dos outros dispositivos.
O manual a seguir solicita a ID de reversão de uma configuração previamente comprometida. O manual então compara a configuração comprometida com a configuração de reversão especificada, economiza a comparação com um arquivo de nome exclusivo e também imprime a resposta à saída padrão.
--- - name: "Compare configurations" hosts: dc1 connection: local gather_facts: no vars_prompt: - name: "ROLLBACK" prompt: "Rollback ID to compare with active configuration" private: no tasks: - name: "Compare active to previous configuration" juniper.device.config: diff: true rollback: "{{ ROLLBACK }}" check: false commit: false diffs_file: "{{ inventory_hostname }}-diff-rollback-{{ ROLLBACK }}" register: response - name: "Print diff" ansible.builtin.debug: var: response
user@ansible-cn:~$ ansible-playbook configuration-compare-to-rollback.yaml Rollback ID to compare with active configuration: 2 PLAY [Compare configurations] ************************************************* TASK [Compare active to previous configuration] ****************************** changed: [dc1a.example.net] TASK [Print diff] ************************************************************ ok: [dc1a.example.net] => { "response": { "changed": true, "diff": { "prepared": "\n[edit system services]\n- netconf {\n- ssh;\n- }\n" }, "diff_lines": [ "", "[edit system services]", "- netconf {", "- ssh;", "- }" ], "failed": false, "msg": "Configuration has been: opened, rolled back, diffed, closed." } } PLAY RECAP ******************************************************************** dc1a.example.net : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
user@ansible-cn:~$ cat dc1a.example.net-diff-rollback-2 [edit system services] - netconf { - ssh; - }