Ansible 모듈을 juniper.device.system 사용하여 Junos 디바이스를 중지, 재부팅 또는 종료합니다
Ansible 모듈을 juniper.device.system 사용하여 Junos OS를 실행하는 디바이스 또는 진화한 Junos OS를 실행하는 디바이스를 중지, 재부팅 또는 종료할 수 있습니다.
Ansible을 사용하여 디바이스 중지, 재부팅 또는 종료
주니퍼 네트웍스는 Junos OS 실행 디바이스 또는 진화한 디바이스를 중지, 재부팅 또는 종료하는 데 사용할 수 있는 Junos OS 모듈을 제공합니다. 표 1 은 사용 가능한 모듈의 개요를 보여줍니다.
|
컬렉션 |
모듈 세트 |
모듈 이름 |
|---|---|---|
|
|
이 모듈을 사용하여 juniper.device.system Junos 디바이스에서 다음 작업을 요청할 수 있습니다. 기본적으로 모듈은 요청된 작업을 즉시 실행하고 듀얼 라우팅 엔진 또는 Virtual Chassis 설정의 모든 라우팅 엔진에서 작업을 수행합니다.
-
즉각적인 시스템 정지, 재부팅 또는 종료
-
지연 옵션이 있는 중지, 재부팅 또는 종료 작업
-
특정 날짜와 시간에 예약된 중지, 재부팅 또는 종료 작업
이 모듈에는 system 수행할 작업을 정의하는 하나의 인수가 action필요합니다. 표 2 는 매개 변수 값을 정의 action 하고 각 작업에 대한 간략한 설명과 해당 CLI 명령을 제공합니다. 작업에 대한 "zeroize" 자세한 내용은 juniper.device.system Ansible 모듈을 사용하여 Junos 디바이스를 공장 기본 상태로 복원을 참조하십시오.
|
|
설명 |
동등한 CLI 명령 |
|---|---|---|
|
|
Junos OS 소프트웨어 또는 Junos OS Evolved 소프트웨어를 정상적으로 종료하고 시스템 전원을 유지합니다. |
|
|
|
Junos OS 소프트웨어 또는 Junos OS Evolved 소프트웨어를 재부팅합니다 |
|
|
|
Junos OS 소프트웨어 또는 Junos OS Evolved 소프트웨어를 정상적으로 종료하고 라우팅 엔진의 전원을 끕니다 |
|
다음 Ansible 플레이북에서는 with action: reboot 와 모듈을 juniper.device.system 사용하여 지정된 인벤토리 그룹의 호스트에 있는 모든 라우팅 엔진을 즉시 재부팅합니다.
---
- name: Reboot Junos devices
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Reboot all REs on the device
juniper.device.system:
action: reboot
지연되거나 지정된 시간에 중지, 재부팅 또는 종료를 수행하는 방법
중지, 재부팅 또는 종료 작업을 지정된 시간(분)만큼 지연할 수 있습니다. 지연을 추가하려면 선택적 in_min 매개 변수를 작업이 실행되기 전에 시스템이 대기해야 하는 시간(분)으로 설정합니다. 다음 작업은 30분 이내에 모든 라우팅 엔진의 재부팅을 요청합니다.
---
- 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
또한 특정 시간에 중지, 재부팅 또는 종료 작업을 예약할 수 있습니다. 시간을 예약하려면 다음 방법 중 하나로 지정할 수 있는 문자열을 사용하는 매개 변수를 포함 at 합니다.
-
now- 즉시 소프트웨어의 중지, 재부팅 또는 종료를 시작합니다. -
+minutes—지금부터 요청된 작업이 시작되는 시간(분) 수입니다. -
yymmddhhmm—요청된 작업을 시작할 절대 시간이며 연도, 월, 일, 시, 분으로 지정됩니다. -
hh:mm- 요청된 작업을 시작할 당일의 절대 시간이며 24시간 시간으로 지정됩니다.
다음 작업은 모든 라우팅 엔진의 시스템 종료를 당일 22:30에 예약합니다.
tasks:
- name: Shut down all REs at 22:30 on the current day
juniper.device.system:
action: shutdown
at: "22:30"
대상 라우팅 엔진 지정 방법
기본적으로 이 모듈은 juniper.device.system 듀얼 라우팅 엔진 또는 Virtual Chassis 설정의 모든 라우팅 엔진에서 요청된 라우팅 엔진을 수행합니다. 또한 애플리케이션이 연결된 라우팅 엔진에서만 작업을 수행하거나 애플리케이션이 연결된 라우팅 엔진을 제외한 모든 라우팅 엔진에서 작업을 수행하도록 모듈에 지시할 수도 있습니다.
라우팅 엔진을 지정하려면 및 other_re 매개 변수를 all_re 사용합니다. 표 3 all_re 에는 특정 라우팅 엔진에서 요청된 작업을 실행하는 데 필요한 값과 값이 other_re 요약되어 있습니다.
|
영향을 받는 라우팅 엔진 |
|
|
|---|---|---|
|
모든 라우팅 엔진(기본값) |
생략 또는 다음으로 설정 |
– |
|
연결된 라우팅 엔진만 |
다음으로 설정 |
– |
|
애플리케이션이 연결된 라우팅 엔진을 제외한 모든 라우팅 엔진 |
– |
다음으로 설정 |
듀얼 라우팅 엔진 또는 Virtual Chassis 설정의 모든 라우팅 엔진에서 작업이 수행되어야 함을 명시적으로 나타내려면 기본값인 인수를 포함 all_re: true 합니다.
---
- 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
애플리케이션이 연결된 라우팅 엔진에서만 요청된 작업을 수행하려면 인수를 포함합니다 all_re: false .
tasks:
- name: Reboot only the connected Routing Engine
juniper.device.system:
action: reboot
all_re: false
애플리케이션이 연결된 라우팅 엔진을 제외한 시스템의 모든 라우팅 엔진에서 요청된 라우팅 엔진을 수행하려면, 인수를 포함합니다 other_re: true .
tasks:
- name: Shut down all other Routing Engines
juniper.device.system:
action: shutdown
other_re: true
VM 호스트를 재부팅하거나 종료하는 방법
VM 호스트를 지원하는 라우팅 엔진이 있는 디바이스에서 Junos OS는 Linux 기반 호스트(VM 호스트)를 통해 가상 머신(VM)으로 실행됩니다. 이 모듈은 juniper.device.system VM 호스트를 재부팅하거나 종료할 수 있는 인수를 지원합니다 vmhost .
and vmhost: true 인수를 포함 action: reboot 하면 시스템은 운영 모드 명령에 해당하는 RPC를 <request-vmhost-reboot> 실행하여 모든 라우팅 엔진에서 호스트 OS와 호환되는 Junos OS를 재부팅합니다request vmhost reboot.
마찬가지로 and vmhost: true 인수를 포함 action: shutdown 하면 시스템은 운영 모드 명령에 해당하는 RPC를 <request-vmhost-poweroff> 실행하여 모든 라우팅 엔진에서 호스트 OS와 호환되는 Junos OS를 종료합니다request vmhost power-off.
다음 플레이북은 호스트 OS와 게스트 Junos OS를 모두 재부팅하는 VM 호스트 재부팅을 수행합니다.
---
- 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
예: Ansible을 사용하여 Junos 디바이스 재부팅
juniper.device.system 이 모듈을 사용하면 Junos 디바이스를 중지, 재부팅 또는 종료할 수 있습니다. 이 예에서는 모듈을 system 사용하여 Junos 디바이스를 재부팅합니다.
요구 사항
이 예에서 사용되는 하드웨어 및 소프트웨어 구성 요소는 다음과 같습니다.
-
컬렉션이
juniper.device설치된 상태에서 Ansible 2.17 이상을 실행하는 구성 관리 서버 -
NETCONF가 활성화되고 적절한 권한으로 구성된 사용자 계정이 있는 Junos 디바이스
-
Ansible 제어 노드 및 Junos 디바이스에서 적절한 사용자에 대해 구성된 SSH 공개/비공개 키 쌍
-
필수 호스트가 정의된 기존 Ansible 인벤토리 파일
개요
이 예에서는 모듈을 juniper.device.system 사용하여 Junos 디바이스를 재부팅하는 Ansible 플레이북을 보여줍니다. 모듈 인 action 수의 값은 호스트에서 실행할 작업을 정의합니다.
플레이북에서 모듈을 호출할 때 대화형 프롬프트를 사용하여 사용자가 지정된 디바이스를 재부팅할 의도가 있는지 확인하는 것이 좋습니다. 사용자가 의도치 않게 플레이북을 실행하고 점검이 없는 경우 영향을 받는 디바이스가 필요한 모든 네트워크에 부정적인 영향을 미칠 수 있습니다. 예방 조치로 이 플레이북은 대화형 프롬프트를 사용하여 사용자가 디바이스를 재부팅할 것인지 확인합니다. 프롬프트를 사용하려면 사용자가 모듈을 실행하기 위해 명령줄에 'yes'을 수동으로 입력해야 합니다. 작업이 실패하면 Confirmation check Ansible 제어 노드는 해당 디바이스에 대한 재생의 다른 작업을 건너뜁니다.
이 플레이북에는 기본 NETCONF 포트 830을 사용하여 Junos 디바이스와의 NETCONF 세션을 설정하기 위해 모듈을 ansible.builtin.wait_for 활용하는 작업이 포함되어 Check NETCONF connectivity 있습니다. 플레이북 실행 중에 제어 노드가 디바이스와 NETCONF 세션을 설정하는 데 실패하면 해당 디바이스에 대한 재생의 나머지 작업을 건너뜁니다.
재부팅 작업은 확인 및 NETCONF 검사가 성공한 경우 모듈을 juniper.device.system 실행합니다. action 인수는 소프트웨어가 재부팅되어야 함을 나타내는 로 설정됩니다 reboot. in_min: 2 인수는 재부팅 명령을 실행하기 전에 지정된 시간(분) 동안 대기하도록 모듈에 지시합니다. 이렇게 하면 모든 사용자가 시스템에서 로그아웃할 수 있는 시간이 제공됩니다.
이 작업은 변수에 result 모듈 결과를 저장하고 두 개의 처리기에 알립니다. 핸들러는 pause_for_reboot 재부팅 작업이 시작된 후 지정된 시간 동안 대기하여 재부팅이 발생하기 전에 핸들러가 wait_reboot 디바이스가 온라인 상태임을 잘못 감지하는 것을 방지합니다. 그런 다음 핸들러는 wait_reboot 디바이스와의 세션 설정을 시도하여 재부팅 후 디바이스가 다시 온라인 상태가 되는지 확인합니다. 변수는 wait_time_after_reboot 제어 노드가 디바이스와의 재연결을 시도하는 시간을 정의합니다.
구성
Ansible 플레이북 생성 및 실행
단계별 절차
모듈을 juniper.device.system 사용하여 Junos 디바이스를 재부팅하는 플레이북을 생성하려면 다음을 수행합니다.
-
모듈을 로컬에서 실행하는 플레이북과 이 플레이에 대한 상용구를 포함합니다.
--- - 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" -
(선택 사항) NETCONF 연결을 확인하는 작업을 생성합니다.
- 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
결과
Ansible 제어 노드에서 완료된 플레이북을 검토합니다. 플레이북에 의도한 코드가 표시되지 않으면 이 예제의 지침을 반복하여 플레이북을 수정합니다.
---
- 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
플레이북 실행
절차
단계별 절차
플레이북을 실행하려면 다음을 수행합니다.
-
제어 노드에서 명령을 실행
ansible-playbook하고 플레이북 경로와 원하는 옵션을 제공합니다.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
검증
재부팅 확인
목적
Junos 디바이스가 성공적으로 재부팅되었는지 확인합니다.
작업
플레이북을 실행할 때 각 디바이스에 대한 작업의 wait_reboot 출력을 검토합니다.
RUNNING HANDLER [wait_reboot] ************************************************* ok: [dc1a.example.net]
의미
wait_reboot 결과는 제어 노드가 재부팅 후 디바이스와 세션을 성공적으로 설정했는지 여부를 나타냅니다. 결과가 성공을 나타내면 디바이스가 온라인 상태입니다.
변경 내역 표
기능 지원은 사용 중인 플랫폼과 릴리스에 따라 결정됩니다. 기능 탐색기를 사용하여 플랫폼에서 기능이 지원되는지 확인합니다.
juniper.device 모듈은 system VM 호스트 종료를 지원합니다.