NX-API
기존의 Python for Networker라는 주제로 포스팅하던 것을, 주제를 넓혀보고자..
Programmability for Networker로 이름을 변경하고 지속해서 시작합니다. ^^;
이번 포스팅은 Cisco의 Programmability를 지원하는 NX-API에 대한 포스팅입니다.
NX-API - Cisco Programmability
◈ NX-API
- HTTP/HTTPS의 RPC 기반의 API 기능 수행
- 'show', 'configuration', 'Linux Bash' 지원
- JSON-RPC를 지원
- Cisco Nexus 9000 platform 적용
◈ NX-API 동작
- HTTP/HTTPS로 전송되며, 해당 CLI는 HTTP/HTTPS의 POST body로 encode된다.
- Nexus 장비에서는 이러한 NX-API를 위해서 Nginx HTTP Server를 사용한다.
- Nginx와 모든 하위 Process는 Linux cgroup의 메모리 제한 값을 초과하면, Process가 재시작 되도록 하여, 본 장비 리소스를 보호한다.
◈ NX-API 명령 포맷
- Nexus 9000의 향상된 NX-OS CLI
- XML 출력,JSON 형태 출력
◈ NX-API 기능 활성화
- NX-API feature 활성화 필요 ( Default : Disable)
NX-OS#(config)# feature nxapi |
◈ NX-API Sandbox
- HTTP/HTTPS를 사용하여, 사용자가 Cli 명령을 특정 Command Type, Output Type을 지정해서 사용할 수 있는 웹기반 인터페이스
- NX-API Feature를 활성화 후, nxapi sandbox를 사용 할 수 있다.
NX-OS#(config)# nxapi sandbox |
- 접속 방법 : Web 브라우저에서 http://mgmt-ip 로 접속
◈ NX-API Request Element
○ Input
- 1개 이상의 명령어 입력 가능. (단, 동일한 Messaage Type이어야 함 : Show, Configuration, bash)
- Show와 Conf의 경우에는 다수의 명령어 입력 시, ';'(세미콜론)을 사용하며, 명령어와 세미콜론 사이는 1칸의 공백 필요
ex) show interface brief ; show version or interface eth2/1 ; switchport ; no shut
- Bash의 경우에는 다수의 명령어 입력 시, 마찬가지로 ';'(세미콜론)을 사용하지만, 명령어와 세미콜론 사이의 공백이 없어야 함.
ex) cd /bootflash;mkdir zigi_dir
○ Type
- cli_show : 구조화 된 결과값을 나타냄. 만약 XML을 지원하지 않는 명령 입력 시에는 error 메시지를 리턴
즉, 특정 명령어에 대해서만 구조화된 결과값을 나타내도록 지원.
- cli_show_ascii : ASCII 값으로 결과 출력.
- cli_conf : Configuraion 명령 사용 시 사용
- bash : Bash 명령 사용 ( NX-API에서는 non-interacitve Bash 명령을 지원)
* 최대 10개의 Show 명령을 동시에 지원. (10개 이상 입력 시, 11번째부터는 무시 됨.)
* ASCII의 경우에는 '|' (Pipe) 가 지원 됨. (XML의 경우에는 미 지원)
○ output_format
- XML / JSON 포맷을 지원
- N9K는 XML을 지원하며, JSON은 XML을 전환하여 결과 값을 만든다.
◈ NX-API Response Element
○ version
- NX-API Version (현재 1.0 / dCloud에서는 0.1 Version 지원)
○ type
- 명령 실행 타입 (cli_show, cli_show_ascii, cli_conf, bash)
○ sid
- 응답에 대한 Session ID.
- 응답메시지가 chunked인 경우에만 유효함.
○ outputs
- 요청한 전체 명령에 대한 출력 값을 감싸고 있는 Tag
- cli_show, cli_show_ascii 의 경우에 다수의 명령어를 요청한 경우 각 개별 명령은 output tag가 붙는다.
○ output
- 요청한 개별 명령에 대한 출력 값을 감싸고 있는 Tag
○ intput
- 요청한 명령어
○ body
- 요청한 명령어에 대한 응답
○ msg
- 요청에 대한 응답의 처리 결과 메세지. code Element의 내용으로 확인 가능.
○ code
- 요청에 의한 응답의 결과에 따른 Code번호.
- NX-API에서는 표준 HTTP의 Status Code값을 사용한다.
[ NX-API SandBox 실행화면 ]
◈ NX-API Sandbox 화면 구성
○ 상단 화면
- 실행행하고자 하는 Command 와 Meassage format, Command Type을 지정할 수 있다.
- POST 버튼은 위에서 지정한 Command와 Format/Type에 맞춰서 Request 코드가 만들어면서, Request가 이뤄진다.
○ 하단 좌측
- 상단화면에서 지정한 내용에 따라서 만들어진 Request 내용을 출력
- Python 버튼을 누르면, 해당 Request를 사용 할 수 있는 Python 코드로 생성 됨.
○ 하단 우측
- 상단화면에서 요청한 내용에 대한 결과 값을 출력.
NX-API Sandbox 실행 예제 - JSON - cli_show
NX-API Sandbox 실행 예제 - JSON - bash
NX-API Sandbox 실행 예제 - Request를 Python Code로 변경
◈ NX-API Response Code
NX-API Response |
Code |
Message |
SUCCESS |
200 |
Success. |
CUST_OUTPUT_PIPED |
204 |
Output is piped elsewhere due to request. |
BASH_CMD_ERR |
400 |
Input Bash command error. |
CHUNK_ALLOW_ONE_CMD_ERR |
400 |
Chunking only allowed to one command. |
CLI_CLIENT_ERR |
400 |
CLI execution error. |
CLI_CMD_ERR |
400 |
Input CLI command error. |
IN_MSG_ERR |
400 |
Request message is invalid. |
NO_INPUT_CMD_ERR |
400 |
No input command. |
PERM_DENY_ERR |
401 |
Permission denied. |
CONF_NOT_ALLOW_SHOW_ERR |
405 |
Configuration mode does not allow show . |
SHOW_NOT_ALLOW_CONF_ERR |
405 |
Show mode does not allow configuration. |
EXCEED_MAX_SHOW_ERR |
413 |
Maximum number of consecutive show |
MSG_SIZE_LARGE_ERR |
413 |
Response size too large. |
BACKEND_ERR |
500 |
Backend processing error. |
FILE_OPER_ERR |
500 |
System internal file operation error. |
LIBXML_NS_ERR |
500 |
System internal LIBXML NS error. |
LIBXML_PARSE_ERR |
500 |
System internal LIBXML parse error. |
LIBXML_PATH_CTX_ERR |
500 |
System internal LIBXML path context error. |
MEM_ALLOC_ERR |
500 |
System internal memory allocation error. |
USER_NOT_FOUND_ERR |
500 |
User not found from input or cache. |
XML_TO_JSON_CONVERT_ERR |
500 |
XML to JSON conversion error. |
BASH_CMD_NOT_SUPPORTED_ERR |
501 |
Bash command not supported. |
CHUNK_ALLOW_XML_ONLY_ERR |
501 |
Chunking allows only XML output. |
JSON_NOT_SUPPORTED_ERR |
501 |
JSON not supported due to large amount of output. |
MSG_TYPE_UNSUPPORTED_ERR |
501 |
Message type not supported. |
PIPE_OUTPUT_NOT_SUPPORTED_ERR |
501 |
Pipe operation not supported. |
PIPE_XML_NOT_ALLOWED_IN_INPUT |
501 |
Pipe XML is not allowed in input. |
RESP_BIG_JSON_NOT_ALLOWED_ERR |
501 |
Response has large amount of output. JSON not |
STRUCT_NOT_SUPPORTED_ERR |
501 |
Structured output unsupported. |
※ 참고
○ http://keepingitclassless.net/2014/02/cisco-aci-nexus-9000-nxapi/