DevOps/Programmability2018.04.06 12:48

Today Key. : Postman, 포스트맨, API, REST, 개발, 테스트, getpostman  

 


 

이번 포스팅은 REST API의 테스트를 효과적으로 할 수 있는 Postman이라는 도구에 대한 포스팅입니다.

 

현재 대다수의 벤더의 장비들이 REST API 제공하고 있습니다. 이러한 REST API 테스트 있도록 장비 자체적으로

Sandbox 제공하는 경우도 있지만그렇지 않은 경우에는 REST API 테스트 하는 방법이 쉽지는 않습니다.

 

이런 경우에 사용할 있는 도구가 바로 오늘 포스팅하는 Postman 입니다.

 

실제로 Postman API 개발을 하고 테스트를 하기 위해서 개발자들이 많이 사용하는 도구입니다.

 

Postman 사이트(https://www.getpostman.com)에서 Postman 대해서 다음 Postman 설명하고 있습니다.

 

API 개발을 위해서 사용하는 toolchain

 - 글로벌하게 가장 많이 사용되는 REST client

 - API 개발자를 위해서 고안됨

 - request 보내고, response 저장하고, 테스트를 하고, 워크플로우를 만드는 등의 작업에 대해서 직관적인 인터페이스를 제공

 

 

 

오늘은 Postman 설치와 Postman 사이트에서 나온 설치 , 기본 예제 실행까지만 간단히 알아보겠습니다.

 

 

먼저 Postman 사이트입니다.  (Download App을 하시면 됩니다.)

 

 

 

다음과 같이 MAC, Windows, Linux 모두 가능합니다.

여기에서는 Windows 환경에서 설치 하겠습니다.

 

 

※ 참고로 별도 설치가 아닌 Chrome의 AppStore에서 Plug-in 형태로도 설치가 가능합니다.

   하지만, 별도의 App으로의 설치를 권고합니다.  Chrome 플랫폼의 제한으로 인해서 별도 App에서만 제공되는 몇 가지 기능들이 있습니다.

 

 

 

설치 파일을 다운로드 받아서 실행하면 다음과 같이 설치가 됩니다.

 

 

 

설치가 완료된 후, 처음 실행된 화면입니다.

 

 

 

다음의 Postman 사이트에서 기본 Request에 대한 동작을 간략하게 설명한 그림입니다.

Postman을 이용해서 요청할 주소를 기입하고 Send 버튼을 보내면, 이에 대한 값을 받아서 Postman에서는 다시 화면에 보여주게 됩니다.

 

 

 

 

이제 실제 Postman 화면에서 저 예제를 실행합니다.

postman-echo.com/get 을 URL 입력 칸에 기입합니다.

오른쪽의 Send 버튼을 클릭하면, 다음의 그림과 같은 결과가 출력됩니다.

정상적으로 stauts가 200 OK가 떨어지고, 얼마만에 응답이 왔는지 등의 정보를 확인할 수 있습니다.

 

 

 

실제 저 주소를 브라우저에서 치면, 다음과 같은 값을 볼 수 있습니다.

일반 브라우저에서도 해당 내용을 확인할 수 있겠지만,

Postman을 사용하면 좀 더 직관적으로 결과 값을 볼 수 있을 것입니다.

 

 

 

 

다음은 제 블로그를 동일하게 실행한 결과 값입니다.

 

 

 

이번 포스팅은 아주 간단한 Postman에 대한 소개와 설치 방법 그리고 Postman Guide에 있는 첫 번째 예제까지 살펴 보았습니다.

 

이후 포스팅에서 Postman에 대한 좀 더 알아보고,

 

어떻게 네트워크 장비에서 제공되는 Rest API에 활용할 수 있을 것인지에 대해서 다룰 예정입니다.

 

 

 

 

 

Posted by 네떡지기
DevOps/Programmability2018.03.30 13:46
 

안녕하세요.

이번 포스팅은 현재 제가 운영진으로 활동 중인 [네트워크 전문가 따라잡기] 커뮤니티의 

'제 24회 네트워크 전문가 따라잡기 "N.EX.T" (정기기술세미나)' 에서 진행한 세션의 발표 자료입니다. 

발표 자료는 첨부하였으며, 슬라이드를 바로 보실 수 있게 사진으로도 첨부합니다.

다만, 첨부 가능한 사진이 한계가 있어서 슬라이드는 2개의 포스팅으로 나눠서 합니다. (2번째 포스팅입니다.)

[첫번째 포스팅]

 

 

Posted by 네떡지기
DevOps/Programmability2018.03.30 13:43

안녕하세요.

이번 포스팅은 현재 제가 운영진으로 활동 중인 [네트워크 전문가 따라잡기] 커뮤니티의 

'제 24회 네트워크 전문가 따라잡기 "N.EX.T" (정기기술세미나)' 에서 진행한 세션의 발표 자료입니다. 

Session2.네트워크엔지니어를위한Python101.pdf

발표 자료는 첨부하였으며, 슬라이드를 바로 보실 수 있게 사진으로도 첨부합니다.

다만, 첨부 가능한 사진이 한계가 있어서 슬라이드는 2개의 포스팅으로 나눠서 합니다.

[두번째 포스팅]

 

Posted by 네떡지기
DevOps/Programmability2018.03.30 13:30

안녕하세요.

이번 포스팅은 현재 제가 운영진으로 활동 중인 [네트워크 전문가 따라잡기] 커뮤니티의 

'제 24회 네트워크 전문가 따라잡기 "N.EX.T" (정기기술세미나)' 에서 제가 진행한 세션과 관련된 내용입니다.

이번 행사에서는  [예제로 보는 '네트워크 엔지니어를 위한 Python 101'] 이라는 주제로 세션을 하였고

세션 시간에 사용된 간단한 예제에 대해서 코드를 공유합니다.

코드에 대한 내용은 세션 시간에 다루었기 때문에 자세한 설명은 생략합니다.

그리고 본 예제에 사용된 코드는 완성형 코드는 아닙니다.

우선 대표적인 예가 예외처리가 전혀 없습니다. (기본 라이브러리에서 제공되는 부분 제외)

아래의 코드들은 처음 접근을 어렵게 생각하시는 분들을 위해서 최대한 쉽게 접근할 수 있을 정도로 짧게 짧게 만들었으며

이후에 아래의 코드들을 조금씩 변형해가면서 본인만의 코드를 만들어보면 좋을 것 같습니다.

 

예제 1) 장비 접속 및 기본 명령어 수행 및 실행

