Ansible을 사용하여 Junos 디바이스 중단, 재부팅 또는 종료
요약 주니퍼 네트웍스 Ansible 모듈을 사용하여 Junos 디바이스를 중단, 재부팅 또는 종료할 수 있습니다.
Ansible을 사용하여 디바이스 중지, 재부팅 또는 종료
주니퍼 네트웍스는 Ansible을 사용한 Junos 디바이스 관리를 지원하며, 디바이스를 중단, 재부팅 또는 종료할 수 있는 Ansible 모듈을 제공합니다. 표 1 에는 사용 가능한 모듈이 요약되어 있습니다.
콘텐츠 집합 |
모듈 이름 |
---|---|
릴리스 2.0.0부터 Juniper.junos
모듈은 및 junos_zeroize
모듈의 기능을 대체합니다junos_shutdown
.juniper_junos_system
모듈을 사용하여 Junos 디바이스에서 다음 작업을 요청할 수 있습니다. 기본적으로 모듈은 요청된 작업을 즉시 실행하고 듀얼 라우팅 엔진 또는 Virtual Chassis 설정의 모든 라우팅 엔진에서 작업을 수행합니다.
-
즉각적인 시스템 정지, 재부팅 또는 종료
-
선택적 지연이 있는 중지, 재부팅 또는 종료 작업
-
특정 날짜 및 시간에 예약된 중지, 재부팅 또는 종료 작업
및 juniper_junos_system
모듈에는 system
모듈이 수행하는 작업을 정의하는 하나의 인수action
가 필요합니다. 표 2 는 디바이스를 중지, 재부팅 또는 종료하는 데 필요한 파라미터 값을 정의 action
하고 각 작업에 대한 간략한 설명과 해당 CLI 명령을 제공합니다. 작업에 대한 "zeroize"
자세한 내용은 Ansible을 사용하여 Junos 디바이스를 공장 기본 구성 설정으로 복원을 참조하십시오.
|
묘사 |
동등한 CLI 명령 |
---|---|---|
|
Junos OS 소프트웨어를 정상적으로 종료하지만 시스템 성능은 유지 |
|
|
Junos OS 소프트웨어 재부팅 |
|
|
Junos OS 소프트웨어를 정상적으로 종료하고 라우팅 엔진의 전원을 끕니다. |
|
다음 Ansible 플레이북은 system
와 함께 action: "reboot"
모듈을 사용하여 지정된 인벤토리 그룹의 호스트에 있는 모든 라우팅 엔진을 즉시 재부팅합니다.
--- - 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"
대상 라우팅 엔진 지정 방법
기본적으로 system
및 juniper_junos_system
모듈은 듀얼 라우팅 엔진 또는 버추얼 섀시 설정의 모든 라우팅 엔진에서 요청된 작업을 수행합니다. 또한 모듈이 애플리케이션이 연결된 라우팅 엔진에서만 작업을 수행하거나 애플리케이션이 연결된 라우팅 엔진을 제외한 모든 라우팅 엔진에서 작업을 수행하도록 지시할 수 있습니다.
라우팅 엔진을 지정하려면 및 other_re
매개 변수를 사용합니다all_re
. 표 3 에는 특정 라우팅 엔진에서 all_re
요청된 작업을 실행하는 데 필요한 및 other_re
값이 요약되어 있습니다.
영향을 받는 라우팅 엔진 |
|
|
---|---|---|
모든 라우팅 엔진(기본값) |
생략 또는 설정 |
– |
연결된 라우팅 엔진만 |
로 설정 |
– |
애플리케이션이 연결된 라우팅 엔진을 제외한 모든 라우팅 엔진 |
– |
로 설정 |
듀얼 라우팅 엔진 또는 버추얼 섀시 설정의 모든 라우팅 엔진에서 작업을 수행해야 함을 명시적으로 나타내려면, 기본값인 인수를 포함합니다 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)으로 실행됩니다. system
및 juniper_junos_system
모듈은 VM 호스트를 재부팅할 수 있는 인수를 지원합니다vmhost
. 및 인수를 action: "reboot"
포함하면 시스템은 운영 모드 명령에 해당하는 RPC를 <request-vmhost-reboot>
실행하여 모든 라우팅 엔진에서 호스트 OS 및 호환 Junos OS를 request vmhost reboot
재부팅 vmhost: True
합니다.
다음 플레이북은 VM 호스트 재부팅을 수행하여 호스트 OS와 게스트 Junos OS를 모두 재부팅합니다.
--- - 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 디바이스 재부팅
system
컬렉션의 juniper.device
모듈을 사용하여 Junos 디바이스를 중단, 재부팅 또는 종료할 수 있습니다. 이 예에서는 모듈을 사용하여 system
Junos 디바이스를 재부팅합니다.
요구 사항
이 예에서 사용되는 하드웨어 및 소프트웨어 구성 요소는 다음과 같습니다.
-
컬렉션이
juniper.device
설치된 Ansible 2.10 이상을 실행하는 구성 관리 서버 -
NETCONF가 활성화된 Junos 디바이스 및 적절한 권한으로 구성된 사용자 계정
-
Ansible 제어 노드 및 Junos 디바이스에서 해당 사용자에 대해 구성된 SSH 퍼블릭/프라이빗 키 쌍
-
필수 호스트가 정의된 기존 Ansible 인벤토리 파일
개요
이 예에서는 모듈을 사용하여 system
Junos 디바이스를 재부팅하는 Ansible 플레이북을 보여줍니다. 모듈의 action
인수 값은 호스트에서 실행할 작업을 정의합니다.
플레이북에서 모듈을 호출할 때 대화형 프롬프트를 사용하여 사용자가 지정된 디바이스를 재부팅할 것인지 확인하는 것이 좋습니다. 사용자가 의도치 않게 플레이북을 실행하고 확인이 없으면 영향을 받는 디바이스가 필요한 모든 네트워크에 부정적인 영향을 미칠 수 있습니다. 예방 조치로 이 플레이북은 대화형 프롬프트를 사용하여 사용자가 디바이스를 재부팅할 것인지 확인하고 사용자가 모듈을 실행하려면 명령줄에 'yes'를 수동으로 입력해야 합니다. Confirmation check
작업이 실패하면 Ansible 제어 노드는 해당 디바이스에 대한 플레이 중인 다른 작업을 건너뜁니다.
이 플레이북에는 Checking NETCONF connectivity
기본 NETCONF 포트 830을 사용하여 Junos 디바이스와 NETCONF 세션을 설정하기 위해 모듈을 활용하는 wait_for
작업이 포함되어 있습니다. 제어 노드가 플레이북 실행 중에 디바이스와의 NETCONF 세션을 설정하지 못하면 해당 디바이스에 대한 플레이의 나머지 작업을 건너뜁니다.
디바이스를 재부팅하는 작업은 확인 및 NETCONF 검사가 system
성공적이었다면 모듈을 실행합니다. 인수는 action
소프트웨어 재부팅을 의미함을 나타내는 값으로 "reboot"
설정됩니다. 인수는 in_min: 2
재부팅 명령을 실행하기 전에 지정된 시간(분) 동안 모듈에 대기하도록 지시합니다. 이렇게 하면 모든 사용자가 시스템에서 로그아웃할 수 있는 시간이 제공됩니다.
작업은 모듈 결과를 result
변수에 저장하고 두 처리기에 알립니다. 처리기는 pause_for_reboot
다시 부팅 작업이 시작된 후 지정된 시간 동안 대기하여 다시 부팅이 발생하기 전에 처리기가 디바이스가 온라인 상태임을 잘못 감지하지 못하도록 wait_reboot
합니다. 그런 다음 처리기는 wait_reboot
디바이스와 세션을 설정하여 재부팅 후 디바이스가 다시 온라인 상태가 되는지 확인합니다. 변수는 wait_time_after_reboot
제어 노드가 디바이스와 재연결을 시도하는 시간을 정의합니다.
구성
Ansible 플레이북 생성 및 실행
단계별 절차
모듈을 사용하여 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: Checking NETCONF connectivity 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 debug: var: result
재부팅 후 일시 중지되는 처리기와 재부팅 후 디바이스가 다시 온라인 상태가 되는지 확인하는 처리기를 만듭니다.
처리기 이름은 재부팅 작업에서 참조되는 이름과 동일해야 합니다.
handlers: - name: pause_for_reboot pause: seconds: 180 when: result.reboot - name: wait_reboot 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: Checking NETCONF connectivity 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 debug: var: result handlers: - name: pause_for_reboot pause: seconds: 180 when: result.reboot - name: wait_reboot 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 [Checking 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.junos
모듈은 및
junos_zeroize
모듈의 기능을 대체합니다
junos_shutdown
.
juniper_junos_system