Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Ansible을 사용하여 Junos 디바이스에 소프트웨어 설치

요약 주니퍼 네트웍스 Ansible 모듈을 사용하여 Junos 디바이스에 소프트웨어를 설치합니다.

Ansible을 사용하여 소프트웨어 설치

주니퍼 네트웍스는 Junos 디바이스에 소프트웨어 이미지를 설치하거나 업그레이드할 수 있는 Ansible 모듈을 제공합니다. 표 1 에는 모듈이 요약되어 있습니다.

표 1: 소프트웨어 모듈

콘텐츠 세트

모듈 이름

juniper.device 수집

software

다음 섹션에서는 Ansible 모듈을 사용하여 Junos 디바이스에 소프트웨어 패키지를 설치할 때 소프트웨어 이미지 위치와 일반 소프트웨어 설치 프로세스 및 옵션을 지정하는 방법에 대해 설명합니다. 또한 이러한 기능을 지원하는 디바이스에서 VM 호스트 업그레이드, 통합 ISSU(In-Service Software Upgrade) 또는 NSSU(Nonstop Software Upgrade)와 같은 보다 전문화된 업그레이드 시나리오를 수행하는 방법에 대해서도 설명합니다.

소프트웨어 이미지 위치를 지정하는 방법

모듈을 사용하여 juniper.device.software Junos 디바이스에 소프트웨어를 설치할 때 소프트웨어 패키지를 Ansible 제어 노드에 다운로드할 수 있으며, 모듈은 기본적으로 설치를 수행하기 전에 패키지를 대상 디바이스에 복사합니다. 혼합 Virtual Chassis 환경의 경우 소프트웨어 패키지가 Ansible 제어 노드에 상주해야 합니다. 독립형 디바이스 또는 비 혼합 Virtual Chassis 환경의 경우, 대상 Junos 디바이스에 이미 있거나 대상 디바이스에서 연결할 수 있는 URL에 있는 소프트웨어 이미지를 설치하도록 모듈에 지시할 수도 있습니다.

표 2 에는 소프트웨어 패키지 위치에 따라 설정해야 하는 모듈 인수가 요약되어 있습니다. 모듈에는 항상 , pkg_set또는 remote_package 인수가 local_package포함되어야 합니다. 인수의 no_copy 기본값은 false이며, 이는 모듈이 Ansible 제어 노드의 지정된 위치에서 대상 장치로 소프트웨어 패키지를 복사하도록 지시합니다.

표 2: 소프트웨어 패키지 위치에 대한 모듈 인수

소프트웨어 패키지 위치

no_copy 매개 변수

local_package 또는 pkg_set 매개 변수

remote_package 매개 변수

Ansible 제어 노드

생략 또는 설정 false

독립형 디바이스 또는 비 혼합 Virtual Chassis 환경의 경우:

로컬 제어 노드에 있는 소프트웨어 패키지의 파일 경로(파일 이름 포함)로 설정합니다 local_package . 파일 경로는 플레이북 디렉터리를 기준으로 합니다.

(선택 사항) 소프트웨어 패키지가 복사되는 대상 장치의 파일 경로입니다. 기본 디렉터리는 /var/tmp입니다.

파일 이름이 포함되어 있는 경우 remote_packagelocal_package지정된 파일 이름과 일치해야 합니다.

혼합 Virtual Chassis 환경의 경우:

로컬 제어 노드에 있는 하나 이상의 소프트웨어 패키지의 파일 경로 목록(파일 이름 포함)으로 설정합니다 pkg_set . 파일 경로는 플레이북 디렉터리를 기준으로 합니다.

원격 위치

소프트웨어 패키지가 설치된 대상 Junos 디바이스의 관점에서 본 URL.

대상 장치

로 설정 true

소프트웨어 패키지가 이미 상주해야 하는 대상 장치의 파일 경로입니다. 기본 디렉터리는 /var/tmp입니다.

소프트웨어 패키지가 Ansible 제어 노드에 상주하는 경우 설치에 적합한 인수를 포함합니다.

  • local_package- 독립형 Junos 디바이스 또는 비혼합 Virtual Chassis의 구성원에 소프트웨어를 설치합니다. 인수 값은 소프트웨어 이미지에 대한 절대 또는 상대 경로를 지정하는 단일 문자열입니다.

  • pkg_set- 혼합 Virtual Chassis의 구성원에 소프트웨어를 설치합니다. 인수 값은 다양한 Virtual Chassis 멤버에 대한 소프트웨어 이미지의 절대 또는 상대 파일 경로를 특정 순서 없이 지정하는 문자열 목록입니다.

