Usar os módulos e juniper.device.rpc o juniper.device.command Ansible para executar comandos e RPCs em dispositivos Junos
Você pode usar os módulos e juniper.device.rpc Ansible para executar comandos de juniper.device.command modo operacional e RPCs em dispositivos Junos.
A Juniper Networks oferece módulos Ansible que você pode usar para executar comandos de modo operacional e chamadas de procedimento remoto (RPCs) em dispositivos que executam o Junos OS e dispositivos que executam o Junos OS Evolved. A Tabela 1 descreve os módulos. Se você já estiver usando um determinado conjunto de módulos da juniper.device coleção, use os módulos para esse conjunto.
|
Coleção de Emoji |
Conjunto de módulos |
Nome do módulo |
|---|---|---|
|
|
|
|
|
|
As seções a seguir discutem como usar os juniper.device.command módulos and juniper.device.rpc , analisar a resposta do módulo, especificar o formato de saída e salvar a saída em um arquivo.
Para extrair mais facilmente os dados direcionados da saída operacional, você também pode usar o juniper.device.table módulo com tabelas operacionais personalizadas ou predefinidas do Junos PyEZ. Para obter mais informações, consulte Usar o Ansible com tabelas do Junos PyEZ para recuperar informações operacionais de dispositivos Junos.
Como Executar Comandos com o juniper.device.command Módulo
O juniper.device.command módulo permite que você execute comandos de modo operacional em dispositivos Junos. O módulo requer um argumento, commands, que é uma lista de um ou mais comandos do modo operacional do Junos OS para serem executados no dispositivo.
O guia estratégico a seguir executa dois comandos de modo operacional em cada dispositivo no grupo de inventário. O playbook exibe a resposta do módulo na saída padrão (stdout).
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.command:
commands:
- "show version"
- "show system uptime"
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
Para obter informações sobre a resposta e o formato de saída do módulo, consulte Noções básicas sobre a resposta do módulo e como especificar o formato para o comando ou a saída RPC.
Como executar RPCs com o juniper.device.rpc módulo
A API XML do Junos é uma representação XML das declarações de configuração do Junos OS e dos comandos do modo operacional. Ele define um equivalente XML para todas as instruções na hierarquia de configuração do Junos OS e muitos dos comandos de modo operacional que você emite na CLI do Junos OS. Cada comando de modo operacional com uma contraparte XML do Junos é mapeado para um elemento de tag de solicitação e, se necessário, um elemento de tag de resposta. As tags de solicitação são usadas em RPCs dentro de sessões do protocolo NETCONF ou Junos XML para solicitar informações de um dispositivo Junos. O servidor retorna a resposta usando elementos XML do Junos incluídos no elemento de tag de resposta correspondente.
O juniper.device.rpc módulo permite que você execute RPCs em dispositivos Junos. O módulo requer um argumento, rpcs, que é uma lista de um ou mais RPCs do Junos OS para serem executados no dispositivo.
O guia estratégico a seguir executa o get-interface-information RPC em cada dispositivo no grupo de inventário e exibe a resposta do módulo em stdout. O RPC é equivalente ao comando de show interfaces modo operacional.
---
- name: Execute RPC
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get interface information
juniper.device.rpc:
rpcs: "get-interface-information"
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
Para obter informações sobre como mapear comandos da CLI para tags de solicitação RPC, consulte o Junos XML API Explorer para tags operacionais.
Para obter informações sobre a resposta e o formato de saída do módulo, consulte Noções básicas sobre a resposta do módulo e como especificar o formato para o comando ou a saída RPC.
O juniper.device.rpc módulo oferece suporte kwargs à opção, que permite especificar argumentos e valores de palavra-chave para os RPCs. O valor de kwargs pode ser:
-
Um único dicionário de palavras-chave e valores
-
Uma lista de dicionários que fornece argumentos para vários RPCs
Deve haver uma correspondência um-para-um entre os itens na kwargs lista e os RPCs na rpcs lista. Se você executar vários RPCs e um RPC não exigir nenhum argumento, defina o item de lista correspondente kwargs igual a um dicionário {}vazio. Se um argumento RPC individual não exigir um valor, defina seu valor igual a true.
Você deve usar sublinhados em argumentos RPC no lugar de hífens, o que pode causar exceções ou erros em determinadas circunstâncias.
O guia estratégico a seguir executa os RPCs especificados em cada dispositivo no grupo de inventário e exibe a resposta do módulo em stdout. O get-interface-information RPC solicita uma saída de nível conciso para a interface lo0.0. O get-lldp-interface-neighbors RPC solicita informações para a interface ge-0/0/0. O get-software-information RPC usa um dicionário vazio para executar o RPC sem argumentos adicionais.
---
- name: Get Device Information
hosts: dc1a
connection: local
gather_facts: no
tasks:
- name: Get device information
juniper.device.rpc:
rpcs:
- "get-interface-information"
- "get-lldp-interface-neighbors"
- "get-software-information"
kwargs:
- interface_name: "lo0.0"
terse: true
- interface_device: "ge-0/0/0"
- {}
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
Entendendo a resposta do módulo
Os juniper.device.command módulos e juniper.device.rpc armazenam a resposta RPC do dispositivo dentro de várias chaves diferentes na resposta do módulo. Os dados de cada chave são estruturados da seguinte forma:
-
stdout— A resposta RPC é uma única string de várias linhas. -
stdout_lines— A resposta RPC é uma lista de strings de linha única. -
parsed_output— A resposta RPC é analisada em uma estrutura de dados JavaScript Object Notation (JSON). Essa chave só está presente quando o formato dos dados é XML ou JSON.
Se o módulo executar um único comando ou RPC, a resposta do módulo colocará as chaves retornadas no nível superior. Se o módulo executar vários comandos ou RPCs, a resposta do módulo incluirá uma results chave, que é uma lista de dicionários. Cada elemento na lista corresponde a um único comando ou RPC. Ele inclui todas as chaves retornadas para esse comando ou RPC.
Por exemplo, a resposta a seguir corresponde à execução de um único RPC:
"junos_result": {
"attrs": null,
"changed": false,
"failed": false,
"format": "xml",
"kwargs": null,
"msg": "The RPC executed successfully.",
"parsed_output": {
"interface-information": {
"physical-interface": [
[...output omitted...]
}
},
"rpc": "get-interface-information",
"stdout": "<interface-information style=\"normal\">\n <physical-interface>\n
[...output omitted...] </physical-interface>\n</interface-information>\n"
"stdout_lines": [
"<interface-information style=\"normal\">",
" <physical-interface>",
[...output omitted...]
" </physical-interface>",
"</interface-information>"
]
}
Em alguns casos, a saída de comando ou RPC pode ser extensa e pode ser necessário suprimir a saída na resposta do módulo. Para omitir as chaves de saída na resposta do módulo, inclua return_output: false na lista de argumentos desse módulo.
tasks:
- name: Get interface information
juniper.device.rpc:
rpcs: "get-interface-information"
return_output: false
register: junos_result
Como especificar o formato para o comando ou a saída RPC
Os command módulos e rpc armazenam a resposta RPC do dispositivo dentro de várias chaves diferentes na resposta do módulo: stdout, stdout_lines, e parsed_output. A parsed_output chave, que só está presente quando o formato de saída de comando ou RPC é XML ou JSON, contém dados que são analisados em uma estrutura de dados JSON.
As stdout chaves e stdout_lines contêm dados no formato padrão definido para o módulo. Por padrão, o command módulo retorna a saída do comando no formato de texto e o rpc módulo retorna a saída RPC no formato XML.
Para especificar um formato de saída diferente, inclua o formats argumento e defina o valor igual ao formato necessário. Os formatos suportados incluem:
-
json -
text -
xml
O formats parâmetro usa uma string ou uma lista de strings. Quando você especifica apenas um único formato, todos os comandos ou RPCs executados usam esse formato. Para especificar um formato diferente para cada comando ou RPC, defina o formats argumento como uma lista dos formatos necessários. O número de formatos deve ser o mesmo que o número de comandos ou RPCs.
O guia estratégico a seguir executa dois RPCs em cada dispositivo no grupo de inventário. O playbook solicita o formato de texto para a saída de todos os RPCs executados.
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and system uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
formats: text
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
Na resposta do módulo, as stdout chaves e stdout_lines contêm a resposta RPC em formato de texto.
O guia estratégico a seguir executa dois RPCs em cada dispositivo no grupo de inventário. O módulo solicita a saída para o primeiro RPC em formato de texto e a saída para o segundo RPC no formato JSON.
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and system uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
formats:
- "text"
- "json"
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
Como salvar o comando ou a saída RPC em um arquivo
Ao usar o juniper.device.command módulo ou juniper.device.rpc , você pode salvar os dados retornados em um arquivo no nó de controle local do Ansible. Para salvar os dados, inclua o dest argumento ou dest_dir módulo. A dest_dir opção salva a saída de cada comando ou RPC em arquivos separados para um dispositivo. A dest opção salva a saída de todos os comandos e RPCs no mesmo arquivo de um dispositivo. Se um arquivo de saída já existir com o nome de destino, o módulo substituirá o arquivo.
Se você salvar os dados em um arquivo e não quiser duplicar a saída na resposta do módulo, poderá opcionalmente incluir return_output: false na lista de argumentos do módulo. Definir return_output como false faz com que o módulo omita as chaves de saída na resposta do módulo. Omitir as chaves pode ser necessário se o dispositivo retornar uma quantidade significativa de dados.
As seções a seguir descrevem como usar as dest_dir opções e dest .
dest_dir
Para especificar o diretório no nó de controle local do Ansible em que os dados recuperados são salvos, inclua o dest_dir argumento e defina o caminho para o diretório de destino. O módulo armazena a saída para cada comando ou RPC executado em um dispositivo em um arquivo separado chamado hostname_name.format onde:
-
hostname— Nome do host do dispositivo no qual o comando ou RPC é executado.
-
name— Nome do comando ou RPC executado no dispositivo gerenciado. O módulo substitui os espaços no nome do comando por sublinhados ( _ ).
-
format— Formato da saída, que pode ser json, text ou xml.
O guia estratégico a seguir executa dois RPCs em cada dispositivo no grupo de inventário. O playbook salva a saída de cada RPC para cada dispositivo em um arquivo separado no diretório do playbook no nó de controle do Ansible.
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
dest_dir: "{{ playbook_dir }}"
Os arquivos de saída resultantes para dc1a.example.net host são:
-
dc1a.example.net_get-software-information.xml
-
dc1a.example.net_get-system-tempo de atividade-information.xml
Da mesma forma, o guia estratégico a seguir executa os comandos equivalentes em cada dispositivo no grupo de inventário. O playbook salva a saída de cada comando para cada dispositivo em um arquivo separado no diretório do playbook no nó de controle do Ansible:
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.command:
commands:
- "show version"
- "show system uptime"
dest_dir: "{{ playbook_dir }}"
Os arquivos de saída resultantes para dc1a.example.net host são:
-
dc1a.example.net_show_version.text
-
dc1a.example.net_show_system_tempo de atividade.text
dest
Você pode usar a dest opção para especificar o arquivo de saída no qual todo o comando ou saída RPC para um nó de destino é salvo no nó de controle local do Ansible. Defina o nome do arquivo ou o caminho completo do arquivo. Se você incluir o dest argumento, mas omitir o diretório, os arquivos serão salvos no diretório do playbook. Se você executar comandos ou RPCs em vários dispositivos, o dest argumento deverá incluir uma variável para {{ inventory_hostname }} diferenciar o nome de arquivo de cada dispositivo. Se você não diferenciar os nomes de arquivo, o arquivo de saída de cada dispositivo substituirá o arquivo de saída dos outros dispositivos.
O manual a seguir executa RPCs em cada dispositivo no grupo de inventário. O playbook salva a saída de todos os RPCs em um arquivo separado para cada dispositivo. O arquivo é colocado no diretório do playbook no nó de controle do Ansible. Cada arquivo é identificado exclusivamente pelo nome de host do dispositivo.
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
dest: "{{ inventory_hostname }}-system-information.xml"
Por exemplo, o arquivo de saída resultante para dc1a.example.net host é dc1a.example.net-system-information.xml e contém a saída para todos os RPCs executados no dispositivo.