from netmiko import ConnectHandler

arista= {
    'device_type': 'arista_eos',
    'ip':   'device',
    'username': 'admin',
    'password': 'admin',
    'port' : 2222,          # 기본 값이 22포트를 사용할 경우에는 사용하지 않아도 무방


net_connect = ConnectHandler(**arista)

output = net_connect.send_command('show int desc')
print(output)

 ○ 세션 시에 IP를 숨기기 위해서 'device'라는 이름으로 사용을 하였으며, 실제로는 해당 위치에 IP가 들어가면 됩니다

   단,IP 값은 문자열이기 때문에 ' ' 혹은 " "를 사용해야 합니다.

   문자열이기 때문에 도메인 값으로 대체해도 무방합니다

 

예제 2-1) 장비 접속 및 기본 명령어 수행 및 실행

from netmiko import ConnectHandler
import device

print("Connecting....")
nwnode = ConnectHandler(**device.ARI)
shver = nwnode.send_command("show ver")
print(shver)

예제 2-2) 장비 접속 및 기본 명령어 수행 및 실행  (device.py)

ariuser='admin'
aripwd='admin'
dv='arista_eos'

ARI={'device_type':dv,'verbose':False,'username':ariuser,'password':aripwd,'ip':'device','port':2222} 

 ○ 장비 인벤토리 정보를 기능을 수행할 코드와 별도로 분리한 예제입니다.

    예제 1과 동일하지만, 단순히 인벤토리를 분리한 내용입니다

    인벤토리 정보는 py코드를 사용할 수도 있지만, 별도의 파일로 관리해서 관리도 가능할 수 있습니다.

 

