Set Theory กับการเขียน Python เพื่อ Audit Configuration

อยาก Audit Configuration ให้ง่าย ๆ หรอ ใช้ Set ช่วยสิครับ

Nopnithi Khaokaew (Game)
2 min readMar 22, 2020

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

— — — — — — — — — — — — — — — — — — — — — — — -

ฝากคอร์ส Python for Network Automation ผมด้วยครับ

— — — — — — — — — — — — — — — — — — — — — — — -

หลายปีมานี้ผมเขียน Python เพื่อ audit network configuration บ่อยมาก เช่น ตรวจสอบว่า router แต่ละตัวมี route-policy ตรงตามที่ควรจะเป็นแล้วหรือไม่ ซึ่งถ้าหากว่าไม่ ตัวโปรแกรมก็จะทำการเพิ่มหรือลบออกให้อัตโนมัติ

และผมก็ใช้ทฤษฎีเซ็ต (Set Theory) เพื่อช่วยให้งานลักษณะนี้ของผมง่ายขึ้น ลดการเขียน If statement ที่แสนวุ่นวายลงเยอะ

ตัวอย่างการ Audit VLAN บน Switch

กำหนด Set และการ Intersection

  1. Existing Set
    =
    Set ของ VLAN ที่มีอยู่แล้วใน configuration
  2. Target Set
    =
    Set ของ VLAN ที่เราต้องการให้มีใน configuration
    = บาง VLAN มีอยู่แล้ว แต่บาง VLAN ก็ยังไม่มี
  3. No Action Intersection (Existing & Target)
    =
    Intersection ระหว่าง Existing และ Target
    = VLAN ที่มีอยู่แล้ว และในอนาคตก็ยังต้องมี (ไม่ต้องทำอะไรกับมัน)

Existing — VLAN ที่มีอยู่แล้ว

  1. VLAN 1
  2. VLAN 2001
  3. VLAN 2002
  4. VLAN 2003

Target — VLAN ที่เราต้องการ

  1. VLAN 1
  2. VLAN 101
  3. VLAN 102
  4. VLAN 103
  5. VLAN 2001

ใช้ผลต่างของ Set เพื่อหาสิ่งที่ต้องทำ

  • Target - Existing = VLAN ที่เราต้อง “เพิ่ม”
  • Existing - Target = VLAN ที่เราต้อง “ลบออก”

ใช้ Python เพื่อหาคำตอบว่าผมต้องเพิ่มหรือลบ VLAN ใดบ้าง?

existing_vlans = {1, 2001, 2002, 2003}
target_vlans = {1, 101, 102, 103, 2001}
no_action_vlans = existing_vlans & target_vlans
add_vlans = target_vlans - existing_vlans
remove_vlans = existing_vlans - target_vlans

print(f'- VLAN(s) already exists: {list(no_action_vlans)}')
print(f'- VLAN(s) will be added: {list(add_vlans)}')
print(f'- VLAN(s) will be removed: {list(remove_vlans)}')

จะได้ output เป็น

- VLAN(s) already exists: [1, 2001]
- VLAN(s) will be added: [101, 102, 103]
- VLAN(s) will be removed: [2002, 2003]

หรือก็คือผมต้องเพิ่ม VLAN 101, 102 และ 103 เข้ามา และลบ VLAN 2002 กับ 2003 ออกไปเพื่อให้ได้ VLAN ตามที่ผมต้องการ

ทีนี้น่าจะพอนำไปประยุกต์ใช้ในการเขียน Python เพื่อใช้สำหรับ audit configuration ได้ง่ายขึ้นกว่าเดิมแล้วนะครับ

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

--

--

Nopnithi Khaokaew (Game)
Nopnithi Khaokaew (Game)

Written by Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 6x AWS Certified, CKA, CKAD, 2x HashiCorp Certified (Terraform, Vault), etc.