Chào mọi người trên diễn đàn,
Trong xu hướng mạng hiện đại (SDN - Software Defined Networking), việc cấu hình hay giám sát mạng bằng từng dòng lệnh CLI thủ công đang dần nhường chỗ cho Network Automation. Thay vì SSH vào từng thiết bị, chúng ta có thể giao tiếp tập trung qua Controller.
Hôm nay mình chia sẻ một bài Lab thực hành nho nhỏ nhưng rất nền tảng: Sử dụng thư viện requests của Python để khai thác và giao tiếp với API của hệ thống Network Controller APIC-EM. Bài viết này rất thích hợp cho những ai đang muốn tìm hiểu về tự động hóa các tác vụ quản trị và giám sát mạng.
1. Chuẩn Bị Môi Trường
2. Luồng Thực Hiện Cốt Lõi
Để lấy được thông tin từ APIC-EM, chúng ta không thể cứ thế gọi API là xong mà phải trải qua cơ chế xác thực hai bước:
3. Phân Tích Dữ Liệu Trả Về (JSON Response)
Nếu hợp lệ, APIC-EM sẽ trả về toàn bộ thông số các thiết bị mạng (Router, Switch...) mà nó đang quản lý. Dữ liệu này cực kỳ hữu ích cho việc làm monitoring.
Ví dụ, khi bóc tách mảng JSON, mọi người có thể lấy được các thông tin quan trọng của từng node mạng như:
4. Source Code (GitHub)
Để bài viết không bị quá dài và rối mắt, mình đã gom toàn bộ script Python (bao gồm hàm get_ticket() và hàm get_list_device()) lên kho lưu trữ GitHub.
mọi người truy cập vào link bên dưới để xem trực tiếp code hoặc clone về máy chạy thử nhé: https://github.com/D-Sea21/API_basic_test.git
(Ghi chú nhỏ: Nếu mọi người thực hành trên dải IP chuẩn của tài liệu thì nhớ đổi lại địa chỉ URL thành http://10.215.26.122/ với pass vnpro@149 như trong lab nhé ).
Khi nhận dữ liệu về, mọi người nhớ dùng hàm print(json.dumps(data, indent=4)) để cấu trúc JSON in ra terminal được căn lề rõ ràng, rất dễ đọc và debug.
Chúc mọi người thực hành mượt mà. Đang chạy code mà có đoạn nào vướng mắc hay báo lỗi cứ thả comment bên dưới, mọi người mình cùng thảo luận và fix nhé!
Trong xu hướng mạng hiện đại (SDN - Software Defined Networking), việc cấu hình hay giám sát mạng bằng từng dòng lệnh CLI thủ công đang dần nhường chỗ cho Network Automation. Thay vì SSH vào từng thiết bị, chúng ta có thể giao tiếp tập trung qua Controller.
Hôm nay mình chia sẻ một bài Lab thực hành nho nhỏ nhưng rất nền tảng: Sử dụng thư viện requests của Python để khai thác và giao tiếp với API của hệ thống Network Controller APIC-EM. Bài viết này rất thích hợp cho những ai đang muốn tìm hiểu về tự động hóa các tác vụ quản trị và giám sát mạng.
1. Chuẩn Bị Môi Trường
- Môi trường mạng: Cần có máy tính kết nối Internet và thiết lập VPN đến trung tâm (trong bài này mình dùng lab của VnPro) để có thể truy cập hệ thống APIC-EM.
- Thư viện Python: Mọi người mở CMD và chạy lệnh pip install requests để cài đặt thư viện hỗ trợ gửi HTTP requests.
- Công cụ lập trình: Dùng VS Code hoặc trình soạn thảo nào mọi người quen tay đều được. Khi code nhớ import sẵn hai thư viện requests và json.
2. Luồng Thực Hiện Cốt Lõi
Để lấy được thông tin từ APIC-EM, chúng ta không thể cứ thế gọi API là xong mà phải trải qua cơ chế xác thực hai bước:
- Bước 1: Lấy Service Ticket (Xác thực API) Chúng ta sẽ đóng gói thông tin đăng nhập (username và password) dưới dạng một object JSON và gửi qua phương thức POST lên đường dẫn API lấy ticket của server. Khi xác thực thành công, APIC-EM sẽ trả về một đoạn mã gọi là serviceTicket. Lưu ý: Ticket này có thời hạn sống nhất định (dựa trên thông số sessionTimeout, ví dụ như 21600 giây). Do đó, nó sẽ được cập nhật liên tục mỗi khi mọi người gửi yêu cầu mới, giúp đảm bảo tính bảo mật cho phiên làm việc.
- Bước 2: Truy Vấn Danh Sách Thiết Bị Sau khi lấy được ticket, chúng ta dùng chính nó làm "chìa khóa" để qua cửa. Chúng ta gọi API lấy danh sách thiết bị bằng phương thức GET, đồng thời bắt buộc phải truyền ticket vừa nhận được vào phần header với từ khóa x-auth-token.
3. Phân Tích Dữ Liệu Trả Về (JSON Response)
Nếu hợp lệ, APIC-EM sẽ trả về toàn bộ thông số các thiết bị mạng (Router, Switch...) mà nó đang quản lý. Dữ liệu này cực kỳ hữu ích cho việc làm monitoring.
Ví dụ, khi bóc tách mảng JSON, mọi người có thể lấy được các thông tin quan trọng của từng node mạng như:
- Tên thiết bị (hostname): ví dụ R1.vnpro.org.
- Địa chỉ IP quản trị (managementIpAddress): ví dụ 10.215.26.245.
- Địa chỉ MAC (macAddress) và Phiên bản phần mềm (softwareVersion).
- Đặc biệt là trạng thái kết nối: API có thể cho ta biết thiết bị có đang online hay không thông qua reachabilityStatus. Nếu thiết bị mất kết nối hoặc rớt cấu hình SNMP, nó sẽ trả về mã lỗi DEV-UNREACHED kèm mô tả chi tiết để ta biết mà khắc phục (như lỗi timeout do thiết bị phản hồi chậm).
4. Source Code (GitHub)
Để bài viết không bị quá dài và rối mắt, mình đã gom toàn bộ script Python (bao gồm hàm get_ticket() và hàm get_list_device()) lên kho lưu trữ GitHub.
mọi người truy cập vào link bên dưới để xem trực tiếp code hoặc clone về máy chạy thử nhé: https://github.com/D-Sea21/API_basic_test.git
(Ghi chú nhỏ: Nếu mọi người thực hành trên dải IP chuẩn của tài liệu thì nhớ đổi lại địa chỉ URL thành http://10.215.26.122/ với pass vnpro@149 như trong lab nhé ).
Khi nhận dữ liệu về, mọi người nhớ dùng hàm print(json.dumps(data, indent=4)) để cấu trúc JSON in ra terminal được căn lề rõ ràng, rất dễ đọc và debug.
Chúc mọi người thực hành mượt mà. Đang chạy code mà có đoạn nào vướng mắc hay báo lỗi cứ thả comment bên dưới, mọi người mình cùng thảo luận và fix nhé!