예를 들어:

기본적으로 또는 pkg_set 인수를 local_package 포함하면 모듈은 Ansible 제어 노드에서 대상 Junos 디바이스(개별 디바이스 또는 Virtual Chassis 기본 디바이스)의 /var/tmp 디렉터리로 모든 소프트웨어 패키지를 복사합니다. 이미지를 다른 디렉터리에 local_package 복사하려면 인수를 remote_package 정의하고 대상 디렉터리를 지정합니다. 인수에 remote_package 파일 이름이 포함된 경우 및 remote_package 인수의 파일 이름은 local_package 동일해야 하며 그렇지 않으면 모듈에서 오류가 발생합니다.

소프트웨어 패키지가 대상 Junos 디바이스(개별 디바이스 또는 Virtual Chassis 기본 디바이스)에 이미 있는 경우, 모듈은 대상 디바이스의 no_copy: true 기존 소프트웨어 패키지에 대한 파일 경로를 지정하는 인수 remote_package 와 인수를 포함해야 합니다. remote_package 디렉터리를 지정하지 않으면 기본값은 /var/tmp입니다.

소프트웨어 패키지가 Ansible 제어 노드 또는 대상 디바이스 이외의 위치에 있는 경우 모듈은 인수를 remote_package 포함하고 소프트웨어 패키지의 위치를 지정해야 합니다. 의 remote_package 값은 대상 Junos 디바이스의 관점에서 본 URL입니다. 허용되는 URL 형식에 대한 자세한 내용은 Junos OS CLI 명령에서 파일 이름 및 URL 지정 형식을 참조하십시오.

설치 프로세스 개요

Ansible을 사용하여 Junos 디바이스에 소프트웨어 패키지를 설치하려면 모듈을 실행하고 software 필요한 인수를 제공합니다. 예를 들어:

모듈을 실행 software 하면 다음 작업이 수행됩니다.

  1. 인수에 지정된 Junos OS 버전 또는 인수가 생략된 경우 version 소프트웨어 패키지 파일 이름에 지정된 version 버전을 매니지드 디바이스에 설치된 버전과 비교합니다. 설치된 버전과 원하는 버전이 동일한 경우 모듈은 나머지 설치 단계를 changed 건너뛰고 및 failed 를 설정합니다false.
  2. 소프트웨어 패키지가 Ansible 제어 노드 no_copy 에 있고 매개 변수가 생략되거나 로 false설정된 경우 모듈은 다음 작업을 수행합니다.
    • 인수에 지정된 알고리즘을 사용하여 로컬 소프트웨어 패키지 또는 패키지의 체크섬을 계산합니다checksum_algorithm. 사용할 수 있는 checksum_algorithm 값에는 , sha1, 및 sha256가 있습니다md5. 기본값은 입니다md5. 또는 인수에 체크섬을 checksum 제공할 수 있습니다.

    • 인수가 로 설정false되지 않는 한 cleanfs 대상 장치에서 스토리지 정리를 수행하여 소프트웨어 패키지를 위한 공간을 만듭니다.

    • SCP 또는 FTP는 동일한 이름과 체크섬을 가진 파일이 디바이스의 대상 위치에 아직 상주하지 않는 경우 모든 패키지를 대상 디바이스에 복사합니다.

      모듈에 , 이 포함되어 local_package있으면 패키지는 디렉터리로 remote_package 복사되거나 지정되지 않은 경우 remote_package /var/tmp 디렉터리로 복사됩니다. 모듈에 이(가) 포함되어 pkg_set있으면 패키지는 항상 Virtual Chassis 기본 디바이스의 /var/tmp 디렉터리에 복사됩니다.

      메모:

      인수가 cleanfs 생략되거나 로 true설정된 경우 스토리지 정리 작업이 기존 파일을 제거하기 때문에 모듈은 소프트웨어 패키지를 처음에 대상 위치에 존재했더라도 디바이스에 복사합니다. 이 있고 파일이 이미 대상 위치에 있는 경우 cleanfs: false 모듈은 파일 복사 작업을 건너뜁니다.

    • 각 원격 파일의 체크섬을 계산하여 로컬 파일의 체크섬과 비교합니다.

