⚙️ Network 自動化備份與版本控制:Ansible + GitLab 實作教學
傳統網管常手動登入每台設備進行備份或更新設定,不僅耗時也容易遺漏。 本文示範如何使用 Ansible 自動化取得設定檔, 並透過 GitLab 進行版本控制與自動備份, 讓整個網路環境的維護更高效、安全且可追溯。
📦 一、實作架構概覽
- Ansible:集中化執行 SSH/CLI 自動操作。
- GitLab:儲存設定檔版本與自動觸發 CI/CD。
- Network Devices:支援 SSH(Cisco、Juniper、FortiGate、Linux)。
流程示意:
[Ansible Control Node]
│
├─→ SSH → [Router / Switch / Firewall]
│
└─→ 收集 config → 提交至 GitLab → 自動版本控管
🧩 二、環境準備
# 安裝 Ansible 與 Git
sudo apt update
sudo apt install -y ansible git
# 建立工作目錄
mkdir ~/network-backup && cd ~/network-backup
# 初始化 Git 專案
git init
git remote add origin git@gitlab.com:youruser/network-backup.git
目錄結構建議:
network-backup/
├── inventory.yaml
├── playbooks/
│ ├── backup_cisco.yaml
│ ├── backup_juniper.yaml
│ └── backup_linux.yaml
└── configs/
├── cisco/
├── juniper/
└── linux/
🔧 三、建立 Ansible Inventory
# inventory.yaml
all:
children:
routers:
hosts:
R1:
ansible_host: 192.168.10.1
ansible_user: admin
ansible_password: yourpass
switches:
hosts:
SW1:
ansible_host: 192.168.20.1
ansible_user: admin
ansible_password: yourpass
🧠 四、建立備份 Playbook(以 Cisco 為例)
# playbooks/backup_cisco.yaml
- name: Backup Cisco configuration
hosts: routers
gather_facts: no
connection: network_cli
tasks:
- name: Retrieve running-config
ios_command:
commands: show running-config
register: config_output
- name: Save configuration to file
copy:
content: "{{ config_output.stdout[0] }}"
dest: "configs/cisco/{{ inventory_hostname }}_{{ ansible_date_time.date }}.cfg"
執行指令:
ansible-playbook -i inventory.yaml playbooks/backup_cisco.yaml
📁 五、GitLab 自動提交備份結果
# 自動提交至 GitLab
cd ~/network-backup
git add configs/
git commit -m "Auto backup $(date '+%Y-%m-%d %H:%M')"
git push origin main
自動化(crontab 定時):
crontab -e
0 2 * * * cd /home/admin/network-backup && ansible-playbook -i inventory.yaml playbooks/backup_cisco.yaml && git add . && git commit -m "Auto backup $(date '+\%F')" && git push origin main
🚀 六、GitLab CI/CD 自動觸發(選用)
# .gitlab-ci.yml
stages:
- backup
backup_job:
stage: backup
script:
- ansible-playbook -i inventory.yaml playbooks/backup_cisco.yaml
- git add .
- git commit -m "Auto backup from CI $(date)"
- git push origin main
此設定可在 GitLab Pipeline 內自動執行備份並上傳結果。
🛡 七、版本回溯與差異分析
# 查看版本紀錄
git log --oneline
# 比較兩版本差異
git diff HEAD~1 HEAD -- configs/cisco/R1_2025-10-31.cfg
可快速比對網路設定變動,確保異動符合變更控制流程。
🧭 行動清單(Checklist)
✅ 建立 Ansible 環境並設定 inventory
✅ 撰寫多廠牌備份 playbook
✅ 啟用 GitLab 版本控制並自動提交
✅ 定期執行 crontab 或 GitLab CI 自動備份
✅ 定期檢查版本差異以防誤改設定
📘 結語
將 Ansible 與 GitLab 結合,能讓網路管理走向「基礎設施即程式碼(IaC)」, 不僅減少人為錯誤,也能用 DevOps 思維追蹤每次變更。 無論是企業內部網管或系統整合案,這套方式都能顯著提升維運品質。
🔗 延伸閱讀
— WWFandy・主題筆記
沒有留言:
張貼留言