Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • YAML – Cấu hình "ngắn gọn mà nguy hiểm" dành cho DevOps!

    🎯 [Bài viết kỹ thuật cho cộng đồng DevOps/Automation tại Việt Nam]
    🔥 YAML – Cấu hình "ngắn gọn mà nguy hiểm" dành cho DevOps!
    Nếu bạn từng phải viết file inventory.yml cho Ansible, docker-compose.yml cho Docker, hay deployment.yaml cho Kubernetes, thì bạn đã sống cùng YAML rồi đấy! Nhưng đằng sau vẻ ngoài gọn gàng là rất nhiều điều quan trọng cần hiểu sâu hơn.
    🧠 YAML là gì? Có gì khác với JSON?

    YAML là viết tắt của YAML Ain’t Markup Language – một kiểu ngôn ngữ đánh dấu thân thiện với con người, chuyên dùng để tuần tự hóa dữ liệu (data serialization). Có thể hiểu nôm na: YAML là cách ghi lại dữ liệu dạng có cấu trúc mà con người dễ đọc, máy dễ phân tích.
    Khác với JSON:
    • YAML dùng thụt đầu dòng (indent) thay cho {} hay [].
    • Không cần dấu ngoặc kép cho key hay value.
    • Dễ đọc hơn, nhưng cực kỳ nhạy cảm với thụt dòng – chỉ cần sai 1 khoảng trắng là hỏng cả file.

    ⚙️ Cú pháp YAML cơ bản

    1. Dictionary đơn giản:

    --- inventory: csr1kv1

    Tương đương với JSON:

    { "inventory": "csr1kv1" }

    2. Danh sách (List):

    --- - GigabitEthernet1 - GigabitEthernet2

    3. Dictionary lồng nhau:

    --- inventory: device: csr1kv1: vendor: cisco

    4. Cấu trúc phức tạp hơn:

    --- inventory: device: - name: csr1kv1 version: 16.09 vendor: cisco uptime: '2 days' serial: XB96871 snmp: - name: public permission: ro - name: private permission: rw

    Lưu ý: YAML không cho phép dùng tab, bạn chỉ được dùng dấu cách (space). Tiêu chuẩn là 2 hoặc 4 khoảng trắng, nhưng tuyệt đối phải đồng nhất toàn bộ file.
    🐍 Làm việc với YAML trong Python

    Bạn có thể dễ dàng chuyển YAML thành JSON với Python và thư viện pyyaml.
    1. Đọc file YAML và load vào Python dictionary:

    import yaml with open('inventory.yml', 'r') as file: data = yaml.safe_load(file) print(type(data)) # <class 'dict'> print(data['inventory']['device'][0]['uptime']) # 2 days

    2. Chuyển sang định dạng JSON:

    import json json_output = json.dumps(data, indent=4) print(json_output)

    Tại sao dùng safe_load thay vì load?
    Vì load() có thể thực thi mã độc nếu file YAML chứa payload nguy hiểm. safe_load() là lựa chọn an toàn hơn cho hầu hết các tình huống.
    ✅ Fun Facts và Tóm lược
    • ✅ JSON hợp lệ với YAML, vì YAML là superset của JSON.
    • ✅ YAML rất phổ biến trong DevOps: Ansible, Kubernetes, CI/CD pipeline...
    • ✅ Nhưng hãy cẩn thận với khoảng trắng – đừng để một file cấu hình lỗi chỉ vì lệch indent!

    🎓 Câu hỏi kiểm tra nhanh cho dân Automation:
    Câu 1:
    Phương thức nào trong thư viện Python yaml nên dùng để tránh thực thi mã nguy hiểm từ file YAML?
    🅰️ safe_load
    Câu 2:
    YAML sau đây sẽ chuyển thành JSON như thế nào?

    --- - 100 - 200 - 300

    🅰️ [100, 200, 300]
    📌 Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ cho anh em DevOps khác cùng hiểu rõ hơn về YAML.
    👉 Sắp tới VnPro sẽ có các bài lab YAML kết hợp Ansible/Kubernetes, anh em muốn tham gia thì để lại comment nhé!
    devops yaml ansible automation vnpro python #IaC #NetCenter #NetworkAutomation #ConfigManagement

    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X