예제 3-1) 장비 인터페이스 상태 출력  

shstatus ='''
Port    Name               Status       Vlan       Duplex Speed Type
Fa1/0   ZIGI-SVR0          notconnect   1            auto    auto 10/100BaseTX
Fa1/1   ZIGI-SVR1          notconnect   1            auto    auto 10/100BaseTX
Fa1/2   ZIGI-SVR2          notconnect   1            auto    auto 10/100BaseTX
Fa1/3   ZIGI-SVR3          connected   1            auto    auto 10/100BaseTX
Fa1/4   ZIGI-SVR4          notconnect   1            auto    auto 10/100BaseTX
Fa1/5   ZIGI-SVR5          notconnect   1            auto    auto 10/100BaseTX
Fa1/6   ZIGI-SVR6          connected   1            auto    auto 10/100BaseTX
Fa1/7   ZIGI-SVR7          notconnect   1            auto    auto 10/100BaseTX
Fa1/8   ZIGI-SVR8          notconnect   1            auto    auto 10/100BaseTX
Fa1/9   ZIGI-SVR9          notconnect   1            auto    auto 10/100BaseTX
Fa1/10  ZIGI-SVR10         connected   1            auto    auto 10/100BaseTX
Fa1/11  ZIGI-SVR11         notconnect   1            auto    auto 10/100BaseTX
Fa1/12  ZIGI-SVR12         notconnect   1            auto    auto 10/100BaseTX
Fa1/13  ZIGI-SVR13         notconnect   1            auto    auto 10/100BaseTX
Fa1/14  ZIGI-SVR14         notconnect   1            auto    auto 10/100BaseTX
Fa1/15  ZIGI-SVR15         notconnect   1            auto    auto 10/100BaseTX

'''

status = shstatus.split('\n')

for op in status:
    print(op)
 

○ 장비 인터페이스 정보를 출력하는 예제입니다.  

   이번 예제는 실제 장비를 접속한 것이 아니라, 장비에 접속하여 인터페이스 정보 가져온 내용을 출력하는 부분입니다.

   장비 정보를 가져오게 되면, 하나의 길 문자열로 되어 있는 데 이를 가공하는 방법에 대한 예제이며

   이 예제에서는 결과 값을 각 Line 단위로 쪼개는 함수(split)를 사용하여 정보 Line 단위로 저장하고

   저장된 값을 하나씩 가져와서 출력합니다.

 

예제 3-2) 장비 인터페이스 상태 출력 

shstatus ='''
Port    Name               Status       Vlan       Duplex Speed Type
Fa1/0   ZIGI-SVR0          notconnect   1            auto    auto 10/100BaseTX
Fa1/1   ZIGI-SVR1          notconnect   1            auto    auto 10/100BaseTX
Fa1/2   ZIGI-SVR2          notconnect   1            auto    auto 10/100BaseTX
Fa1/3   ZIGI-SVR3          connected   1            auto    auto 10/100BaseTX
Fa1/4   ZIGI-SVR4          notconnect   1            auto    auto 10/100BaseTX
Fa1/5   ZIGI-SVR5          notconnect   1            auto    auto 10/100BaseTX
Fa1/6   ZIGI-SVR6          connected   1            auto    auto 10/100BaseTX
Fa1/7   ZIGI-SVR7          notconnect   1            auto    auto 10/100BaseTX
Fa1/8   ZIGI-SVR8          notconnect   1            auto    auto 10/100BaseTX
Fa1/9   ZIGI-SVR9          notconnect   1            auto    auto 10/100BaseTX
Fa1/10  ZIGI-SVR10         connected   1            auto    auto 10/100BaseTX
Fa1/11  ZIGI-SVR11         notconnect   1            auto    auto 10/100BaseTX
Fa1/12  ZIGI-SVR12         notconnect   1            auto    auto 10/100BaseTX
Fa1/13  ZIGI-SVR13         notconnect   1            auto    auto 10/100BaseTX
Fa1/14  ZIGI-SVR14         notconnect   1            auto    auto 10/100BaseTX
Fa1/15  ZIGI-SVR15         notconnect   1            auto    auto 10/100BaseTX

'''

