Hướng dẫn tabulate python example - lập bảng ví dụ về python

LAB 20: Dùng Python lấy danh sách thông tin các thiết bị trong fabric SD-WAN của Cisco

I. Mô tả:

  • Học viên thực hiện kết nối đến Sandbox SD-WAN (vManage), viết code để lấy danh sách thông tin các thiết bị bằng ngôn ngữ Python.
  • Máy PC phải đáp ứng yêu cầu đã cài đặt trạm làm việc cho developer.

II. Yêu cầu kĩ thuật:

  • Cài đặt thư viện requests, tabulate, click trên máy tính.
  • Kết nối đến Sandbox SD-WAN (https://sandboxsdwan.cisco.com:8443/)
  • Viết code bằng Python thực hiện yêu cầu:
  • Đăng nhập và xác thực
  • GET requests, POST requests
  • Lấy danh sách thông tin các thiết bị trong Controller

III. Các bước thực hiện:

Bước 1: Cài đặt thư viện

- Bấm tổ hợp phím Win+R để chạy cmd

- Trong màn hình cmd gõ : python –m pip install requests tabulate click –user

Hướng dẫn tabulate python example - lập bảng ví dụ về python

            Bước 2: Viết code đăng nhập và xác thựcBước 2: Viết code đăng nhập và xác thực

Import các thư viện cần thiết và tắt cảnh báo

import requests

import sys

import json

import click

from tabulate import tabulate

import SD_WAN_INFO

requests.packages.urllib3.disable_warnings()

Tạo file SD_WAN_INFO.py chứa thông tin kết nối và thông tin đăng nhập, ghi các thông tin như hình dưới, sau đó lưu lại và đóng file

Trở về file trước, ta khai báo các thông tin của Sandbox SD-WAN, các biến SDWAN_IP,USERNAME,PASSWORD sẽ lấy giá trị từ file SD_WAN.py đã tạo ở trên.

SDWAN_IP = SD_WAN_INFO.IP

SDWAN_USERNAME = SD_WAN_INFO.USERNAME

SDWAN_PASSWORD = SD_WAN_INFO.PASSWORD

Tiếp theo chúng ta sẽ tạo một class rest_api_lib và tạo contructor __init__ của class (lưu ý ngoài các tham số truyền vào chúng ta luôn phải thêm self đại diện cho instance của class và với nó chúng ta có thể kết nối đến các thuộc tính và phương thức của class đó.

class rest_api_lib:

      def __init__(self, vmanage_ip, username, password):

            self.vmanage_ip = vmanage_ip

            self.session = {}

            self.login(self.vmanage_ip, username, password)

Định nghĩa phương thức login và khai báo login_url

      def login(self, vmanage_ip, username, password):

            """Login to vmanage"""

            base_url_str = 'https://%s:8443/'%vmanage_ip

            login_action = '/j_security_check'

            login_url = base_url_str + login_action

Khai báo login_data chứa username và password để gửi lên xác thực

            login_data = {'j_username' : username, 'j_password' : password}

Chúng ta sẽ dùng phương thức session từ thư viện request để tạo một phiên làm việc mới, trong phiên làm việc vừa tạo đó gửi yêu cầu post để đưa thông tin đến login_url.

            sess = requests.session()       

            login_response = sess.post(url=login_url, data=login_data, verify=False)

Để đảm bảo xác thực thành công chúng ta sẽ kiểm tra nội dung trả về và nếu nội dung trả về có tag

thì nghĩa là đăng nhập thất bại. Nếu muốn xem đăng nhập thất bại thì nội dung trả về sẽ như thì sửa lại mật khẩu và bỏ dấu # đầu dòng của đoạn code dưới này.' in login_response.content:

            print ("Login Failed")

            #print(login_response.content)

            sys.exit(0)

Gắn session sess vào làm giá trị của thuộc tính session của class

            self.session[vmanage_ip] = sess

Bước 3: Viết code GET requests

Định nghĩa phương thức get_request, trong đây chúng ta sẽ phải tạo một url mới, tham số api truyền vào tùy mục đích sử dụng nên chúng ta sẽ dùng %s để url có thể thay đổi dễ dàng. Ta sẽ dùng tiếp session vừa được xác thực thành công để gọi các API tiếp theo mà không cần phải gửi kèm theo username, password; get để gửi yêu cầu lên server và nhận lời đáp lại, sau đó gắn thông tin từ lời đáp lại vào biến response. Để lấy dữ liệu, ta sẽ dùng response.content gắn vào biến data và đây cũng là giá trị trả về của phương thức get_request này.

& nbsp; & nbsp; & nbsp; & nbsp; def get_request (self, api):

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; url = "https: //%s: 8443/dataservice/%s"%(self.vmanage_ip, api)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; phản hồi = self.session [self.vmanage_ip] .get (url, xác minh = sai)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Dữ liệu = Phản hồi.Content

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Trả về dữ liệu

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BướC 4: Viết Code Post yêu cầu

Phương thức Post_Request nÀy tương tự với phương thức get_request ở trên nh ưng khát Vàó thênm Tham Số Đầu Vào là tải trọng Và Tiêu đề. Tải trọng là nơi sẽ chứa đựng cac Tiêu đề Khai Báio Kiểu Nội Dung Là Ứng dụng/JSON.

& nbsp; & nbsp; & nbsp; def post_request (self, api, tải trọng, tiêu đề = {'content-type': 'application/json'}):

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; url = "https: //%s: 8443/dataservice/%s"%(self.vmanage_ip, api)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tải trọng = json.dumps (tải trọng)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; in (tải trọng)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Trả lời = self.session [self.vmanage_ip] .post (url = url, data = tải trọng, tiêu đề = tiêu đề, xác minh = false)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; data = respons.json ()

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Trả về dữ liệu

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BướC 5: Viết Code lấy Danh Sách Thôn tin

Ví dụ như của class là sdwanp và truyền Các Thamam sdwan_ip, sdwan_username, sdwan_password

sdwanp = rest_api_lib (sdwan_ip, sdwan_username, sdwan_password)

Khi muốn cấu hÌnh công trang trí

@click.group()

def cli ():

& nbsp; & nbsp; & nbsp; đi qua

TạO Trang trí @click.Command () Click.echo () Dùn Để trong ra Màn Hình. JSON.LOADS ()

@click.command()

DEF DEMELD_LIST ():

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "" "Truy xuất và trả lại danh sách thiết bị mạng." ""

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; click.echo ("Truy xuất các thiết bị.")

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Trả lời = json.loads (sdwanp.get_request ('thiết bị')))

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Các mục = Phản hồi ['Dữ liệu']

Khai BÁO TIÊU CHUẨN Để HIểN thị Trong Bảng Và Khai BÁO BẢNG DANH SÁCH. Tạo vngng lặp cứ mỗi mục trong biến các mục chứa dữ liệu nào thì sẽ ôn Tiếp Theo Chún Ta Sẽ Dùng Hàm Tabulation Để Xuất Ra Màn Hình

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tiêu đề = ["Tên máy chủ", "Loại thiết bị", "ID thiết bị", "Hệ thống IP", "ID trang web", "Phiên bản", "Mô hình thiết bị"]]]

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bảng = list ()

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Đối với mục trong các mặt hàng:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; tr = [item ['tên máy chủ'], mục ['loại thiết bị'], mục ['uuid'], item ['system-it '], Mục [' Mô hình thiết bị ']]]

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Bảng.Append (tr)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; thử:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; click.echo (Tabulation (bảng, tiêu đề, bảng

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ngoại trừ UnicodeEncodeError:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; click.echo (Tabulation (bảng, tiêu đề, bảngfmt = "lưới")))

Cuối Cùng Là thênm Command Device_list VÀO CLI ()

cli.add_command(device_list)

Nếu __name__ == "__main__":

& nbsp; & nbsp; & nbsp; cli ()

Để Chạy chương trình nào, chún ta sẽ vào

Kết quả:

Để Ý Phần Sử dụng Có Hướng Dẫn Cách Sử Dụng click, hiện tại lệnh hiện bạn lÀ.p

Kết quả là chún ta lấy được Danh sách các thiết bị hiện đó là trong mạng vải sd-wan.


Thông Tin Khác

  • »& Nbsp; phòng thí nghiệm 18: thực thi Chính Sách Qos Trong Cisco Sd-Wan (08.04.2021)(08.04.2021)
  • "(08.04.2021)
  • " (05.04.2021)(05.04.2021)
  • »& NBSP; API dựa trên REST (05.04.2021)(05.04.2021)
  • »& Nbsp;(02.04.2021)
  • » Setup WSL 1 (02.04.2021)(02.04.2021)
  • » GIỚI THIỆU MÔN HỌC ADVANCED ROUTING (31.03.2021)(31.03.2021)
  • » CHƯƠNG 2: CHU TRÌNH PHÁT TRIỂN PHẦN MỀM (30.03.2021)(30.03.2021)