Ansible을 사용하여 Junos 디바이스 중지, 재부팅 또는 종료
요약 주니퍼 네트웍스 Ansible 모듈을 사용하여 Junos 디바이스를 중지, 재부팅 또는 종료할 수 있습니다.
Ansible을 사용하여 디바이스 중지, 재부팅 또는 종료
주니퍼 네트웍스는 Junos 디바이스를 중지, 재부팅 또는 종료하는 데 사용할 수 있는 Ansible 모듈을 제공합니다. 표 1 에는 사용 가능한 모듈이 요약되어 있습니다.
콘텐츠 세트 |
모듈 이름 |
---|---|
모듈을 사용하여 juniper.device.system
Junos 디바이스에서 다음 작업을 요청할 수 있습니다. 기본적으로 모듈은 요청된 작업을 즉시 실행하고 듀얼 라우팅 엔진 또는 Virtual Chassis 설정의 모든 라우팅 엔진에서 작업을 수행합니다.
-
즉각적인 시스템 정지, 재부팅 또는 종료
-
선택적 지연이 있는 중지, 재부팅 또는 종료 작업
-
특정 날짜 및 시간에 예약된 중지, 재부팅 또는 종료 작업
모듈에는 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
듀얼 라우팅 엔진 또는 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)으로 실행됩니다. 이 모듈은 system
VM 호스트를 vmhost
재부팅하거나 종료할 수 있는 인수를 지원합니다.
및 인수를 action: "reboot"
포함하면 시스템은 작동 모드 명령에 해당하는 RPC를 <request-vmhost-reboot>
실행하여 모든 라우팅 엔진에서 호스트 OS 및 호환되는 Junos OS를 재부팅합니다request vmhost reboot
.vmhost: true
마찬가지로, 및 인수를 action: "shutdown"
포함하면 시스템은 작동 모드 명령에 해당하는 RPC를 <request-vmhost-poweroff>
실행하여 모든 라우팅 엔진에서 호스트 OS 및 호환 Junos OS를 종료합니다request vmhost power-off
.vmhost: true
다음 플레이북은 호스트 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.10 이상을 실행하는 구성 관리 서버 -
NETCONF가 활성화되고 적절한 권한으로 구성된 사용자 계정이 있는 Junos 디바이스
-
Ansible 제어 노드 및 Junos 디바이스에서 적절한 사용자에 대해 구성된 SSH 퍼블릭/프라이빗 키 쌍
-
필수 호스트가 정의된 기존 Ansible 인벤토리 파일
개요
이 예는 모듈을 사용하여 juniper.device.system
Junos 디바이스를 재부팅하는 Ansible 플레이북을 제시합니다. 모듈의 action
인수 값은 호스트에서 실행할 작업을 정의합니다.
플레이북에서 모듈을 호출할 때 대화형 프롬프트를 사용하여 사용자가 지정된 디바이스를 재부팅할 것인지 확인하는 것이 좋습니다. 사용자가 의도치 않게 플레이북을 실행하고 확인하지 않으면 영향을 받는 디바이스가 필요한 모든 네트워크에 부정적인 영향을 미칠 수 있습니다. 예방 조치로 이 플레이북은 대화형 프롬프트를 사용하여 사용자가 디바이스를 재부팅할 의향이 있는지 확인하고 사용자가 명령줄에 'yes'를 수동으로 입력하여 모듈을 실행하도록 요구합니다. Confirmation check
작업이 실패하면 Ansible 제어 노드는 해당 디바이스에 대한 재생의 다른 작업을 건너뜁니다.
이 플레이북에는 Check NETCONF connectivity
기본 NETCONF 포트 830을 사용하여 Junos 디바이스로 NETCONF 세션을 설정하기 위해 모듈을 활용하는 ansible.builtin.wait_for
작업이 포함되어 있습니다. 제어 노드가 플레이북 실행 중에 디바이스와 NETCONF 세션을 설정하지 못하면 해당 디바이스에 대한 플레이의 나머지 작업을 건너뜁니다.
확인 및 NETCONF 검사가 성공적으로 수행된 경우 디바이스를 재부팅하는 작업이 모듈을 실행합니다 system
. 인수는 action
소프트웨어를 재부팅해야 함을 나타내는 값으로 "reboot"
설정됩니다. 인수는 in_min: 2
reboot 명령을 실행하기 전에 지정된 시간(분) 동안 대기하도록 모듈에 지시합니다. 이렇게 하면 모든 사용자가 시스템에서 로그아웃할 수 있는 시간이 제공됩니다.
작업은 모듈 결과를 변수에 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: 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
컬렉션 릴리스 1.0.3부터 모듈은
system
VM 호스트 종료를 지원합니다.