status = shstatus.split('\n')

for op in status:
    if(op.find('connected') > 0):
        print(op.split()[0]) 

○ 장비 인터페이스 정보를 출력하는 예제의 변형입니다.

    각 Line별로 가져온 값에서 현재 연결된 인터페이스 정보만을 출력하기 위해서 'connected'라는 값을 찾아서

    'connected'된 인터페이스만을 출력합니다.

 

 

 

예제 4-1) 장비 Uptime 출력 

shverinc = "zigi-r1 uptime is 2 hours, 27 minutes"
uptime = shverinc.split(" uptime is ")
print(uptime)

 

예제 4-2) 장비 Uptime 출력 

shverinc = "zigi-r1 uptime is 2 hours, 27 minutes"

uptime = shverinc.split(" uptime is ")
print("Device Host : {0}\t\tUptime : {1}".format(uptime[0],uptime[1]))

 ○ 장비 Uptime을 출력하는 예제입니다.

    출력된 값은 기본적으로 가져온 값을 어느 정도 수준까지 가공해서 사용할 것인지에 대한 부분입니다.

 

예제 5) 장비 Mac-address 정보 출력

shmac = '''VDX# show mac-address-table
VlanId   Mac-address       Type     State        Ports
41       0000.0000.fe00    Dynamic  Active       Te 1/5/1
41       0000.0000.fe01    Dynamic  Remote       Te 2/5/1
41       001c.7f63.950f    Dynamic  Active       Te 1/5/1
41       02e0.52b2.f50d    System   Active       XX 1/X/X
41       c4f5.7c18.3962    System   Remote       XX 2/X/X
43       0000.0000.fe00    Dynamic  Active       Po 3
43       0000.0000.fe01    Dynamic  Active       Po 4
43       001c.7f63.7efc    Dynamic  Active       Po 4
43       001c.7f69.7b76    Dynamic  Active       Po 3
43       02e0.52c3.940e    System   Active       XX 1/X/X
43       c4f5.7c18.3962    System   Remote       XX 2/X/X
701      0050.5686.049e    Dynamic  Remote       Te 15/0/14
701      0050.5686.09d9    Dynamic  Remote       Te 15/0/19
701      0050.5686.123f    Dynamic  Remote       Te 15/0/4
701      0050.5686.1384    Dynamic  Remote       Te 15/0/15
701      0050.5686.1647    Dynamic  Remote       Te 15/0/18
701      0050.5686.44ff    Dynamic  Remote       Te 15/0/6
701      0050.5686.4614    Dynamic  Remote       Te 15/0/9
701      0050.5686.6265    Dynamic  Remote       Te 15/0/8
701      0050.5686.7078    Dynamic  Remote       Te 15/0/3'''

mactables = shmac.split('\n')
macinfos = []
for mactb in mactables:
    if((mactb.lower().find(' te'))>0):
        macinfos.append(mactb)

for macinfo in macinfos:
    macinfo=macinfo.split()
    print("MAC : {0} \t Interface : Te {1}".format(macinfo[1],macinfo[5]))

○ 장비의 Local Mac Address 정보를 출력하는 내용입니다.

   

 

예제 6) 파일 입출력해보기 

zigifile = open("zigi.txt",'w')
zigifile.write("zigispace.net")
zigifile.close()

zigifile2 = open('zigi.txt','r')
zigi = zigifile2.read()
zigifile2.close()
print (zigi)

○ 초간단 파일 입출력 예제입니다.

예제 7) 장비 정보 가져온 후, 파일로 만들기

from netmiko import ConnectHandler
import device

print("Connecting....")
nwnode = ConnectHandler(**device.ARI)
shver = nwnode.send_command("show ver")

zigifile = open('zigi.txt','w')
zigifile.write(shver)
zigifile.close() 

○ 장비의 정보를 가져와서, 해당 값을 파일로 만드는 예제입니다.

