Home » GitOps for Networking: Ansible, Terraform, Nornir, NAPALM และ Network as Code
GitOps for Networking: Ansible, Terraform, Nornir, NAPALM และ Network as Code
GitOps for Networking: Ansible, Terraform, Nornir, NAPALM และ Network as Code
GitOps for Networking นำหลักการ DevOps มาใช้กับ network infrastructure Ansible เป็น agentless automation tool ที่ popular ที่สุดสำหรับ network automation, Terraform ให้ Infrastructure as Code สำหรับ provisioning, Nornir เป็น Python framework สำหรับ network automation ที่ยืดหยุ่น, NAPALM ให้ unified API สำหรับ multi-vendor network devices และ Network as Code เก็บ network configuration ใน Git repository เป็น single source of truth
Network engineers ส่วนใหญ่ยัง configure devices ด้วยมือผ่าน CLI: SSH เข้า router → พิมพ์ commands → ไม่มี version control, ไม่มี audit trail, ไม่มี rollback ง่ายๆ, configuration drift ระหว่าง devices GitOps แก้: config อยู่ใน Git → review ผ่าน PR → automated deployment → consistent, auditable, repeatable
GitOps Workflow
| Step |
Action |
Tool |
| 1. Define |
เขียน desired state ใน code (YAML, HCL, Jinja2 templates) |
Text editor, IDE |
| 2. Version Control |
Commit ไป Git repository |
Git, GitHub, GitLab |
| 3. Review |
Pull Request → peer review → approve |
GitHub PR, GitLab MR |
| 4. CI/CD Pipeline |
Automated testing (syntax, lint, dry-run) |
GitHub Actions, Jenkins, GitLab CI |
| 5. Deploy |
Apply configuration ไปยัง network devices |
Ansible, Nornir, Terraform |
| 6. Validate |
ตรวจสอบว่า actual state = desired state |
NAPALM validate, pyATS, Batfish |
| 7. Monitor |
Detect drift → alert → auto-remediate |
NAPALM compliance, custom scripts |
Ansible for Networking
| Feature |
รายละเอียด |
| คืออะไร |
Agentless automation — connect via SSH/NETCONF → push config (no agent on device) |
| Playbooks |
YAML files ที่กำหนด tasks → declarative automation |
| Modules |
cisco.ios, cisco.nxos, arista.eos, juniper.junos, vyos — vendor-specific modules |
| Inventory |
Define devices ใน inventory file (INI/YAML) → group by site/role/vendor |
| Jinja2 Templates |
Template config files → render per-device config จาก variables |
| Roles |
Reusable automation units (e.g., role: base_config, role: ospf, role: bgp) |
| AWX/Tower |
Web UI + RBAC + scheduling + credential management สำหรับ Ansible |
Terraform for Networking
| Feature |
รายละเอียด |
| คืออะไร |
Infrastructure as Code — declarative (define desired state → Terraform makes it happen) |
| HCL |
HashiCorp Configuration Language — human-readable config format |
| Providers |
AWS VPC/SG, Azure NSG, GCP Firewall, Palo Alto, Fortinet, Cisco ACI |
| State File |
Track current state → plan diff → apply only changes (idempotent) |
| Plan |
terraform plan → preview changes before apply (dry-run) |
| Best For |
Cloud networking (VPC, subnets, security groups, load balancers, firewalls) |
| Limitation |
ไม่เหมาะกับ CLI-based devices (better for API-driven platforms) |
Nornir
| Feature |
รายละเอียด |
| คืออะไร |
Python automation framework — ใช้ Python code แทน YAML (more flexibility) |
| Inventory |
YAML-based inventory (hosts, groups, defaults) — similar to Ansible |
| Plugins |
nornir_netmiko (SSH), nornir_napalm (multi-vendor), nornir_scrapli |
| Concurrency |
Multi-threaded execution — run tasks on many devices simultaneously |
| vs Ansible |
Ansible = YAML (simpler) | Nornir = Python (more control, better for complex logic) |
| Use Cases |
Complex automation ที่ต้อง conditional logic, data processing, API integration |
NAPALM
| Feature |
รายละเอียด |
| คืออะไร |
Network Automation and Programmability Abstraction Layer with Multivendor support |
| Unified API |
Same Python API สำหรับ Cisco IOS, NX-OS, Junos, EOS, IOS-XR |
| Get Facts |
get_facts(), get_interfaces(), get_bgp_neighbors() — structured data จากทุก vendor |
| Config Management |
load_merge_candidate(), load_replace_candidate() → compare_config() → commit_config() |
| Validation |
compliance_report() — ตรวจสอบว่า device config ตรง desired state หรือไม่ |
| Rollback |
rollback() — กลับ config ก่อนหน้า (ถ้า commit ผิด) |
Network as Code Best Practices
| Practice |
รายละเอียด |
| Git as Source of Truth |
ทุก config อยู่ใน Git — ไม่มี manual changes บน device โดยตรง |
| Branch Strategy |
main = production, develop = staging, feature branches สำหรับ changes |
| Code Review |
ทุก change ต้อง PR + review ก่อน merge (peer review = fewer mistakes) |
| CI/CD Testing |
Lint YAML/Jinja2, dry-run (check mode), Batfish simulation, unit tests |
| Idempotency |
Run automation ซ้ำกี่ครั้งก็ได้ ผลลัพธ์เหมือนเดิม (no side effects) |
| Secrets Management |
ใช้ Ansible Vault, HashiCorp Vault, environment variables — ไม่ hardcode passwords |
| Drift Detection |
Scheduled compliance checks → alert ถ้า device config ≠ Git config |
ทิ้งท้าย: Network as Code = Reliable, Repeatable, Auditable
GitOps for Networking Workflow: define code → Git → PR review → CI/CD test → deploy → validate → monitor Ansible: agentless, YAML playbooks, Jinja2 templates, vendor modules, AWX (most popular) Terraform: IaC for cloud networking (VPC, SG, firewalls), HCL, state management, plan before apply Nornir: Python-based framework, multi-threaded, better for complex logic vs Ansible NAPALM: unified multi-vendor API, config management, validation, rollback Best Practice: Git as source of truth, PR review, CI/CD testing, idempotency, secrets management Key: treat network config like software code — version controlled, tested, reviewed, automated
อ่านเพิ่มเติมเกี่ยวกับ eBPF Networking XDP TC Cilium และ Network Monitoring SNMP NetFlow Telemetry ที่ siamlancard.com หรือจาก icafeforex.com และ siam2r.com