분류없음2015.04.24 23:22

Ansible Arista  vEOS eAPI  : Today key


Automation for Networker의 8번째이자, Ansible의 6번째 포스팅입니다.  

이번 포스팅은 Ansbile을 사용하여 Arista 장비의 상태 값을 가져오는 예제입니다. 

 

 

지난 번에 간단한 테스트까지만 해두고 놔두었다가, 오늘 지인의 물음에 의해서 다시 점심시간에... 후다닥..

다시 테스트하고... 간단하게 나마.. 포스팅해봅니다.


 

Automation Tool인 Ansible을 활용한 Arista 상태 값 확인


지난 번에는 Ansible에서 eAPI Library를 활용한 Arista 장비를 제어하는 것을 몇 가지 알아보았습니다.

이번에는 동일하게 Library를 사용하여 Arista 장비의 상태 값을 확인하는 예제를 다뤄봅니다.

전체 예제는 Ansible 관리 서버와 Arista VM 1대를 이용하여 진행을 하게 되며, 개인 PC에서도 동일하게 구성하여 테스트가 가능합니다.

 

 

 

예제1) Version 정보 확인

 

[ YML 작성하기 ]

    - YML의 기본 작성 형식에 따라서 이름과, 적용할 Hosts에 대해서 지정한다.

    - eAPI에서 JSON을 사용한 eos_command를 적용하기 위해, eos_command를 라이브러리를 사용한다.

    - 적용하고자 하는 command를 vars에 지정한다. 아래의 예제에서는 1개의 명령어만 있지만, 여러개를 지정할 수 있다.

    - register를 사용하여, Command한 결과 값을 변수처럼 저장하여 사용할 수 있다. 

      이렇게 저장된 값은 template, action, statements에서 사용하게 된다.

    - 그리고, Playbook 실행 시에 결과 값을 볼 수 있도록 debug에 해당 결과 값을 출력하게 하였다.

    - 마지막으로 결과 값을 템플릿을 사용하여 파일로 생성할 수 도 있다.

 

 

 

※ 마지막의 action 항목은 Ansible 0.8 이후부터는 anction 대신에 다음과 같이 사용해도 된다. (결과 값은 동일)

 

 template: src=my.j2 dest=./result1

 

 

 

 

[ Template ]

    - Playbook에서 사용된 결과 값에 대해 파일로 저장하기 위해서 사용한 Template 파일을 보면 아래와 같다.

    - result에서의 'output'에 대한 값만을 결과값 내용으로 취한다.

      무슨 내용인지는 아래의 실행 결과와 생성된 파일의 내용을 보면 보다 이해하기 쉽다.

 

 

 

 

[ YML(Playbook) 실행하기 ]

    - 위에서 작성한, Playbook을 실행하면 아래와 같이 정상적으로 작성이 성공한 것을 볼 수 있다.

    - Debug에서 보면, show version에 대한 결과 값을 확인할 수 있다.

      결과 값은 eapi의 json을 사용하여 나온 결과 값으로 출력되게 된다.

    - 결과 값에서서 보면 result안에 output이라는 항목이 이고, 실제 이 output이 원하는 show version에 대한 내용이다.

      위에서 본 template에서 result안의 output라고 지정한 이유는 이 때문이다. 실제 아래 생성된 결과 파일의 내용을 보면

      Debug에서 볼 수 있는 전체 결과가 아닌 output에 대한 결과값만 저장되었음을 볼 수 있다.

 

 

[ 생성된 결과 파일 확인하기 ]

    - 위의 결과 값 중에 output에 대한 내역에 대해서만 결과 파일로 저장된 것을 확인할 수 있다.

Posted by 네떡지기
DevOps/Automation2015.04.19 00:24

 

Ansible Arista  vEOS eAPI  : Today key


Automation for Networker의 7번째이자, Ansible의 5번째 포스팅입니다.  

이번 포스팅은 Ansbile을 사용하여 Arista 장비를 실질적으로 제어하는 예제에 대해서 다뤄봅니다.

실질적인 예제를 통해서 Ansbile을 활용하는 데, 조금은 익숙해질 수 있기를 바랍니다.

기본적으로 여기서는 Arsita 장비에 대해서 다뤘지만,

다른 벤더에서도 유사하게(지난 번 포스팅 처럼, 혹은 다루지 않은 NXAPI 등을 사용하여) 사용할 수 있을 것이기 때문에

해당 Library를 제공하는 모든 장비에 대해서 적용해 볼 수 있을 것 같습니다.


Automation Tool인 Ansible을 활용한 Arista 장비 제어