Posted by 네떡지기
DevOps/Programmability2018.02.07 08:02

안녕하세요.

이번 포스팅은 Programmability for Networker의 25번째 포스팅입니다.

ACI Cobra를 이용하여 Port Channel 혹은 vPC Profile을 만들어주는 코드에 대해서 공유합니다.

세부적인 코드 설명은 포함되어 있지는 않지만, 현업에서 아래의 코드를 사용한다면

보다 쉽고, 빠르게 Profile을 만드실 수 있을겁니다.

이번 코드는  운영 중인 커뮤니티에서 진행된  '제 22회 네트워크 전문가 따라잡기 'N.EX.T''에서 발표하였던 코드이기도 합니다.

(정리해서 올리기로 하고.. 1년 가까이가 지났네요. ^^)

 

물론 포스팅 설명에 앞서서 한가지 미리 얘기를 드리면,

'왜 Port Channel이나 vPC Profile을 대량을 으로 만들어야 하지?' 라고 생각하실 수 있습니다.

ACI에 대한 포스팅을 준비만 하면서 계속하지 못하고 있어서 다루지 못한 부분이기는 하지만..

이 부분은 ACI를 어떻게 설계해서 사용하느냐에 따라서 많아질 수도.. 혹은 적어질 수도 있을 것이라고 생각합니다.

(물론 개인적인 생각은 최적화 된 Profile로 설계해서 사용한다면 그리 많지 않은 Profile로 모두 수용이 가능합니다.)

 

그럼 이제 본 내용을 시작합니다.

 


 

ACI에서 기본적으로 제공되는 APIC GUI에서 Click! Click을 이용해서 설정하는 방법 이외에

 

일괄적으로 대량을 설정을 하기 위해서는

JSON이나, XML 포맷의 파일을 미리 만들어 POST 하여 설정을 하거나,

ACI에서 제공되는 API를 이용해서 코드로 설정하는 방법이 있을 것입니다.  (CLI를 제외하고..)

 

하지만, 오늘 다룰 내용인 Interface Policies 항목에서는 POST를 할 수 있는 메뉴가 없습니다.

최상단의 Interface Policies에도 없고요.

 

 

 

 

 

 

하단의 Policy Groups에도 없습니다.

 

 

 

물론 그 하단인 Leaf Policy Groups에도 없습니다.

 

 

그래서 PC Profile이나 vPC Profile을 생성하기 위해서 ACI SDK인 Cobra를 이용하여 Port Channel이나 vPC Profile을 만들려고 합니다.

 

다음은 Port Channel이나 vPC Profile을 만드는 코드입니다.

 

 

위의 코드 이외에 Port Channel 혹은 vPC Profile의 이름이 선언된 info.txt라는 파일이 있어야 합니다.

info.txt에는 단순히 Profile에 사용할 이름만 한 줄씩 나열합니다.

 

그러면 info 파일에서 한 줄씩 읽어서 해당 이름으로 Profile을 생성하게 됩니다.

코드 본문에 있는 AEP 변수에서 사용하실 AEP 이름을 수정하시고

Port Channel을 사용할지, vPC를 사용할지에 따라서 AccBndlGrp 메서드 호출 시에 lagT에 대해서

 

Port Channel은 'link'로 설정하시고, vPC의 경우에는 'node'로 설정하시면 됩니다.

 

위의 코드에서는 Link Level Policy, Port Channel Policy, Attach Entity Profile에 대한 속성만 설정하였지만,

기타 그 밖의 설정을 추가할 수도 있습니다.

 

혹시라도 대량으로 PC, vPC Profile을 설정하셔야 하는 경우에 이 코드를 사용하시면 조금은 쉽게 설정이 가능하실 겁니다.

물론 자동화의 장점은 설정에 대한 편의성도 있지만, 잘못된 설정으로 인한 휴먼에러의 방지도 가능할 것입니다.

 

참고로, 위의 코드에서는 설정 시의 기본 예외처리만 만들었으며

기타 다른 상황에 대한 세부 예외 처리가 되어 있지 않기 때문에 더 보완해서 사용해보시는 것도 좋을 것 같습니다.

 

 