소프트웨어 패키지가 대상 장치에 있으면 처음에 다운로드하든 모듈에서 복사하든 관계없이 모듈은 다음 작업을 수행합니다.

  1. 인수가 로 설정된 경우 validate 새 패키지에 대해 구성을 검증합니다 true.

    메모:

    기본적으로 모듈은 software 소프트웨어 패키지를 추가하기 위한 전제 조건으로 기존 구성에 대해 소프트웨어 패키지 또는 번들의 유효성을 검사하지 않습니다. 활성 구성이 새 소프트웨어 이미지에서 작동하도록 하려면 인수를 validatetrue설정합니다.

  2. 으로 설정false되지 않는 한 all_re 각 개별 라우팅 엔진에 패키지를 설치합니다.

  3. 인수가 (으)로 설정되지 않는 한 reboot 업그레이드된 각 라우팅 엔진을 재부팅합니다 false.

module을 software 사용하면 module 인수를 포함하여 설치 진행률을 logfile 기록할 수 있습니다. 기본적으로 심각도 수준 WARNING 이상의 메시지만 기록됩니다. 일반 설치 프로세스에 대한 메시지를 기록하는 데 필요한 심각도 수준 INFO 이상의 메시지를 기록하려면 또는 --verbose 명령줄 옵션을 사용하여 플레이북을 -v 실행합니다.

시간 제한 값을 지정하는 방법

모듈은 juniper.device.software NETCONF 세션을 통해 작업을 수행합니다. NETCONF RPC의 시간 초과에 대한 기본 시간은 30초입니다. 설치 프로세스 중에 특정 작업은 다음과 같이 RPC 시간 제한 간격을 늘립니다.

  • 디바이스에 패키지 복사 및 설치 - 1800초(30분)

  • 체크섬 계산 - 300초(5분)

  • 스토리지 정리 수행 - 300초(5분)

경우에 따라 설치 프로세스, 체크섬 계산 또는 스토리지 정리가 이러한 시간 간격을 초과할 수 있습니다. , checksum_timeout, cleanfs_timeout 및 인수를 모듈의 인수 목록에서 필요한 시간(초)으로 설정하여 install_timeout이러한 작업의 시간 제한 값을 변경할 수 있습니다. 예를 들어:

동등한 모듈 인수가 없는 설치 옵션을 지정하는 방법

모듈을 사용하여 juniper.device.software 디바이스에 소프트웨어를 설치하는 경우 모듈은 포함된 설치 인수에 대해 적절한 RPC를 호출합니다. 예를 들어 모듈은 <request-package-add> 표준 Junos OS 설치의 경우 RPC, <request-vmhost-package-add> VM 호스트 업그레이드의 경우 RPC, <request-package-in-service-upgrade> 통합 ISSU 시나리오의 경우 RPC 등을 호출합니다.

모듈은 많은 설치 옵션(예: 옵션)에 대한 명시적 인수를 validate 지원합니다. 모듈은 또한 인수를 kwargs 지원하므로 RPC에서 지원되지만 동일한 모듈 인수가 없는 추가 옵션을 포함할 수 있습니다. 인수는 kwargs 추가로 지원되는 옵션의 키/값 쌍의 딕셔너리를 사용합니다.

모듈에서 지원하는 현재 옵션 목록은 모듈에 대한 API 참조 설명서를 참조하세요. 특정 RPC에 사용 가능한 모든 옵션 목록은 해당 명령에 대한 설명서를 참조하거나 Junos XML API 탐색기에서 RPC의 요청 태그를 검색하십시오.

메모:

해당 RPC에 대해 대상 Junos 디바이스에서 지원되는 설치 옵션만 포함해야 합니다.

다음 플레이북에서 모듈은 software 대상 호스트에 새 소프트웨어 이미지를 설치합니다. 이 모듈에는 인수가 kwargs 포함되어 있습니다 unlink: true. 업그레이드에 성공한 후 디렉터리에서 소프트웨어 패키지를 제거하는 이 인수는 RPC에 <unlink/> <request-package-add> 옵션을 포함하는 것과 같습니다.

VM 호스트 업그레이드를 수행하는 방법

VM 호스트를 지원하는 라우팅 엔진이 있는 디바이스에서 Junos OS는 Linux 기반 호스트(VM 호스트)를 통해 가상 머신(VM)으로 실행됩니다. VM 호스트 업그레이드에는 VM 호스트 설치 패키지(junos-vmhost-install-x.tgz)가 필요하며 호스트 OS 및 호환되는 Junos OS를 업그레이드합니다. CLI에서는 RPC에 해당하는 운영 모드 명령을 사용하여 request vmhost software add 업그레이드를 <request-vmhost-package-add> 수행합니다.