지난 Ansible Part 3 포스팅에서는  Ansbile을 이용한 Arista 장비 제어와 관련한 초기 환경 구축 설정에 대해서 알아보았습니다.

이번 포스팅에서는 실제 Ansible을 통한 Arista 장비를 제어하는 예제를 살펴봅니다.

전체 예제는 Ansible 관리 서버와 Arista VM 1대를 이용하여 진행을 하게 되며, 개인 PC에서도 동일하게 구성하여 테스트가 가능합니다.

 

 

예제1) VLAN 생성하기

 

[ YML 작성하기 ]

    - YML의 기본 작성 형식에 따라서 이름과, 적용할 Hosts에 대해서 지정한다.

    - 실제 VLAN을 생성할 Tasks를 만드는 데, VLAN을 다루는 예제이기 때문에 VLAN을 관리하기 위한 Library인 eos_vlan을 사용한다.

    - vlan name을 지정하고, vlanid를 설정한다.

 

 

 

[ YML(Playbook) 실행하기 ]

    - 위에서 작성한, Playbook을 실행하면 아래와 같이 정상적으로 작성이 성공한 것을 볼 수 있다.

    - 기존에 존재하지 않은 VLAN이었기 때문에 Task에서 Changed로 체크된다.

    - ansible_hosts에 설정된 host는 veos1 1대밖에 없었기 때문에, 1대에 대해서만 적용된다.

 

 

[ Arista에서 확인하기 ]

    - VLAN 정보를 확인해면, 아래와 같이 지정된 VLAN 이름을 가진 10번 VLAN이 생긴 것을 확인할 수 있다.

 

 

 

예제2) VLAN 삭제

 

[ YML 작성하기 ]

    - 예제 1과 모든 부분은 동일하며, 단지 state가 추가되었다.

    - state는 반드시 eos_vlan을 사용하기 위해 반드시 설정되어야 하는 속성은 아니며, 미 설정 시에 default로 configured 상태이다.

    - 즉, 예제 1번에서는 state를 사용하지 않았지만, default로 configured 상태이기 때문에 해당 vlan이 설정되게 된다.

    - 반면에 2번의 에제에서는 vlan 10에 대해서 unconfigured를 state로 설정하여 해당 config를 제거하게 된다.

 

 

 

 

[ YML(Playbook) 실행하기 ]

    - 위에서 작성한, 예제 2의 Playbook을 실행하면 예제 1ㅘ 마찬가지로 동일하게 정상적으로 작업이 성공됨을 볼 수 있다. 

 

 

 

[ Arista에서 확인하기 ]

    - 아래의 결과 중의 위의 결과는 예제 1을 실행했을 때의 vlan  10이ㅣ 생성된 거을 확인할 수 있고,

      아래의 결과가 예제 2를 실행하여 vlan 10이 제거된 것을 확인할 수 있다.     

 

 

 

 

예제3) Interface 설정

 

[ YML 작성하기 ]

    - 예제 3은 2개의 Task로 이루어져 있습니다.

    - 첫 번째  task는 Switchport를 설정하는 예제입니다. 특정 인터페이스에 vlan 10으로 Access 모드로 적용합니다.

    - 두 번 째 task는 특정 인터페이스에 Description을 적용합니다.

    - 각 Task는 eos_switchport와 eos_interface의 속성을 사용해서 YML을 작성하게 됩니다.

 

 

 

 

[ YML(Playbook) 실행하기 ]

    - 예제 3을 실행하면, 2개의 Task로 구성되어 있기 때문에 각각 Task를 실행하게 되며, 2개의 Task 적용이 되었음을 확인할 수 있습니다.

 

 

 

 

[ Arista에서 확인하기 ]

    - Eh2 인터페이스에 대해서 vlan 10과 ZIGI_DESC라는 Descritption이 생성됨을 확인할 수 있습니다.

 

 

 

 


 

 이번 포스팅에서는 Ansible을 사용하여 Arista 장비를 제어하는 예제를 3가지 살펴보았습니다.

 Ansible에서 eAPI를 사용하여 Arista 장비를 제어할 수 있는 Library를 통해서 예제에서 살펴본 것 이외의 다양한 설정을 할 수 있습니다.

 하나씩 그러한 예제를 살펴보면, Ansible을 네트워크 장비에서도 좀 더 효율적으로 사용 할 수 있을 것 같습니다.

 

 

 

Posted by 네떡지기
분류없음2014.11.16 04:34

 

 


 Arista의 VEOS를 통한 VXLAN을 간단하게 구현해보는 VXLAN의 3번째 포스팅입니다.

오랜만에 올리는 VXLAN시리즈 포스팅이네요.