Posted by 네떡지기
DevOps/Programmability2017.06.27 02:09

Today Keys : cisco, aci, apic, python, package, sdk, cobra, programming, programmable, automation, installation 


이번 포스팅은 Cisco ACI의 Python SDK인 cobra를 위한 기본 설치 과정에 대한 내용입니다. 
ACI의 경우에는 기본적으로 APIC Gui를 통해서 설정을 진행하고 있지만, 
설정해야 하는 부분이 많아지게 되면, GUI로는 어려운 면이 없지 않아 있습니다. 
그럴 때, 사용될 수 있는 부분이 XML이나 JSON을 이용한 POST로 파일을 직접 올려서 설정하는 방법도 있지만
해당 기능이 모든 설정에 대해서 지원하지는 않습니다. 

APIC Python SDK를 사용하여, POST로 지원되지 않는 설정을 GUI가 아닌 Code로써 손쉽게 설정할 수 있습니다.
(물론 코드를 작성해야 한다는 부담은 있지만, GUI를 통한 대량의 Click보다는 나은 선택이 아닐까 싶습니다)


Cisco APIC Python SDK은 'cobra'라고 합니다. 

cobra를 이용한 프로그래밍을 하기 위해서는 다음의 2개 패키지를 설치해야 합니다. 


acicobra (SDK) 

acimodel (ACI MIT Model Package)

 

이 2개이 패키지는 APIC에서 아래의 URL을 통해서 다운로드 받을 수 있습니다. 


  http[s]://APIC Address/cobra/_downloads/ 




이 디렉토리 내에는 다음의 2개의 .egg file들이 존해아며, 파일 이름에는 APIC과 Python 버전 정보가 함께 표기되어 있습니다.

따라서, APIC 버전에 따라서 다음의 파일명은 조금 다를 수 있습니다. 

 

 위의 패키지 2개를 다운로드 받은 이후에는 설치해야 하는 데, 

이를 설치하기 위해서는 다음의 패키지가 사전에 반드시 설치 되어 있어야 합니다. 

 Python 2.7, easy_install , pip , virtualenv 

 위의 사전 설치 패키지를 모두 설치하고 나면, APIC에서 다운 받은 파일을 설치를 진행해야 하는 데, 

 이 때 다음의 2가지 사항에 유의해야 합니다. 


   acicobra SDK와 acimodel Package를 설치는 반드시, acicobra SDK를 먼저 설치 후에 acimodel을 설치

  ◇ 기존에 설치된 acicobra SDK가 있다면, 설치 전에 먼저 Uninstall 을 한 이후에 재 설치. 


APIC SDK 설치는 Windows와 Linux 환경 모두 설치가 가능하며, 

이번 포스팅에서는 Windows 환경에서의 설치를 살펴보겠습니다.



 Windows에 SDK 설치하기

1. Windows 환경 변수의 Path에 Python 경로와 Python scripts 경로를 추가

2. easy_install 명령을 이용하여 acicobra SDK egg 파일을 설치 

      easy_install -Z acicobra-X.X-pyX.X.egg

 Windows에 ACI Model Package 설치하기

1. easy_install 명령을 이용하여 acicobra SDK egg 파일을 설치 

      easy_install -Z acimodel-X.X-pyX.X.egg


 ACI SDK, Model Package 설치 확인

pip show 명령어를 사용하여, 정상적으로 SDK와 Package가 설치되었는지를 확인합니다.



* 관련 링크 : https://developer.cisco.com/media/apicDcPythonAPI_v0.1/install.html




Posted by 네떡지기
DevOps/Programmability2017.05.17 19:37

 

Keyword : netmiko, paramiko, ssh, python, programmability, automation, network, 자동화, 프로그래머빌리티


Programmability for Networker를 새롭게 시작하는 포스팅입니다. ^^; 지난번 Part에 이어서 Part 22부터 시작입니다.

당분간 진행하는 부분이 예전에 진행을 하면서 사용했던 부분이긴 하지만,

