熱門分類
 載入中…
目錄

⚙️ Network 自動化備份與版本控制:Ansible + GitLab 實作教學

    ⚙️ 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・主題筆記

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    張貼留言

    字級