원래 3번째 포스팅은 좀 더 이론적인 부분을 다루기 위해서 작성하다가,

4번째 포스팅하려던 테스트가 먼저 정리가 되어서, 순서를 바꿔서 올려봅니다.

VXLAN을 구성하기 위한 VEOS의 간단한 Config에 대해서 먼저 알아보고,

해당 Config를 이용하여 단순한 랩을 통해서 이해해보시길 바랍니다.


 

○ VXLAN VTI 생성
switch(config)#interface vxlan 1

 

○ VNI와 VLAN 간의 Mapping
switch(config)#interface vxlan 1
switch(config-if-Vx1)#vxlan vlan 100 vni 100

○ VXLAN의 VNI 구분자

     - VNI는 1 ~ 16777215까지 사용 가능하나, Dotted 명령 사용 시 0.0.1 ~ 255.255.255 로 설정 가능.

switch(config)#vxlan vni notation dotted
switch(config-if-Vx1)#vxlan vlan 200 vni 10.10.200

 

○ VXLAN을 맺기 위한 Loopback IP 생성 및 Source로 설정
switch(config)#interface loopback 15
switch(config-if-Lo15)#ip address 10.25.25.3/24

 

switch(config)#interface vxlan 1
switch(config-if-Vx1)#vxlan source-interface loopback 15

 

○ Multicast Group 설정

 -
switch(config)#interface vxlan 1
switch(config-if-Vx1)#vxlan multicast-group 227.10.1.1

 

○ 기본 VXLAN UDP 포트(4789) 변경
switch(config)#interface vxlan 1
switch(config-if-Vx1)#vxlan udp-port 5500

 

○ Head End Replication (VXLAN을 통한 Broadcast / Unknown Unicast / Multicast Traffic을 전송하기 위함). (unicast? 맺는거?)
switch(config)#interface vxlan 1
switch(config-if-Vx1)#vxlan flood vtep 10.1.1.1 10.1.1.2

※ 특정 VLAN에 대하여 Head-End Replication 지정

switch(config-if-Vx1)#vxlan vlan 101-102 flood vtep 11.1.1.1 11.1.1.2 11.1.1.3

 

○ VXLAN Multicast Group 설정

switch(config)#interface vxlan 1
switch(config-if-Vx1)#vxlan multicast-group 227.10.1.1

 

 


Simple VXLAN Lab 구성 및 TEST 

 

 


 VEOS#1 설정

vlan 10
!
interface Ethernet1
   switchport access vlan 10
!
interface Ethernet2
   mtu 9000
   no switchport
   ip address 1.1.3.5/24
   ip pim sparse-mode

 

 

interface Loopback0
   ip address 10.1.1.1/24
!
interface Vlan10
   ip address 1.1.2.5/24
!
interface Vxlan1
   vxlan multicast-group 239.1.1.1
   vxlan source-interface Loopback0
   vxlan udp-port 4789
   vxlan vlan 10 vni 10
!
ip routing
!
ip multicast-routing

 

 

 

 VEOS#2 설정

vlan 10
!
interface Ethernet1
   switchport access vlan 10
!
interface Ethernet2
   mtu 9000
   no switchport
   ip address 1.1.3.6/24
   ip pim sparse-mode

 

 

interface Loopback0
   ip address 10.2.2.2/24
!
interface Vlan10
   ip address 1.1.2.9/24
!
interface Vxlan1
   vxlan multicast-group 239.1.1.1
   vxlan source-interface Loopback0
   vxlan udp-port 4789
   vxlan vlan 10 vni 10
!
ip routing
!
ip multicast-routing

 

 

 


 

 

VXLAN Interface 확인

VEOS1#sh int vxlan 1
Vxlan1 is up, line protocol is up (connected)
  Hardware is Vxlan
  Source interface is Loopback0 and is active with 10.1.1.1
  Replication/Flood Mode is multicast
  Inactive Vxlan Configuration:
    Multicast group address is 239.1.1.1
  Static vlan to vni mapping is
    [10, 10]        

 

 

VXLAN Address Table 확인

VEOS1#sh vxlan address-table
          Vxlan Mac Address Table
------------------------------------------------------------------------------------------

Vlan  Mac Address     Type             Prt    Vtep           Moves   Last Move
----  -----------               ----               ---     ----             -----       ---------
  10  000c.2925.2a9c  DYNAMIC  Vx1  10.2.2.2     1           1:17:48 ago
Total Remote Mac Addresses for this criterion: 1        

 

 

 

 VXLAN MAC 정보 확인

 

 