Netmiko라는 멀티벤더에서 손쉽게 Paramiko SSH를 사용할 수 있도록 해주는 라이브러리로 진행을 하게 될 예정이라서,

먼저 Netmiko 라이브러리를 설치하는 것으로 가볍게 시작해봅니다.

 

 

Netmiko 

 Multi-vendor library to simplify Paramiko SSH connections to network devices

 

* 관련 링크 : https://github.com/ktbyers/netmiko

 

 

○ Python 버전

         Python 2.7, 3.4, 3.5

 

○ 지원되는 장비

         Paramiko >= 1.13+

         scp >= 0.10.0

         pyyaml

         pytest(for unit tests)

 

 ※ Paramiko

   - Python SSH 모듈 

 

 

 

○ 지원되는 장비

       - Regularly tested

          Arista vEOS / Cisco ASA / Cisco IOS / Cisco IOS-XE / Cisco IOS-XR / Cisco NX-OS / Cisco SG300
          HP Comware7 / HP ProCurve / Juniper Junos / Linux

 

       - Limited tested

          Avaya ERS / Avaya VSP / Brocade VDX / Brocade ICX,FastIron / Brocade MLX,NetIron / Cisco WLC
          Dell-Force10 DNOS9 / Dell PowerConnect / Huawei / Mellanox / Palo Alto PAN-OS / Pluribus / Vyatta VyOS

 

       - Experimental
          A10 / Alcatel-Lucent SR-OS / Ciena SAOS / Cisco Telepresence / CheckPoint Gaia / Enterasys / Extreme
          F5 LTM / Fortinet

 

 

 

○ 설치 방법

       - Netmiko의 설치방법은 아래의 페이지에 안내되어 있지만, 실패하실 수 있습니다.

        * https://pynet.twb-tech.com/blog/automation/netmiko-tools.html

 

 

 

 

 

설치 시에 아래와 같은 에러메시지를 만날 수도 있습니다.

 

 

       -

 

혹시 설치에 실패를 하게 되면, 아래와 같이 설치를 진행하시면 됩니다. (Cent OS 7.3 기준입니다)

 

 

   rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
   yum install python-pip

   yum install python-dev
   yum install python-lxml
   yum install opensll
   yum install openssl-devel

   pip install netmiko

 

 

 

 

 

 

 

 

 

Posted by 네떡지기
DevOps/Programmability2017.05.01 09:49

안녕하세요.

 

이번 포스팅은 기존에 진행하던 Programmabiliy for Networker 라는 주제의 포스팅을..

다시 오랜만에 재개하기 위한 사전 동영상 포스팅입니다.

 

아래의 동영상은 Access-list를 관리하기 위한 방법으로 작성한 코드입니다.

차단하기 위한 별도의 IP리스트 파일을 관리를 하여,

기존의 있는 Access-list에 해당 파일에 있는 IP를 차단하는 역할을 해줍니다.

 

또한 이력관리를 위해서 앞에 Access-list Numbering을 ACL이 추가되는 현재의 날짜와 그 날의 순번대로 작성됩니다.

즉, 2017년 5월 1일에 작성되는 ACL의 경우에는 1705010000, 1705010001 과 같이 Accesss-list가 만들어집니다.

 

개인적으로 진행하는 스터디에서 다뤄질 소모임이기도 하고...

공부를 위한 부분이기도 하고..

6월에 진행되는 네전따 커뮤니티 세미나 발표를 위한 부분이기도 하고..

업무를 위해서 필요한 부분이기도 할...

Programmability for Networker 포스팅이.. 곧 다시.. 재개합니다. ^^

 

 

.

Posted by 네떡지기
DevOps/Automation2017.02.16 19:38

이번 포스팅은 예전에 정리했던 Ansible 관련한 내용 중에 Install이 빠져 있어서 현재 기준으로 간단하게 포스팅을 합니다.

아마 Ansible을 이용한 다른 포스팅을 시작하게 될 듯 싶어서, 다시 설치를 하는 김에  기존에 설치 내용이 포스팅에 없어서, 