이 모듈은 juniper.device.software VM 호스트 업그레이드를 수행하기 위한 인수를 vmhost: true 지원합니다. 인수가 있으면 모듈은 RPC를 <request-vmhost-package-add> 사용하여 설치를 수행합니다.

다음 플레이북은 지정된 디바이스에서 Junos OS 및 호스트 OS를 업그레이드하고 재부팅합니다.

통합 ISSU 또는 NSSU를 수행하는 방법

이 모듈은 juniper.device.software 기능을 지원하고 필요한 요구 사항을 충족하는 디바이스에서 통합 ISSU(in-service software upgrade) 또는 NSSU(nonstop software upgrade) 수행을 지원합니다. 통합 ISSU 및 NSSU 기능에 대한 자세한 내용은 해당 제품의 소프트웨어 설명서를 참조하십시오.

통합 ISSU 기능을 사용하면 컨트롤 플레인의 중단 없이 트래픽 중단을 최소화하면서 서로 다른 두 개의 Junos OS 릴리스 간에 업그레이드할 수 있습니다. 통합 서비스 중인 소프트웨어 업그레이드를 수행하려면 모듈에 인수가 software issu: true 포함되어야 합니다. 예를 들어:

NSSU 기능을 사용하면 네트워크 트래픽 중단을 최소화하면서 중복 라우팅 엔진이 있는 스위치 또는 Virtual Chassis에서 실행되는 Junos OS 소프트웨어를 업그레이드할 수 있습니다. 논스톱 소프트웨어 업그레이드를 수행하려면 모듈에 인수가 software nssu: true 포함되어야 합니다. 예를 들어:

EX 시리즈 Virtual Chassis 멤버에 소프트웨어를 설치하는 방법

일반적으로 혼합되지 않은 EX 시리즈 Virtual Chassis를 업그레이드할 때는 설치 프로세스 개요 에 설명된 설치 프로세스에 따라 전체 Virtual Chassis를 업그레이드합니다. 그러나 Virtual Chassis의 특정 구성원 스위치에 소프트웨어를 설치해야 하는 경우가 있을 수 있습니다. 컬렉션의 juniper.device 릴리스 1.0.3부터 혼합되지 않은 EX 시리즈 Virtual Chassis의 개별 구성원 스위치에 소프트웨어 패키지를 설치할 수 있습니다.

특정 멤버에 소프트웨어를 설치하려면 인수를 member_id 포함하고 멤버 ID를 지정하는 문자열 목록을 정의하십시오. 시스템은 Virtual Chassis 기본 디바이스의 소프트웨어 패키지를 지정된 멤버에 설치합니다.

다음 Ansible 플레이북은 EX 시리즈 Virtual Chassis의 구성원 0 및 구성원 1의 소프트웨어를 업그레이드합니다.

예: Ansible을 사용하여 소프트웨어 설치

이 예에서는 모듈을 사용하여 juniper.device.software Junos 디바이스에 소프트웨어 이미지를 설치합니다.

요구 사항

이 예에서 사용되는 하드웨어 및 소프트웨어 구성 요소는 다음과 같습니다.

  • 콜렉션이 juniper.device 설치된 Ansible 2.10 이상을 실행하는 구성 관리 서버

  • NETCONF가 활성화되고 적절한 권한으로 구성된 사용자 계정이 있는 Junos 디바이스

  • Ansible 제어 노드 및 Junos 디바이스에서 적절한 사용자에 대해 구성된 SSH 퍼블릭/프라이빗 키 쌍

  • 필수 호스트가 정의된 기존 Ansible 인벤토리 파일

개요

이 예시는 모듈을 사용하여 juniper.device.software 지정된 인벤토리 그룹의 호스트에서 Junos OS를 업그레이드하는 Ansible 플레이북을 보여줍니다. 이 예에서 소프트웨어 이미지는 Ansible 제어 노드에 상주하며, 모듈은 이미지를 설치하기 전에 대상 디바이스에 복사합니다. 모듈은 인수를 host 명시적으로 정의하지 않으므로 모듈은 기본 호스트인 {{ inventory_hostname }}.

이 플레이북에는 Check NETCONF connectivity 기본 NETCONF 포트 830을 사용하여 Junos 디바이스로 NETCONF 세션을 설정하기 위해 모듈을 활용하는 ansible.builtin.wait_for 작업이 포함되어 있습니다. 제어 노드가 플레이북 실행 중 디바이스와 NETCONF 세션을 설정하지 못하면 해당 디바이스에 대한 플레이의 나머지 작업을 건너뜁니다.

