Netbox là một công cụ quản lý cấu hình mạng (NCM) mã nguồn mở giúp bạn quản lý hiệu quả cơ sở hạ tầng mạng của mình. Nó cung cấp giao diện web trực quan và API RESTful cho phép bạn tự động hóa các tác vụ quản lý.
Bài viết này hướng dẫn bạn cách sử dụng Python và Netbox API để tự động thêm thiết bị vào Netbox.
Bước 1: Cài đặt thư viện pynetbox
Thư viện pynetbox
cho phép bạn tương tác với Netbox API từ Python. Để cài đặt thư viện này, hãy sử dụng lệnh pip:
pip install pynetbox
Bước 2: Lấy API Token.
Mình không muốn viết nhiều nên các bạn xem tạm hình động ở dưới.
Bạn có thể xem hướng dẫn cho API ở đây.
Ở đây có nói rất rõ các API, vì chúng ta cần đẩy thông tin thiết bị vào Netbox nên bài viết này chúng ta chỉ quan tâm tới POST Devices thôi.
Bước 3: Khởi tạo đối tượng API
Sau khi cài đặt thư viện pynetbox
, bạn cần khởi tạo một đối tượng API để tương tác với Netbox API. Để làm điều này,bạn cần cung cấp URL của Netbox instance và token API của bạn:
import pynetbox
url = "http://192.168.100.253:8000/" # URL của Netbox instance
token = "4d050413991eeaf3a7a350a0402b3a582959d29b" # Token API của bạn
nb = pynetbox.api(url=url, token=token)
Bước 4: Xác định site_id, device_name, device_type_id và device_role_id.
site_id: Đây là ID của nơi đặt thiết bị.
device_name: Đây là tên thiết bị nên bạn có thể tự đặt.
Ví dụ:
device_name = "R1 - Core MPLS 1"
device_type_id: Dùng để phân biệt loại thiết bị, ví dụ của mình là các thiết bị thuộc Cisco C9300
device_role_id: Phân nhóm vai trò của thiết bị này là gì? Ví dụ dùng để làm Core Wan hay dùng để định tuyến MPLS.
Bước 5: Sử dụng phương thức create
để thêm thiết bị mới.
Phương thức create
của đối tượng API cho phép bạn thêm thiết bị mới vào Netbox. Để sử dụng phương thức này, bạn cần cung cấp các tham số cần thiết như tên thiết bị, loại thiết bị, vai trò thiết bị và trang web:
device_name = "R1 - Core MPLS 1" # Tên thiết bị
device_type_id = 142 # ID loại thiết bị
device_role_id = 37 # ID vai trò thiết bị
site_id = 15 # ID trang web
result = nb.dcim.devices.create(
name=device_name,
device_type=device_type_id,
device_role=device_role_id,
site=site_id,
)
print(result)
Bước 6: Chạy chương trình.
shell> python3 add.devices.py
R1 - Core MPLS 1
Và đây là kết quả.
Bước 7: Thêm nhiều thiết bị cùng lúc
Bạn có thể sử dụng vòng lặp để thêm nhiều thiết bị cùng lúc. Ví dụ sau đây sử dụng danh sách tên thiết bị để thêm từng thiết bị vào Netbox:
import pynetbox
devices = ["Router Core 01", "Router Core 02", "Router Internet VNPT", "Router Internet FPT"]
def add_device(device_name):
url = "http://192.168.100.253:8000/" # URL của Netbox instance
token = "4d050413991eeaf3a7a350a0402b3a582959d29b" # Token API của bạn
nb = pynetbox.api(url=url, token=token)
device_type_id = 142 # ID loại thiết bị
device_role_id = 37 # ID vai trò thiết bị
site_id = 15 # ID trang web
result = nb.dcim.devices.create(
name=device_name,
device_type=device_type_id,
device_role=device_role_id,
site=site_id,
)
print(f"Thêm thiết bị {device_name} thành công")
for device in devices:
add_device(device)
Hãy chạy chương trình.
shell> python3 add.devices.py
Thêm thiết bị Router Core 01 thành công
Thêm thiết bị Router Core 02 thành công
Thêm thiết bị Router Internet VNPT thành công
Thêm thiết bị Router Internet FPT thành công
Đây là kết quả.
Đoạn code này mình bổ sung thêm chức năng cập nhật.
import pynetbox
devices = ["Router Core 01", "Router Core 02", "Router Internet VNPT", "Router Internet FPT"]
def add_or_update_device(device_name):
url = "http://192.168.100.253:8000/" # URL của Netbox instance
token = "2a76ac487518d4de0b17d29cc07a98141c8665c9" # Token API của bạn
nb = pynetbox.api(url=url, token=token)
device_type_id = 142 # ID loại thiết bị
device_role_id = 37 # ID vai trò thiết bị
site_id = 15 # ID trang web
device = nb.dcim.devices.get(name=device_name)
if device is None:
# Thiết bị không tồn tại, tạo mới
result = nb.dcim.devices.create(
name=device_name,
device_type=device_type_id,
device_role=device_role_id,
site=site_id,
)
print(f"Thêm thiết bị {device_name} thành công")
else:
# Thiết bị đã tồn tại, cập nhật
data = {
"device_type": device_type_id,
"device_role": device_role_id,
"site": site_id,
}
result = device.update(data)
print(f"Cập nhật thiết bị {device_name} thành công")
for device in devices:
add_or_update_device(device)
Chạy chương trình.
shell> python3 add.devices.py
Cập nhật thiết bị Router Core 01 thành công
Cập nhật thiết bị Router Core 02 thành công
Cập nhật thiết bị Router Internet VNPT thành công
Cập nhật thiết bị Router Internet FPT thành công
Lưu ý:
- Bạn cần thay thế URL của Netbox instance và token API của bạn bằng thông tin chính xác của mình.
- Bạn cần tìm ID loại thiết bị, vai trò thiết bị và trang web phù hợp trong tài liệu Netbox.
- Bạn có thể sửa đổi mã ví dụ để phù hợp với nhu cầu cụ thể của mình.
Kết luận
Bài viết này đã hướng dẫn bạn cách sử dụng Python và Netbox API để tự động thêm thiết bị vào Netbox. Việc sử dụng Python để tự động hóa các tác vụ quản trị trong Netbox có thể giúp bạn tiết kiệm thời gian và giảm thiểu sai sót.
Tài liệu tham khảo: https://medium.com/@barsu79/how-to-populate-devices-in-netbox-with-python-6a75504614d8