정리를 해봅니다.

  - 기존 포스팅은 ZIGISPACE.NET에서 ansible로 검색하시면 됩니다! ^^


 

 

* 설치환경 : CentOS 7

 

1. Extra Packages for Enterprise Linux 

 Fedora를 쓰는 경우에는 직접 Ansible이 설치가 가능하지만, Fedora 계열의 Redhat이나 CentOS 등을 사용하는 경우에는

먼저 epel-release RPM을 설치.

   * epel = Extra Packages for Enterprise Linux

 rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm 

 

2. Yum을 이용해서 Ansible을 설치.

 sudo yum install ansible

 

3. Ansible 설치 확인

 ansible --version

 

○ 각 Distro에 따른 Ansible 설치는 아래의 홈페이지를 확인하시면 됩니다.

  - Ansible 설치 : http://docs.ansible.com/ansible/intro_installation.html#id13

 

 

Posted by 네떡지기
DevOps/Automation2016.09.05 23:14

 Today Key : Puppet, 퍼펫, Environment, 환경, Manifest, Group, 그룹, Production, conf, automation, 자동화

 

 

새로 쓰는 Puppet 관련 6번째 포스팅입니다.

정리를 해두고, 포스팅 하는 데까지 이래저래 시일이 걸리기도 하고 다른 것들을 보느라,

더뎌지고 있지만.. 앞으로 더 포스팅 예정입니다.

이번 포스팅은 Puppet의 Agent를 그룹화 하여 관리할 수 있는 Environment에 대한 내용입니다.

Environment에 대한 전부를 다루는 것은 아니지만, Environment를 조금이나마 이해하고

사용하는 데 도움이 되셨으면 합니다.

 


 

Puppet  Environments

  Production, QA, Development 같은 다양한 환경에서 Puppet으로 자원을 관리하고자 , Environment Puppet Agent들을 그룹으로 나눠서 관리할 있음.

  Master Server Environment별로 독립적인 Main manifest와 module paths 제공 가능 .

  물론 Puppet Master 분리하여 Agent 독립적으로 관리할 있지만, Environment 통해서 보다 유연하게 관리)

  Agent Node Environment 할당하기 위해서  Agent config 파일을 사용하여 Environment 지정하거나,  혹은 ENC 사용(External node classifier) 있음.

 

 

 

 

< Default Production Environment 적용 >

 

 

 

< Production Development Environment 적용 >

 

 

Puppet  Master에서 Environments 구성

  Environment는 directory로 구분되며, 몇 가지 규약이 있음 .

    - Directory의 이름이 environment의 이름이 됨.

    - puppet master서버의 environmentpath에 존재해야 하며, 일반적으로 $codedir/environment 를 사용.

       * default로 codedir/etc/puppetlabs/code Directory.

    - environment에는 modules directory를 포함할 수 있으며, 이 경우에는 해당 경로는 environment의 default modulepath의 일부가 된다.

   - manifest directory를 포함할 수 있으며,  그 디렉토리가 해당 environment에 default main manifest가 됨.

   - environment에서 environment.conf 파일을 포함할 수 있으며, 이 경우에는 modulepath와 manifest를 포함한 몇 가지 설정이 override될 수 있음. 

       * 특정 environment의 directory에 위치

 

< Environment 내의 설정파일 >

 

 

다음은 environments dev, production, zigimani 디렉토리가 생성된 구성 예제임.

 

 

< environment 구성 예제 : production, dev, zigimani 라는 3개의 environment 각각 존재 >

 

 

 

Agent 설정 파일로 Environment 설정하기

  • Agent node puppet.conf 설정 파일의 agent 혹은 main config section에서 설정 가능.

 

 

 

 

Environment 존재하지 않는 경우

  •Agent node 구성되지 않는 environment 할당될 없음.

  만약 environmentpath 디렉토리에 해당 environment 존재 하지 않는 경우에는 Puppet master 해당 Catalog

     컴파일이 실패함.

  , default environment production 없는 경우에는 agent 카탈로그를 검색. (Fail 아닌 Successfully)

Posted by 네떡지기

티스토리 툴바