🎯 Bài học Python từ góc nhìn Automation Engineer – Thao tác với cấu trúc dữ liệu lồng nhau, điều kiện, vòng lặp và hàm
🔎 Khi dữ liệu không chỉ là con số — mà là "dữ liệu lồng nhau"
Trong tự động hóa mạng, việc lấy thông tin từ API hoặc cấu hình thiết bị (dạng JSON/YAML) là chuyện thường ngày. Những dữ liệu đó hiếm khi đơn giản, và thường là danh sách các dict, dict chứa danh sách, hoặc thậm chí... danh sách chứa dict chứa danh sách!
Ví dụ 1: List lồng Dict
if_state = ["Gi0/1", [{"state": "shutdown"}]] print(if_state[1][0]["state"]) # 👉 shutdown
Ví dụ 2: Dict lồng List lồng Dict
facts = { "csr1kv1": {"os": "ios-xe", "version": "16.09.03"}, "if_state": [{"name": "Gi0/1", "state": "shutdown"}] } print(facts["csr1kv1"]["os"]) # 👉 ios-xe print(facts["if_state"][0]["name"]) # 👉 Gi0/1
Hiểu được cách xác định vị trí (index) trong list và truy xuất khóa (key) trong dict là kỹ năng sinh tồn khi đọc dữ liệu từ API Cisco, Juniper, hoặc các công cụ như Ansible, Netmiko.
🔁 For và While – vũ khí để “duyệt và xử lý” dữ liệu tự động
Không ai muốn viết 20 dòng print() để xử lý từng phần tử. Python giúp bạn làm việc này tự động và linh hoạt.
Duyệt list với for:
vlans = [100, 200, 300] for vlan in vlans: print(vlan)
Duyệt dict lồng list:
for iface in facts["if_state"]: print(iface["name"], iface["state"])
Lặp có điều kiện với while:
interface_id = 1 while interface_id <= 4: print("Ethernet1/{}".format(interface_id)) interface_id += 1
🧠 Tư duy có điều kiện: if, elif, else
Điều kiện trong Python rất gần gũi và dễ học:
if os_version == "16.09.03": print("Running correct version") elif os_version == "15.2": print("Outdated version") else: print("Unknown version")
Bạn có thể kết hợp với and, or, in, not in, is, is not để tăng độ linh hoạt trong kiểm tra.
🔧 Viết hàm cho tự động hóa – viết một lần, dùng mãi mãi
Hàm = tái sử dụng + gọn gàng + dễ test
def issue_command(hostname, command): print(f"Connecting to {hostname}") print(f"Issuing command: {command}") issue_command("nycr1", "show version")
Hàm trả về kết quả:
def hostname_conf(name): return f"hostname {name}" print(hostname_conf("csr1kv-1"))
📚 Mini Quiz để nhớ lâu
🧠 Câu hỏi:
Giả sử bạn có:
devices = [{"hostname": "csr1kv1"}]
Lệnh nào in ra "csr1kv1"?
✅ Đáp án đúng:
print(devices[0]["hostname"])
💡 Gợi ý thực hành cho anh em mới học Python
📌 Tổng kết
✅ Nắm được cấu trúc lồng nhau để xử lý dữ liệu từ API
✅ Sử dụng if, for, while cho logic linh hoạt
✅ Viết hàm để biến công việc lặp lại thành đoạn mã tái sử dụng
✅ Đây là nền tảng cho tự động hóa mạng, dùng Python để tương tác với REST API, JSON cấu hình thiết bị, hoặc kết hợp với Ansible
📣 Bạn đang học Python để trở thành NetDevOps thực thụ? Hãy comment từ khóa "Em muốn học sâu hơn", team sẽ gửi tài liệu thực chiến và video giải thích chi tiết bằng tiếng Việt, dựa trên nội dung chuẩn CCNP DevNet và các case thực tế tại doanh nghiệp!
python automation #NetDevOps #NetworkEngineer vnpro #LậpTrìnhPython #TựĐộngHóaMạng ansible restconf #CiscoJSON devnet #VnProTraining #HọcLậpTrìnhPython
Dành cho anh em DevOps/NetDevOps/Automation mới bắt đầu học lập trình với Python, bài này sẽ mở ra một thế giới cực kỳ thực dụng trong công việc!
🔎 Khi dữ liệu không chỉ là con số — mà là "dữ liệu lồng nhau"
Trong tự động hóa mạng, việc lấy thông tin từ API hoặc cấu hình thiết bị (dạng JSON/YAML) là chuyện thường ngày. Những dữ liệu đó hiếm khi đơn giản, và thường là danh sách các dict, dict chứa danh sách, hoặc thậm chí... danh sách chứa dict chứa danh sách!
Ví dụ 1: List lồng Dict
if_state = ["Gi0/1", [{"state": "shutdown"}]] print(if_state[1][0]["state"]) # 👉 shutdown
Ví dụ 2: Dict lồng List lồng Dict
facts = { "csr1kv1": {"os": "ios-xe", "version": "16.09.03"}, "if_state": [{"name": "Gi0/1", "state": "shutdown"}] } print(facts["csr1kv1"]["os"]) # 👉 ios-xe print(facts["if_state"][0]["name"]) # 👉 Gi0/1
Hiểu được cách xác định vị trí (index) trong list và truy xuất khóa (key) trong dict là kỹ năng sinh tồn khi đọc dữ liệu từ API Cisco, Juniper, hoặc các công cụ như Ansible, Netmiko.
🔁 For và While – vũ khí để “duyệt và xử lý” dữ liệu tự động
Không ai muốn viết 20 dòng print() để xử lý từng phần tử. Python giúp bạn làm việc này tự động và linh hoạt.
Duyệt list với for:
vlans = [100, 200, 300] for vlan in vlans: print(vlan)
Duyệt dict lồng list:
for iface in facts["if_state"]: print(iface["name"], iface["state"])
Lặp có điều kiện với while:
interface_id = 1 while interface_id <= 4: print("Ethernet1/{}".format(interface_id)) interface_id += 1
🧠 Tư duy có điều kiện: if, elif, else
Điều kiện trong Python rất gần gũi và dễ học:
if os_version == "16.09.03": print("Running correct version") elif os_version == "15.2": print("Outdated version") else: print("Unknown version")
Bạn có thể kết hợp với and, or, in, not in, is, is not để tăng độ linh hoạt trong kiểm tra.
🔧 Viết hàm cho tự động hóa – viết một lần, dùng mãi mãi
Hàm = tái sử dụng + gọn gàng + dễ test
def issue_command(hostname, command): print(f"Connecting to {hostname}") print(f"Issuing command: {command}") issue_command("nycr1", "show version")
Hàm trả về kết quả:
def hostname_conf(name): return f"hostname {name}" print(hostname_conf("csr1kv-1"))
📚 Mini Quiz để nhớ lâu
🧠 Câu hỏi:
Giả sử bạn có:
devices = [{"hostname": "csr1kv1"}]
Lệnh nào in ra "csr1kv1"?
✅ Đáp án đúng:
print(devices[0]["hostname"])
💡 Gợi ý thực hành cho anh em mới học Python
- Tạo 1 dict chứa danh sách các thiết bị, mỗi thiết bị có hostname và trạng thái.
- Viết hàm kiểm tra xem thiết bị nào đang ở trạng thái "shutdown".
- Viết hàm trả về danh sách hostnames hoạt động bình thường.
📌 Tổng kết
✅ Nắm được cấu trúc lồng nhau để xử lý dữ liệu từ API
✅ Sử dụng if, for, while cho logic linh hoạt
✅ Viết hàm để biến công việc lặp lại thành đoạn mã tái sử dụng
✅ Đây là nền tảng cho tự động hóa mạng, dùng Python để tương tác với REST API, JSON cấu hình thiết bị, hoặc kết hợp với Ansible
📣 Bạn đang học Python để trở thành NetDevOps thực thụ? Hãy comment từ khóa "Em muốn học sâu hơn", team sẽ gửi tài liệu thực chiến và video giải thích chi tiết bằng tiếng Việt, dựa trên nội dung chuẩn CCNP DevNet và các case thực tế tại doanh nghiệp!
python automation #NetDevOps #NetworkEngineer vnpro #LậpTrìnhPython #TựĐộngHóaMạng ansible restconf #CiscoJSON devnet #VnProTraining #HọcLậpTrìnhPython