VEOS#1번기 VXLAN Address Table(상단 표에서 참조)의  '000c.2925.2a9c'의 MAC이 상대편 VTEP 내부의 서버 1.1.2.10의

실제 Mac Address임을 확인할 수 있다. 

 

 

 

Posted by 네떡지기
프로그래밍/Python2014.08.24 17:15

 

Last Updated 2014.08.26


Python for Networker의 이번 포스팅은 Cisco dCloud 의  Nexus 9000 : NX-OS Programmability v1에 있는 Python Script 예제 중의 하나를 다뤄봅니다.

 

이 Python Script는 Nexus에서 현재 원하는 정보를 Text 형태의 첨부파일로 만들어서, 메일로 전송을 하는 예제 Script 입니다.

 

다음과 같이 bootflash://script 디렉토리에서 예제 Script를 실행합니다.

 

 

dcloud-n9k#  python ./n9k_serviceability.py 수신메일주소

 

 

 

 

Script를 실행하게 되면, 어떤 종류의 정보를 수집할 것인지에 대해서 물어보게 됩니다.

 

여기서 원하는 정보의 종류를 선택하면, Nexus에서 해당 정보를 수집하여, 수신하고자 하는 Email 주소로 발송을 하게 됩니다.

 

실제 메일이 제대로 발송이 되었는지 확인을 해보면, 아래와 같이 제 메일 계정으로  메일이 수신되었음을 확인할 수 있습니다.

 

Cisco dCloud의 Nexus 9000에서의 예제 Script이기는 하지만,

어차피 기존 포스팅에서도 다뤘듯이 Nexus에서만 가능한 부분은 아닙니다.

 

그럼 유사한 기능을 기존 포스팅에서 언급했던, Arista vEOS에서 유사한 Script로 만들어서 테스트 해보겠습니다.

 

Arista VM을 실행하여, vEOS에서 mail.py 이라는 예제 Script를 만들었습니다.

 

그리고 아래와 같이 해당 Script를 실행해봅니다.

 

 

이 예제에서는 특정 정보를 가공해서 메일을 발송할 수 있다는 점에 대해서 보여주는 것이기 때문에

복잡하게 구현하지는 않았고, 단순하게 현재 vEOS의 version 정보를 확인하여, 첨부파일로 전송을 하는 역할을 합니다.

 

위와 같이 해당 Script를 실행하게 되면, vEOS의 version 정보를 Text 형태의 첨부 파일로 가공을 하게 되고, 메일을 보내게 됩니다.

(참고로 Arista VM에서 bash shell mode에서 python script를 실행 중인 모습입니다.)

 

자 이제, 메일이 잘 도착했는지 메일함을 확인해보겠습니다.

(위의 예제에서는 별도로 뒤에 수신자 email 주소를 쓰지 않았지만 Nexus에서와 마찬가지로 실행 시 수신하고자 하는 email주소를 쓰게 되면,  해당 email로 전송도 물론 가능합니다.)

 

 

 메일함을 보면,  정상적으로 메일이 잘 수신된 것을 확인할 수 있습니다.

 첨부파일을 열어보게 되면, show version으로 확인된 정보를 볼 수 있습니다.

 

 이번 포스팅에서는 별도의 기술적인 내용은 배제하였습니다.

 

  다만, Python을 이용하여 어떤 것들이 가능한지에 대해서 Cisco dCloud에서의 보여주는 예제를 확인해보고

 또한 그러한 예제들이 단순히 특정 벤더에서만 실행되는 것이 아니라 Python을 지원하는 어떤 장비에서도 유연하게 사용할 수 있다는 것을

 확인해보는 것이 이번 포스팅에서 말하고자 하는 부분입니다.

 

  물론 Script 상에 들어가는 각 벤더에서 제공하는 모듈들은 유사한 기능을 하는 각 벤더의 모듈을 가져다 쓰기는 해야겠지만,

 기본적인 프로그램 상의 로직이나 코드는 모두 재활용이 가능합니다. 

 

  또한 기존에 있는 코드에서 추가적인 기능들을 얼마든지 필요에 의해서 추가도 가능하게 될 것입니다. 

 

 그럼 다음 포스팅에서 다시 찾아뵙겠습니다.

 

 


Nexus 5000에서도 테스팅 추가 완료하였습니다.

 

아래와 같이 Nexus 5000에서 mail.py 이라는 Script를 만들었습니다.

기본적인 코드는 위에서 사용했던 코드와 거의 유사하며, 실제 장비에 Cli 모드의 명령하는 부분과 결과값을 가공하는 부분만

다르게 되어 있습니다. Script의 내용은 기존과 마찬가지로 show version으로 나오는 결과값을 메일로 발송하도록 되어 있습니다.

 

 

