분류없음2015.05.22 12:56

pyeapi, api, node, python, programmability : today Key


이번 포스팅은 지난 시간에 이어서, arista의 pyeapi에 대한 간략한 포스팅입니다.

pyeapi를 사용 시에 기본적으로 보게 된, 몇 가지의 코드 내용을 간략하게 알아봅니다.

별도로 구현부까지는 세부적으로 알아보지 않고, 각 주요 메서드에 대한 사용법과 설명만 하였습니다.

추후에 필요에 따라서 이렇게 주요 메서드에 대해서는 추가로 알아 볼 예정이며,

또한 물론 각 메서드를 사용한 코드와 동작 결과에 대한 예제도 함께 알아보겠습니다.


 


class Node(object): 

  

   def config(self, commands):

       ▷ commands는 String이나 List형으로 구성되나, String형은 내부적으로 List Type으로 다시 변경해서 처리된다.

       ▷ 실제 Command 실행은 run.commands 메서드를 사용

 


   def enable(self, commands, encoding='json', strict=False):

       ▷ Command는 List 형태로 전송

       ▷ 기존 Command 요청 형태는 json이며, json을 지원하지 않는 경우에는 text로 전송하도록 함

       ▷ strtict가 false 경우에는 json을 지원하지 않는 command에 대해서 text 방식으로 시도.

       ▷ Config 모드의 명령은 지원하지 않음.

       ▷ 실제 Command 실행은 run.commands 메서드를 사용

 

 

    def run_commands(self, commands, encoding='json'):

       ▷ 명령어를 전송하는 하위 계층의 메서드

       ▷ 일반적으로 직접 사용하지 않고, config나 enable 메서드를 통해 사용

       ▷ 실제 장비로 Command의 전송은 node 클래스의 멤버의 _connection의 execute 메서드 사용

           ※  _connection

                - connect_to 메서드 연결 시, Node 객체를 생성하게 되는데, Node 객체 초기화 시에

                 연결하고자 하는 node의 정보를 가지고 make_connection 메서드를 통해서 node와 연결할 객체를

                 eapi 연결 type에 따라서 socket, http_local, http, https EapiConnection을 호출

          

 

    def api(self, name, namespace='pyeapy.api'):

       ▷ name 매개변수를 통해서 API 모듈을 자동으로 Load

       ▷ 기본 namespace는 pyepai.api 이므로, api 내의 모듈 명만 써주면 됨.

       ▷ initialize 메서드와 instance 메서드에 확인하고, 해동 모듈을 리턴 함.

 

 

    def connect_to(name):

       ▷  매개변수의 name으로 node 정보가 있는 파일에서, 해당 node의 접속 정보(ip, id, pass 등)을 가지고 node 객체를 생성

 

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 네떡지기
DevOps/Automation2015.03.09 22:39

 

Ansible Arista 제어

 

거의 한 달여만의 포스팅이자, Automation for Networker 시리즈로는 거의 3~4달여만 남기는 것 같습니다.

이래 저래.. 일도 있고, 2월부터 4월까지 예정중인 네트워크 타임즈 기고 건 때문에 조금 더디게 정리하고 있기도 합니다. ^^;

이번 포스팅은 4월 네트워크 타임즈 기고에서도 다뤄지게 될 내용인, Ansible을 통한 Arista Switch를 제어하기의 첫 번째 시간인

환경 구축입니다.  다음 포스팅은 이 환경 구축을 통한 실제 Ansible로 Arista swtich 제어하는 에제를 다루게 될 예정입니다.

길이는 무척이나 짧지만, 인고의 삽질 끝에 얻어낸 축약된 내용입니다. ^^;


Ansible로 Arista Switch 제어하기 

 

1. Arista 장비에서 EOS Command API를 활성화

    ZIGI-ARI# management api http-commands

    ZIGI-ARI(config-mgmt-api-http-cmds)# no shutdown

 

 

2. Ansible에서 Arista 장비를 SSH 통해서 제어하기 위해서,  Ansible Control Node가 Arista Linux Shell에 직접 접근하도록 구성.

        - Ansible Control Node는 Arista EOS Node에 Password를 입력하지 않고 SSH Key를 통해서 접속하도록 구성

    2-1 Ansible에서 사용할 SSh 접속용 User 생성

    2-2 Ansible Control Node에서 SSH Key를 전송하기 위한 디렉토리를 생성 후, 권한 설정

 

 

 

 

 

3. Ansible Control Node에서 SSH Key를 Arista EOS Node로 전송 후, SSH 접속 테스트

         - Key를 접속하기 전에는 SSH 접속 시, Password를 입력해야 하지만 Key 전송 후에는 바로 접근 가능

 

 

 

 

4. Arista 장비에서 Ansible 사용자가 key를 이용해서만 Login하도록, 재부팅 시에 Password를 할당하지 않게 설정한다.

 

 

 

 


 

● 라이브러리 종속성

     - Ansible을 사용하여 Arista Switch를 제어하기 위한 설치 과정에서 아래와 같은 종속성이 있기 때문에 각각 모두 설치가 필요하다.

 

 

※ 초기에는 devops extension을 설치하였지만, 현재는 arista.eos로 대체

 

 

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 네떡지기

티스토리 툴바