Use Ansible para recuperar fatos dos dispositivos Junos
A Juniper Networks oferece módulos Ansible que você pode usar para gerenciar dispositivos Junos e realizar tarefas operacionais e de configuração nos dispositivos. Os módulos não exigem Python no dispositivo gerenciado porque usam o Junos PyEZ e a API Junos XML sobre NETCONF para interface com o dispositivo. Portanto, quando você usa o Ansible para realizar operações em dispositivos Junos, você deve executar os módulos Ansible localmente no nó de controle. Como resultado, a Ansible está inadimplente em coletar fatos do nó de controle Ansible em vez do nó gerenciado.
A Juniper Networks fornece um módulo que você pode usar para reunir fatos do dispositivo, incluindo a configuração ativa, a partir de dispositivos Junos. A Tabela 1 descreve o módulo disponível. O módulo usa o sistema de coleta de fatos Junos PyEZ para recuperar os fatos do dispositivo. Para obter mais informações sobre o sistema de coleta de fatos Junos PyEZ e a lista completa de chaves de dicionário devolvidas, veja jnpr.junos.facts.
| Conjunto de conteúdo |
Nome do módulo |
|---|---|
|
|
O facts módulo devolve os fatos do dispositivo no níquete ansible_facts.junos . O módulo também permite que você economize os dados devolvidos em um arquivo no nó de controle ansível local. Para especificar o diretório no qual salvar as informações recuperadas, inclua o argumento do savedir módulo e defina o caminho para o diretório alvo. Quando você inclui o savedir argumento, o manual gera os seguintes arquivos para cada dispositivo, onde hostname está o valor do hostname fato recuperado do dispositivo, que pode ser diferente do nome de host passado para o módulo:
-
hostname-facts.json — Fatos do dispositivo no formato JSON
-
hostname-inventory.xml — Inventário de hardware do dispositivo em formato XML
Por exemplo, a playbook a seguir recupera os fatos do dispositivo para cada dispositivo no grupo de inventário e economiza os dados para cada dispositivo em arquivos separados no diretório de playbook no nó de controle Ansible. Como o manual executa o módulo localmente, a facts Ansible é padrão para coletar fatos do nó de controle. O manual inclui o gather_facts: no argumento para evitar que Ansible reúna fatos do nó de controle e, em vez disso, usa o juniper.device.facts módulo para recuperar os fatos do dispositivo gerenciado. Para autenticar com o dispositivo, o exemplo usa as chaves SSH existentes no local padrão e, portanto, não fornece credenciais explicitamente para o facts módulo no manual.
---
- name: Get device facts
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Retrieve device facts and save to file
juniper.device.facts:
savedir: "{{ playbook_dir }}"
Por padrão, o facts módulo não retorna a configuração do dispositivo. Para devolver a configuração ativa para um dispositivo, além dos fatos do dispositivo, inclua a opção config_format e especifique o formato em que devolver a configuração. Valores de formato aceitáveis são'json', 'set''text' e'xml'. O formato solicitado deve ser suportado pela versão do Junos OS em execução no dispositivo.
Quando você inclui a opção config_format , o ansible_facts.junos níquete na resposta do módulo inclui a config chave com a configuração no formato especificado em uma única corda multi-linha. No entanto, mesmo que o manual inclua a opção savedir , os dados de configuração não estão escritos em um arquivo.
Para usar o Ansible para recuperar dados de configuração de um dispositivo Junos e salvar os dados em um arquivo, use o config módulo em vez do facts módulo. Para obter mais informações, consulte Use Ansible para recuperar ou comparar as configurações do Junos OS.
O manual do próximo exemplo executa as seguintes operações:
-
Recupera os fatos do dispositivo e a configuração ativa para cada dispositivo no grupo de inventário
-
Salva os fatos e o inventário de hardware para cada dispositivo em arquivos separados no diretório de playbook no nó de controle Ansible
-
Imprime a configuração de cada dispositivo à saída padrão
---
- name: Get device facts and configuration
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Retrieve device facts and configuration and save facts to file
juniper.device.facts:
savedir: "{{ playbook_dir }}"
config_format: "xml"
register: result
- name: Print configuration
ansible.builtin.debug:
var: result.ansible_facts.junos.config
user@ansible-cn:~$ ansible-playbook facts.yaml
PLAY [Get device facts and configurations] **********************************
TASK [Retrieve device facts and configuration and save facts to file] *******
ok: [dc1a.example.net]
TASK [Print configuration] **************************************************
ok: [dc1a.example.net] => {
"result.ansible_facts.junos.config": "<configuration commit-seconds=\"1605564153\" commit-localtime=\"2020-11-16 14:02:33 PST\" commit-user=\"admin\">\n <version>20191212.201431_builder.r1074901</version>\n
[...output truncated...]
</configuration>\n"
}
PLAY RECAP ******************************************************************
dc1a.example.net : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0