위와 같이 정상적으로 코드가 실행된 것을 확인할 수 있습니다.

 

 

 Nexus에서 메일을 발송한 이후에, 메일함을 살펴보면

정상적으로 메일과 첨부파일이 도착한 것을 볼 수 있습니다.

 

이것으로 Nexus 9000 / 5000 , Arista vEOS에서 모두 메일 발송하는 Python Script를 살펴보았습니다.

전체적으로 변경된 부분은 단지 장비에 대한 상태를 확인하기 위한 명령어를 입력하고, 해당 결과값을 가공하는 부분만 다르고

나머지 부분은 모두 동일하다고 보시면 됩니다.

 

앞으로는 정말 코드를 처음부터 짤 수는 없더라고, 기존 코드를 이해하고 수정할 수 있을정도로 알아두어야만(?) 할 것 같습니다.

 

 

 

Posted by 네떡지기
분류없음2014.07.31 23:51

 


벌써 9번째 포스팅에 접어들었네요. ^^;

 

이번 포스팅은 직접 장비가 없어도 해보실 수 있는 VM을 이용하여 실습을 할 수 있도록 하는 환경을 꾸미는 내용입니다.

 

바로 ARISTA의 vEOS를 VMWARE 환경에서 사용할 수 있도록 만들어 보겠습니다.

 

이번 포스팅에서 1대의 가상 머신을 설치해보지만, 여러대의 VM을 띄워서 네트워크 구성도 물론 가능합니다!

 

 

NetworkZIGI Python Git : https://github.com/NetworkZIGI/Python_for_Network

 


 

 

먼저 Arista의 vEOS를 사용하기 위해서, vEOS 이미지를 구하셔야 합니다.

vEOS 이미지는 Arista 홈페이지를 가면, 아래와 같이 vEOS를 다운 받으실 수 있습니다. 
물론 다운을 받기 위해서 가입을 하셔야 합니다. (단, 별도의 파트너 계정일 필요는 없이 회원 가입만으로 다운이 가능합니다.)

 

그리고 버전이 여러개가 있는데,

 

    F 버전 : 기능이 추가된 버전

    M버전 : 안정화된 버전

 

이라고 볼 수 있습니다.

 

 

버전 한가지를 골라서, 해당 버전의 모든 파일과 ISO 파일을 모두 다운 받습니다.

 

다운을 받는데는 시간이 조금 걸리기 때문에, 다운 시켜놓고~ 잠시 네떡지기의 블로그에서 다른 포스팅도 봐주시면 감사하겠습니다.

 

....

 

자 모든 파일이 다운이 끝났으면, 이제부터 환경을 만들어 보겠습니다.

전 과정(?)을 모두 캡춰를 떴으니~ 사진만 보고 따라가셔도 충분히 손쉽게 구축할 수 있습니다.

 

 

Custom 모드를 선택해서 시작합니다.

 

그냥 Next를 하시면 됩니다. ^^

 

아까 홈페이지에서 다운 받은

Aboot-veos-2.0.8.iso

로 지정하시면 됩니다!

 

Linux로 선택하시고, inOther Linux 2.6x 로 선택 하시면  됩니다.

 

 

 

 

적당하게, Virtual Machine Name을 주고, 위치를 지정합니다.

 

Next 클릭! (CPU 1)

 

2048MB 로 지정하시고, Next 선택

 

전 Host-only networking을 했습니다.

 

Next 클릭! (LSI Logic)

  

IDE로 지정하시고, Next 선택

 

 

Disk는 Existing Disk로 지정하시고,

Arista 홈페이지에서 다운받은 이미지 파일(vEOS-4.13.7M.vmdk)을 지정합니다.

Next 선택합니다.

 

모두 끝습니다.

Finish를 선택하시면 됩니다.

 

자, 이제 가상머신을 구동시킵니다!

 

위와 같이 vEOS가 부팅되는 것을 볼 수 있습니다.

 

부팅이 완료되면, 로그인 창이 뜹니다.

기본 계정은 'admin'으로 하시고, 별도의 비밀번호는 없습니다.

 

 

자, 이제 모든 환경이 갖춰졌으니 Python Shell을 띄워서 간단하게 Print까지 한 줄 해보았습니다.

 

이제부터는 집에 있는 컴퓨터로도 실습까지 해 볼 수 있는 멋진 환경을 구축하시게 되었습니다.

 

이번 포스팅은 이만 줄이고~ 다음 포스팅에서 다시 또 조만간 뵙도록 하겠습니다.

Posted by 네떡지기

티스토리 툴바