Set Theory กับการเขียน Python เพื่อ Audit Configuration
อยาก Audit Configuration ให้ง่าย ๆ หรอ ใช้ Set ช่วยสิครับ
— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —
— — — — — — — — — — — — — — — — — — — — — — — -
ฝากคอร์ส Python for Network Automation ผมด้วยครับ
— — — — — — — — — — — — — — — — — — — — — — — -
หลายปีมานี้ผมเขียน Python เพื่อ audit network configuration บ่อยมาก เช่น ตรวจสอบว่า router แต่ละตัวมี route-policy ตรงตามที่ควรจะเป็นแล้วหรือไม่ ซึ่งถ้าหากว่าไม่ ตัวโปรแกรมก็จะทำการเพิ่มหรือลบออกให้อัตโนมัติ
และผมก็ใช้ทฤษฎีเซ็ต (Set Theory) เพื่อช่วยให้งานลักษณะนี้ของผมง่ายขึ้น ลดการเขียน If statement ที่แสนวุ่นวายลงเยอะ
ตัวอย่างการ Audit VLAN บน Switch
กำหนด Set และการ Intersection
- Existing Set
= Set ของ VLAN ที่มีอยู่แล้วใน configuration - Target Set
= Set ของ VLAN ที่เราต้องการให้มีใน configuration
= บาง VLAN มีอยู่แล้ว แต่บาง VLAN ก็ยังไม่มี - No Action Intersection (Existing & Target)
= Intersection ระหว่าง Existing และ Target
= VLAN ที่มีอยู่แล้ว และในอนาคตก็ยังต้องมี (ไม่ต้องทำอะไรกับมัน)
Existing — VLAN ที่มีอยู่แล้ว
- VLAN 1
- VLAN 2001
- VLAN 2002
- VLAN 2003
Target — VLAN ที่เราต้องการ
- VLAN 1
- VLAN 101
- VLAN 102
- VLAN 103
- 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)
— — — — — — — — — — — — — — —