Install Junos OS package 작업은 NETCONF 검사가 software 성공한 경우 모듈을 실행합니다. 인수는 version Junos 디바이스의 명령에 의해 show version 보고되는 대로 원하는 Junos OS 버전을 정의합니다. 플레이북을 실행하는 동안 모듈은 먼저 요청된 버전이 디바이스에 아직 설치되어 있지 않은지 확인합니다. 요청된 버전이 현재 설치된 버전과 다른 경우 모듈은 요청된 버전을 설치합니다.

인수는 local_package Ansible 제어 노드에서 Junos OS 소프트웨어 패키지의 경로를 정의합니다. 설치하는 동안 모듈은 대상 디바이스에서 스토리지 정리 작업을 수행하고, 소프트웨어 이미지를 디바이스의 /var/tmp 디렉토리에 복사하고, 파일의 체크섬을 확인하고, 활성 구성에 대해 새 소프트웨어를 검증한 다음, 대상 호스트의 각 라우팅 엔진에 소프트웨어를 설치합니다. 기본적으로 모듈은 software 설치 완료 후 각 라우팅 엔진을 재부팅하지만, 이 작업은 명확성을 위해 명시적으로 설정됩니다 reboot: true .

작업은 모듈 결과를 변수에 response 저장하고 하나의 처리기에 알립니다. 사용자가 확인 모드를 사용하여 플레이북을 실행하지 않으면 처리기는 wait_reboot 디바이스와의 세션 설정을 시도하여 디바이스가 다시 온라인 상태인지 확인합니다. 변수는 wait_time 제어 노드가 디바이스와 다시 연결을 시도하는 시간을 정의합니다.

이 예제에는 logfile 설치 진행률을 기록하는 매개 변수가 포함되어 있습니다. 이는 설치가 실패할 경우 디버깅 목적뿐만 아니라 장치에 설치 날짜 및 시간을 기록하는 데 중요합니다. 플레이북을 실행하는 사용자는 지정된 로그 파일에 쓸 수 있는 권한이 있어야 합니다. 기본적으로 심각도 수준 WARNING 이상의 메시지만 기록됩니다. 이 예에서 플레이북은 설치를 모니터링하기 위해 심각도 수준 INFO 이상의 메시지를 기록하는 옵션과 함께 -v 실행됩니다.

구성

Ansible 플레이북 생성

모듈을 사용하여 juniper.device.software Junos 디바이스에 소프트웨어 이미지를 설치하는 플레이북을 생성하려면 다음을 수행합니다.

  1. 플레이북에 대한 상용구와 모듈을 로컬에서 실행하는 이 플레이를 포함합니다.

  2. 이 예의 경우 원하는 Junos OS 버전과 새 이미지에 대한 경로 등을 포함하는 필요한 변수를 정의하거나 가져옵니다.

  3. (선택 사항) NETCONF 연결을 확인하는 작업을 생성합니다.

  4. 디바이스에 Junos OS 패키지를 설치하는 작업을 만들고 핸들러에게 알립니다.

  5. (선택 사항) 모듈 응답을 인쇄하는 작업을 만듭니다.

  6. 다시 부팅한 후 디바이스가 다시 온라인 상태가 되는지 확인하는 처리기를 만듭니다.

    처리기 이름은 설치 작업에서 참조되는 이름과 동일해야 합니다.

결과

Ansible 제어 노드에서 완료된 플레이북을 검토합니다. 플레이북에 의도한 코드가 표시되지 않으면 이 예제의 지침을 반복하여 플레이북을 수정합니다.

플레이북 실행

플레이북을 실행하려면 다음을 수행합니다.

  • ansible-playbook 제어 노드에서 명령을 실행하고 플레이북 경로 및 원하는 옵션을 제공합니다.

확인

설치 확인

목적

소프트웨어 설치에 성공했는지 확인합니다.

행동

플레이북 출력은 실패한 작업을 나타내야 합니다. 그러나 플레이북에 정의된 로그 파일의 내용을 검토하여 설치에 대한 세부 정보를 확인할 수도 있습니다. 샘플 로그 파일 출력은 여기에 표시됩니다. 간결성을 위해 일부 출력이 생략되었습니다.

의미

로그 파일 내용은 이미지가 대상 디바이스의 두 라우팅 엔진 모두에 성공적으로 복사 및 설치되었음을 나타냅니다.