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을 사용하여 소프트웨어 설치

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

표 1: 소프트웨어 모듈

콘텐츠 집합

모듈 이름

juniper.device 수집

software

Juniper.junos 역할

juniper_junos_software

메모:

릴리스 2.0.0 juniper_junos_software 부터 Juniper.junos 모듈은 모듈의 기능을 대체합니다junos_install_os.

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

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

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

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

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

소프트웨어 패키지 위치

no_copy 매개 변수

local_package 또는 pkg_set 매개 변수

remote_package 매개 변수

Ansible 제어 노드

생략 또는 설정 false

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

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

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

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

혼합 Virtual Chassis 환경의 경우:

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

원격 위치

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

대상 장치

로 설정 true

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

소프트웨어 패키지가 Ansible 제어 노드에 상주하는 경우, 독립형 Junos 디바이스 또는 비혼합 Virtual Chassis의 멤버에 소프트웨어를 설치하기 위한 인수를 포함 local_package 하거나 혼합 Virtual Chassis의 멤버에 소프트웨어를 설치하기 위한 인수를 pkg_set 포함합니다. module 인수는 로컬 제어 노드의 소프트웨어 패키지 또는 패키지에 대한 절대 또는 상대 파일 경로를 지정합니다.

인수는 local_package 소프트웨어 이미지 경로를 지정하는 단일 문자열입니다. 인수에는 pkg_set 다양한 Virtual Chassis 멤버에 대해 특별한 순서 없이 필요한 소프트웨어 이미지 경로를 지정하는 문자열 목록이 포함되어 있습니다. 예를 들어:

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

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

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

설치 과정 개요

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

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

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

    • 인수가 로 설정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.

    메모:

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

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

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

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

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

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

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

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

  • 저장소 정리 수행 - 300초(5분)

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

해당하는 모듈 인수가 없는 설치 옵션을 지정하는 방법

또는 모듈을 사용하여 software 디바이스에 소프트웨어를 설치할 때 모듈은 주어진 설치 인수에 대해 적절한 RPC를 호출합니다(예: <request-package-add> 표준 Junos OS 설치용 RPC, <request-vmhost-package-add> VM 호스트 업그레이드용 RPC, <request-package-in-service-upgrade> 통합 ISSU 시나리오용 RPC juniper_junos_software 등). 모듈은 많은 설치 옵션(예: 옵션)에 대한 명시적 인수를 validate 지원합니다. 모듈은 또한 인수를 kwargs 지원하므로 RPC에서 지원되지만 동등한 모듈 인수가 없는 추가 옵션을 포함할 수 있습니다. 인수는 지원되는 추가 옵션의 키/값 쌍 사전을 kwargs 사용합니다.

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

메모:

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

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

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

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

softwarejuniper_junos_software 모듈은 VM 호스트 업그레이드를 수행하기 위한 인수를 지원합니다vmhost: True. 인수가 있는 경우 모듈은 RPC를 <request-vmhost-package-add> 사용하여 설치를 수행합니다.

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

통합 ISSU 또는 NSSU 수행 방법

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

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

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

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

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

요구 사항

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

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

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

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

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

개요

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

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

이 작업은 NETCONF 검사가 Install Junos OS package 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 플레이북 생성

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

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

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

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

  4. 디바이스에 Junos OS 패키지를 설치하고 핸들러에 알리는 작업을 생성합니다.

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

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

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

결과

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

플레이북 실행

플레이북을 실행하려면:

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

확인

설치 확인

목적

소프트웨어가 성공적으로 설치되었는지 확인합니다.

행동

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

의미

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

변경 내역 테이블

기능 지원은 사용 중인 플랫폼 및 릴리스에 따라 결정됩니다. 기능 탐색기 를 사용하여 플랫폼에서 기능이 지원되는지 확인합니다.

석방
묘사
2.0.0
릴리스 2.0.0 juniper_junos_software 부터 Juniper.junos 모듈은 모듈의 기능을 대체합니다 junos_install_os.