Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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.

Tabela 1: Módulos de comando e RPC

Conjunto de conteúdo

Nome do módulo

juniper.device coleção

command

rpc

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.

Nota:

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, commandsque é 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.

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, rpcsque é 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.

Nota:

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.

Nota:

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.

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:

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.

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_linese 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:

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:

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:

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:

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.

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.