Use o Ansible para executar comandos e RPCs em dispositivos Junos
RESUMO Use os módulos Ansible da Juniper Networks para executar comandos de 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 procedimentos remotos (RPCs) em dispositivos Junos. A Tabela 1 descreve os módulos.
Conjunto de conteúdo |
Nome do módulo |
---|---|
|
As seções a seguir discutem como usar os módulos, analisar a resposta do módulo, especificar o formato de saída e salvar a saída em um arquivo.
Para extrair dados direcionados com mais facilidade da saída operacional, você também pode usar o juniper.device.table
módulo com tabelas operacionais do Junos PyEZ personalizadas ou predefinidas. Para obter mais informações, consulte Use Ansible with Junos PyEZ Tables para recuperar informações operacionais dos dispositivos Junos.
Como executar comandos com os módulos da Juniper Networks
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 de modo operacional Junos OS para executar no dispositivo.
O manual a seguir executa dois comandos de modo operacional em cada dispositivo no grupo de inventário e exibe a resposta do módulo na saída padrão. Neste exemplo, o command
módulo autentica com o dispositivo usando chaves SSH no local padrão.
--- - 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 o formato de resposta e saída do módulo, consulte Entendendo a resposta do módulo e como especificar o formato para a saída de comando ou RPC.
Como executar RPCs com os módulos da Juniper Networks
A API Junos XML é uma representação XML de declarações de configuração do Junos OS e comandos de modo operacional. Ele define um equivalente XML para todas as declarações na hierarquia de configuração do Junos OS e muitos dos comandos de modo operacional que você emite no Junos OS CLI. Cada comando de modo operacional com uma contraparte do Junos XML mapeia um elemento de tag de solicitação e, se necessário, um elemento de tag de resposta. As etiquetas de solicitação são usadas em chamadas de procedimento remoto (RPCs) dentro de sessões de protocolo NETCONF ou Junos XML para solicitar informações de um dispositivo Junos. O servidor retorna a resposta usando elementos Junos XML incluídos no elemento tag de resposta.
O juniper.device.rpc
módulo permite que você execute RPCs em dispositivos Junos. Os módulos exigem um único argumento, rpcs
que é uma lista de um ou mais RPCs Junos OS para executar no dispositivo.
O manual a seguir executa o get-interface-information
RPC em cada dispositivo do grupo de inventário e exibe a resposta do módulo na saída padrão. , o RPC é equivalente ao comando do show interfaces
modo operacional. Neste exemplo, o rpc
módulo autentica com o dispositivo usando chaves SSH no local padrão.
--- - 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 comandos de mapeamento de CLI para tags de solicitação de RPC, consulte o Junos XML API Explorer para obter tags operacionais.
Para obter informações sobre o formato de resposta e saída do módulo, consulte Entendendo a resposta do módulo e como especificar o formato para a saída de comando ou RPC.
O juniper.device.rpc
módulo oferece suporte à opção kwargs
, que permite especificar argumentos e valores de palavras-chave para os RPCs. O valor kwargs
pode ser:
-
Um único princípio de palavras-chave e valores
-
Uma lista de fornecedores que fornecem argumentos para vários RPCs
Deve haver uma correspondência de um a um entre os itens da kwargs
lista e os RPCs da rpcs
lista. Se você executar vários RPCs e um RPC não exigir argumentos, defina o item da lista correspondente kwargs
igual a um insípido {}
vazio. Se um argumento de 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 manual a seguir executa os RPCs especificados em cada dispositivo no grupo de inventário e exibe a resposta do módulo na saída padrão. O get-interface-information
RPC solicita saída de nível terse para a interface lo0.0 e o get-lldp-interface-neighbors
RPC solicita informações para a interface ge-0/0/0. O get-software-information
RPC usa um insumos 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
os módulos armazenam a resposta RPC do dispositivo em várias chaves diferentes na resposta do módulo. Os dados de cada chave estão estruturados da seguinte forma:
-
stdout
— A resposta de RPC é uma única corda multi-linha. -
stdout_lines
— A resposta do RPC é uma lista de strings de linha única. -
parsed_output
— A resposta do RPC é analisada em uma estrutura de dados de notação de objetos JavaScript (JSON). Essa chave só é devolvida quando o formato dos dados é XML ou JSON.
Se o módulo executar um único comando ou RPC, a resposta do módulo coloca as chaves devolvidas no nível superior. Se o módulo executar vários comandos ou RPCs, a resposta do módulo inclui uma results
chave, que é uma lista de componentes. Cada elemento da lista corresponde a um único comando ou RPC e inclui todas as chaves que seriam devolvidas 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 a saída de comando ou RPC
Os command
módulos e rpc
os módulos armazenam a resposta RPC do dispositivo em 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 contêm stdout_lines
dados no formato padrão definido para o módulo. Por padrão, o command
módulo retorna a saída de 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 desejado. Os formatos suportados incluem:
-
json
-
text
-
xml
O formats
parâmetro requer uma string ou uma lista de strings. Quando você executa vários comandos ou RPCs e especifica apenas um único formato, o formato de saída é o mesmo para todos os comandos e RPCs executados. Para especificar um formato diferente para a saída de cada comando ou RPC, configure o formats
argumento em uma lista dos formatos desejados. A lista deve especificar o mesmo número de formatos que existem comandos ou RPCs.
O manual a seguir executa dois RPCs em cada dispositivo no grupo de inventário e solicita 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
Quando o manual é executado, a resposta e stdout_lines
as stdout
chaves do módulo contêm a resposta RPC no formato de texto.
O manual a seguir executa dois RPCs em cada dispositivo no grupo de inventário e solicita a saída para o primeiro RPC no 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 a saída de comando ou RPC em um arquivo
Quando você usa o e juniper.device.rpc
os juniper.device.command
módulos para executar um comando ou RPC em um dispositivo, você pode salvar os dados devolvidos em um arquivo no nó de controle ansible local, incluindo os argumentos do módulo ou dest_dir
do dest
módulo. Considerando que a opção dest_dir
economiza a saída para cada comando ou RPC em arquivos separados para um dispositivo, a opção dest
economiza a saída para todos os comandos e RPCs no mesmo arquivo para um dispositivo. Se um arquivo de saída já existir com o nome-alvo, o módulo substituirá o arquivo.
Se você estiver economizando os dados em um arquivo e não quiser duplicar o comando ou a saída RPC 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 de saída na resposta do módulo. Fazer isso pode ser necessário se o dispositivo devolver uma quantidade significativa de dados.
As seções a seguir descrevem como usar e dest
opçõesdest_dir
.
dest_dir
Para especificar o diretório no nó de controle ansible local onde os dados recuperados são salvos, inclua o dest_dir
argumento e defina o caminho para o diretório alvo. 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 de host do dispositivo no qual o comando ou o RPC são executados.
-
name— Nome do comando ou RPC executado no dispositivo gerenciado. O módulo substitui espaços no nome de comando por sublinhados ( _ ).
-
format— Formato da saída, que pode ser json, texto ou xml.
O manual a seguir executa dois RPCs em cada dispositivo no grupo de inventário e economiza a saída para cada RPC para cada dispositivo em um arquivo separado no diretório de playbook sobre o nó de controle 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 o host dc1a.example.net são:
-
dc1a.example.net_get-software-information.xml
-
dc1a.example.net_get-system-uptime-information.xml
Da mesma forma, o manual a seguir executa os comandos equivalentes em cada dispositivo no grupo de inventário e economiza a saída para cada comando para cada dispositivo em um arquivo separado no diretório de playbook no nó de controle 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 o host dc1a.example.net são:
-
dc1a.example.net_show_version.text
-
dc1a.example.net_show_system_uptime.text
dest
Para especificar o caminho e o nome do arquivo ao qual todo o comando ou saída RPC para um nó alvo é salvo no nó de controle ansible local, inclua o dest
argumento e 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 playbook directory. Se você executar comandos ou RPCs em 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 saída para cada dispositivo substituirá o arquivo de saída dos outros dispositivos.
O manual a seguir executa RPCs em cada dispositivo do grupo de inventário. A saída para todos os RPCs é armazenada em um arquivo separado para cada dispositivo, e o arquivo é colocado no diretório de playbook no nó de controle Ansible. Cada arquivo é identificado com exclusividade 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 o host dc1a.example.net é dc1a.example.net-system-information.xml e contém a saída para todos os RPCs executados no dispositivo.