Usar o juniper.device.system módulo Ansible para parar, reiniciar ou desligar dispositivos Junos
Use o módulo Ansible para parar, reiniciar ou desligar dispositivos que executam o Junos OS ou dispositivos que executam o juniper.device.system Junos OS Evolved.
Use o Ansible para interromper, reiniciar ou desligar dispositivos
A Juniper Networks oferece um módulo Ansible que você pode usar para interromper, reiniciar ou desligar dispositivos que executam o Junos OS ou dispositivos que executam o Junos OS Evolved. A Tabela 1 descreve o módulo disponível.
|
Coleção de Emoji |
Conjunto de módulos |
Nome do módulo |
|---|---|---|
|
|
Você pode usar o juniper.device.system módulo para solicitar as seguintes operações em dispositivos Junos. Por padrão, o módulo executa imediatamente a operação solicitada e executa a operação em todos os mecanismos de roteamento em uma configuração de Mecanismo de Roteamento duplo ou Virtual Chassis.
-
Uma parada, reinicialização ou desligamento imediato do sistema
-
Uma operação de parada, reinicialização ou desligamento com um atraso opcional
-
Uma operação de interrupção, reinicialização ou desligamento agendada em uma data e hora específicas
O system módulo requer um argumento, action, que define a ação a ser executada. A Tabela 2 define os action valores dos parâmetros e fornece uma breve descrição de cada ação, bem como o comando CLI correspondente. Para obter informações sobre a "zeroize" ação, consulte Usar o módulo Ansible juniper.device.system para restaurar um dispositivo Junos ao seu estado padrão de fábrica.
|
|
Descrição |
Comando CLI equivalente |
|---|---|---|
|
|
Desligue normalmente o software Junos OS ou o software Junos OS Evolved, mas mantenha a energia do sistema |
|
|
|
Reinicie o software Junos OS ou o software Junos OS Evolved |
|
|
|
Desligue normalmente o software Junos OS ou o software Junos OS Evolved e desligue os mecanismos de roteamento |
|
O manual do Ansible a seguir usa o juniper.device.system módulo com action: reboot para reinicializar imediatamente todos os mecanismos de roteamento nos hosts no grupo de inventário especificado.
---
- name: Reboot Junos devices
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Reboot all REs on the device
juniper.device.system:
action: reboot
Como executar uma parada, reinicialização ou desligamento com um atraso ou em um horário especificado
Você pode atrasar a operação de parada, reinicialização ou desligamento por um número especificado de minutos. Para adicionar um atraso, defina o parâmetro opcional in_min como o número de minutos que o sistema deve aguardar antes de executar a operação. A tarefa a seguir solicita uma reinicialização de todos os mecanismos de roteamento em 30 minutos:
---
- name: Reboot Junos devices
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Reboot all REs in 30 minutes
juniper.device.system:
action: reboot
in_min: 30
Você também pode agendar a operação de parada, reinicialização ou desligamento em um horário específico. Para agendar um horário, inclua o at parâmetro, que usa uma cadeia de caracteres que pode ser especificada de uma das seguintes maneiras:
-
now— Inicie imediatamente a interrupção, reinicialização ou desligamento do software. -
+minutes— Número de minutos a partir de agora em que a ação solicitada é iniciada. -
yymmddhhmm— Hora absoluta para iniciar a ação solicitada, especificada como ano, mês, dia, hora e minuto. -
hh:mm— Hora absoluta no dia atual para iniciar a ação solicitada, especificada em 24 horas.
A tarefa a seguir agenda um desligamento do sistema de todos os mecanismos de roteamento às 22:30 do dia atual:
tasks:
- name: Shut down all REs at 22:30 on the current day
juniper.device.system:
action: shutdown
at: "22:30"
Como Especificar o Mecanismo de Roteamento de Destino
Por padrão, o juniper.device.system módulo executa a operação solicitada em todos os mecanismos de roteamento em uma configuração de Mecanismo de Roteamento duplo ou Virtual Chassis. Você também pode instruir o módulo a realizar a operação apenas no Mecanismo de Roteamento ao qual o aplicativo está conectado ou a realizar a operação em todos os Mecanismos de Roteamento, exceto aquele ao qual o aplicativo está conectado.
Para especificar os mecanismos de roteamento, use os all_re parâmetros e other_re . A Tabela 3 resume os valores e other_re os all_re valores necessários para executar a operação solicitada em mecanismos de roteamento específicos.
|
Mecanismos de roteamento afetados |
|
|
|---|---|---|
|
Todos os mecanismos de roteamento (padrão) |
Omitir ou definir como |
– |
|
Somente o Mecanismo de Roteamento conectado |
Defina como |
– |
|
Todos os mecanismos de roteamento, exceto o Mecanismo de Roteamento ao qual o aplicativo está conectado |
– |
Defina como |
Para indicar explicitamente que a operação deve ser executada em todos os mecanismos de roteamento em uma configuração de Mecanismo de Roteamento duplo ou Virtual Chassis, inclua o all_re: true argumento, que é o padrão.
---
- name: Reboot Junos devices
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Reboot all Routing Engines
juniper.device.system:
action: reboot
all_re: true
Para executar a ação solicitada apenas no Mecanismo de Roteamento ao qual o aplicativo está conectado, inclua o all_re: false argumento.
tasks:
- name: Reboot only the connected Routing Engine
juniper.device.system:
action: reboot
all_re: false
Para executar a ação solicitada em todos os mecanismos de roteamento no sistema, exceto no Mecanismo de Roteamento ao qual o aplicativo está conectado, inclua o other_re: true argumento.
tasks:
- name: Shut down all other Routing Engines
juniper.device.system:
action: shutdown
other_re: true
Como reiniciar ou desligar um host de VM
Em dispositivos que têm mecanismos de roteamento com suporte a host de VM, o Junos OS é executado como uma máquina virtual (VM) em um host baseado em Linux (host de VM). O juniper.device.system módulo dá suporte vmhost ao argumento, que permite reinicializar ou desligar um host de VM.
Quando você inclui os action: reboot argumentos and vmhost: true , o sistema reinicializa o sistema operacional host e o Junos OS compatível em todos os mecanismos de roteamento executando o <request-vmhost-reboot> RPC, que corresponde ao comando do request vmhost reboot modo operacional.
Da mesma forma, quando você inclui os action: shutdown argumentos and vmhost: true , o sistema desliga o sistema operacional host e o Junos OS compatível em todos os mecanismos de roteamento executando o <request-vmhost-poweroff> RPC, que corresponde ao request vmhost power-off comando do modo operacional.
O guia estratégico a seguir executa uma reinicialização do host da VM, que reinicializa o sistema operacional do host e o Junos OS convidado.
---
- name: Reboot VM Hosts
hosts: vm_hosts
connection: local
gather_facts: no
tasks:
- name: Reboot VM host
juniper.device.system:
action: reboot
vmhost: true
all_re: false
Exemplo: usar o Ansible para reiniciar dispositivos Junos
O juniper.device.system módulo permite que você pare, reinicie ou desligue um dispositivo Junos. Este exemplo usa o system módulo para reinicializar um dispositivo Junos.
Requerimentos
Este exemplo usa os seguintes componentes de hardware e software:
-
Servidor de gerenciamento de configuração executando o Ansible 2.17 ou posterior com a
juniper.devicecoleção instalada -
Dispositivo Junos com NETCONF habilitado e uma conta de usuário configurada com as permissões apropriadas
-
Par de chaves pública/privada SSH configurado para o usuário apropriado no nó de controle do Ansible e no dispositivo Junos
-
Arquivo de inventário existente do Ansible com hosts necessários definidos
Visão geral
Este exemplo apresenta um playbook do Ansible que usa o juniper.device.system módulo para reinicializar um dispositivo Junos. O valor do argumento do action módulo define a operação a ser executada no host.
Ao chamar o módulo de um manual, recomendamos que você use um prompt interativo para confirmar que o usuário pretende reinicializar os dispositivos especificados. Se um usuário executar o playbook sem querer e não houver nenhuma verificação, isso poderá afetar negativamente as redes que exigem os dispositivos afetados. Como precaução, este guia estratégico usa um prompt interativo para verificar se o usuário pretende reinicializar os dispositivos. O prompt requer que o usuário digite manualmente 'yes' na linha de comando para executar o módulo. Se a Confirmation check tarefa falhar, o nó de controle do Ansible ignorará as outras tarefas na reprodução para esse dispositivo.
Este playbook inclui a Check NETCONF connectivity tarefa, que utiliza o ansible.builtin.wait_for módulo para tentar estabelecer uma sessão NETCONF com o dispositivo Junos usando a porta NETCONF padrão 830. Se o nó de controle não conseguir estabelecer uma sessão NETCONF com o dispositivo durante a execução do manual, ele ignorará as tarefas restantes na reprodução para esse dispositivo.
A tarefa de reinicialização executa o módulo, juniper.device.system desde que as verificações de confirmação e NETCONF tenham sido bem-sucedidas. O action argumento é definido como reboot, o que indica que o software deve ser reinicializado. O in_min: 2 argumento instrui o módulo a aguardar o número especificado de minutos antes de executar o comando reboot. Isso fornece tempo para todos os usuários saírem do sistema.
A tarefa armazena o resultado do result módulo na variável e notifica dois manipuladores. O pause_for_reboot manipulador aguarda um período de tempo especificado após o início da operação de reinicialização para impedir que o wait_reboot manipulador detecte falsamente que o dispositivo está online antes que a reinicialização ocorra. Em seguida, o wait_reboot manipulador tenta estabelecer uma sessão com o dispositivo para verificar se o dispositivo volta a ficar online após a reinicialização. A wait_time_after_reboot variável define o período de tempo que o nó de controle tenta se reconectar ao dispositivo.
Configuração
Criar e executar o playbook do Ansible
Procedimento passo a passo
Para criar um playbook que usa o juniper.device.system módulo para reinicializar um dispositivo Junos:
-
Inclua o clichê do manual e desta jogada, que executa os módulos localmente.
--- - name: Reboot Junos devices hosts: dc1 connection: local gather_facts: no
-
Defina ou importe as variáveis necessárias.
vars: wait_time_after_reboot: 300 netconf_port: 830 -
Crie um prompt interativo para impedir que os usuários executem acidentalmente o módulo sem primeiro entender as implicações.
vars_prompt: - name: "reboot_confirmation" prompt: "This playbook reboots devices. Enter 'yes' to continue" private: no -
Crie a tarefa que confirma a intenção do usuário.
tasks: - name: Confirmation check fail: msg="Playbook run confirmation failed" when: reboot_confirmation != "yes" -
(Opcional) Crie uma tarefa para verificar a conectividade NETCONF.
- name: Check NETCONF connectivity ansible.builtin.wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: 5 -
Crie a tarefa para reinicializar o dispositivo após um número especificado de minutos e notifique os manipuladores.
- name: Reboot all Routing Engines on the Junos device juniper.device.system: action: reboot in_min: 2 all_re: true register: result notify: - pause_for_reboot - wait_reboot -
(Opcional) Crie uma tarefa para imprimir a resposta.
- name: Print response ansible.builtin.debug: var: result -
Crie o manipulador que pausa após a reinicialização e o manipulador que verifica se o dispositivo volta a ficar online após a reinicialização.
Os nomes do manipulador devem ser os mesmos referenciados na tarefa de reinicialização.
handlers: - name: pause_for_reboot pause: seconds: 180 when: result.reboot - name: wait_reboot ansible.builtin.wait_for: host: "{{ inventory_hostname }}" port: "{{ netconf_port }}" timeout: "{{ wait_time_after_reboot }}" when: result.reboot
Resultados
No nó de controle do Ansible, examine o manual concluído. Se o guia estratégico não exibir o código pretendido, repita as instruções neste exemplo para corrigir o manual.
---
- name: Reboot Junos devices
hosts: dc1
connection: local
gather_facts: no
vars:
wait_time_after_reboot: 300
netconf_port: 830
vars_prompt:
- name: "reboot_confirmation"
prompt: "This playbook reboots devices. Enter 'yes' to continue"
private: no
tasks:
- name: Confirmation check
fail: msg="Playbook run confirmation failed"
when: reboot_confirmation != "yes"
- name: Check NETCONF connectivity
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: "{{ netconf_port }}"
timeout: 5
- name: Reboot all Routing Engines on the Junos device
juniper.device.system:
action: reboot
in_min: 2
all_re: true
register: result
notify:
- pause_for_reboot
- wait_reboot
- name: Print response
ansible.builtin.debug:
var: result
handlers:
- name: pause_for_reboot
pause:
seconds: 180
when: result.reboot
- name: wait_reboot
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: "{{ netconf_port }}"
timeout: "{{ wait_time_after_reboot }}"
when: result.reboot
Execute o manual
Tramitação processual
Procedimento passo a passo
Para executar o manual:
-
Emita o
ansible-playbookcomando no nó de controle e forneça o caminho do guia estratégico e as opções desejadas.user@ansible-cn:~/ansible$ ansible-playbook ansible-pb-junos-reboot.yaml This playbook reboots devices. Enter 'yes' to continue: yes PLAY [Reboot Junos devices] ************************************************** TASK [Confirmation check] **************************************************** skipping: [dc1a.example.net] TASK [Check NETCONF connectivity] ******************************************** ok: [dc1a.example.net] TASK [Reboot all Routing Engines on the Junos device] ************* changed: [dc1a.example.net] TASK [Print response] ******************************************************** ok: [dc1a.example.net] => { "result": { "action": "reboot", "all_re": true, "changed": true, "failed": false, "media": false, "msg": "reboot successfully initiated. Response got Shutdown at Fri Dec 11 17:36:50 2020. [pid 11595]", "other_re": false, "reboot": true, "vmhost": false } } RUNNING HANDLER [pause_for_reboot] ******************************************* Pausing for 180 seconds (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) ok: [dc1a.example.net] RUNNING HANDLER [wait_reboot] ************************************************ ok: [dc1a.example.net] PLAY RECAP ******************************************************************* dc1a.example.net : ok=5 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Verificação
Verifique a reinicialização
Finalidade
Verifique se o dispositivo Junos foi reinicializado com sucesso.
Ação
Ao executar o manual, examine a wait_reboot saída da tarefa para cada dispositivo.
RUNNING HANDLER [wait_reboot] ************************************************* ok: [dc1a.example.net]
Significado
O wait_reboot resultado indica se o nó de controle estabeleceu com êxito uma sessão com o dispositivo após a reinicialização. Se o resultado indicar sucesso, o dispositivo está on-line.
Tabela de histórico de alterações
A compatibilidade com recursos é determinada pela plataforma e versão utilizada. Use o Explorador de recursos para determinar se um recurso é compatível com sua plataforma.
juniper.device versão de coleção 1.0.3, o módulo dá suporte ao system desligamento de um host de VM.