Ansible备份网络设备配置

1. Ansible Inventory 文件 (inventory.yml)

这个 inventory.yml 文件定义了你的所有网络设备,并按厂商分类:

all:
  children:
    arista_eos:
      hosts:
        arista-switch1:
          ansible_host: 192.168.10.1
          ansible_network_os: arista.eos.eos
          ansible_user: admin
          ansible_password: password

    cisco_aci:
      hosts:
        cisco-apic1:
          ansible_host: 192.168.20.1
          ansible_network_os: cisco.aci.aci
          ansible_user: admin
          ansible_password: password

    cisco_asa:
      hosts:
        cisco-firewall1:
          ansible_host: 192.168.30.1
          ansible_network_os: cisco.asa.asa
          ansible_user: admin
          ansible_password: password

    cisco_dnac:
      hosts:
        cisco-dnac1:
          ansible_host: 192.168.40.1
          ansible_network_os: cisco.dnac.dnac
          ansible_user: admin
          ansible_password: password

    cisco_intersight:
      hosts:
        cisco-intersight1:
          ansible_host: 192.168.50.1
          ansible_network_os: cisco.intersight.intersight
          ansible_user: admin
          ansible_password: password

    cisco_ios:
      hosts:
        cisco-router1:
          ansible_host: 192.168.60.1
          ansible_network_os: cisco.ios.ios
          ansible_user: admin
          ansible_password: password

    cisco_iosxr:
      hosts:
        cisco-xr1:
          ansible_host: 192.168.70.1
          ansible_network_os: cisco.iosxr.iosxr
          ansible_user: admin
          ansible_password: password

    cisco_ise:
      hosts:
        cisco-ise1:
          ansible_host: 192.168.80.1
          ansible_network_os: cisco.ise.ise
          ansible_user: admin
          ansible_password: password

    cisco_meraki:
      hosts:
        cisco-meraki1:
          ansible_host: 192.168.90.1
          ansible_network_os: cisco.meraki.meraki
          ansible_user: admin
          ansible_password: password

    cisco_mso:
      hosts:
        cisco-mso1:
          ansible_host: 192.168.100.1
          ansible_network_os: cisco.mso.mso
          ansible_user: admin
          ansible_password: password

    cisco_nxos:
      hosts:
        cisco-nexus1:
          ansible_host: 192.168.110.1
          ansible_network_os: cisco.nxos.nxos
          ansible_user: admin
          ansible_password: password

    cisco_ucs:
      hosts:
        cisco-ucs1:
          ansible_host: 192.168.120.1
          ansible_network_os: cisco.ucs.ucs
          ansible_user: admin
          ansible_password: password

    community_network:
      hosts:
        generic-network1:
          ansible_host: 192.168.130.1
          ansible_network_os: community.network.generic
          ansible_user: admin
          ansible_password: password

    f5_networks:
      hosts:
        f5-lb1:
          ansible_host: 192.168.140.1
          ansible_network_os: f5networks.f5_modules.bigip
          ansible_user: admin
          ansible_password: password

    fortinet_fortimanager:
      hosts:
        fortimanager1:
          ansible_host: 192.168.150.1
          ansible_network_os: fortinet.fortimanager.fortimanager
          ansible_user: admin
          ansible_password: password

    fortinet_fortios:
      hosts:
        fortigate1:
          ansible_host: 192.168.160.1
          ansible_network_os: fortinet.fortios.fortios
          ansible_user: admin
          ansible_password: password

    vyos:
      hosts:
        vyos-router1:
          ansible_host: 192.168.170.1
          ansible_network_os: vyos.vyos.vyos
          ansible_user: admin
          ansible_password: password

    mikrotik:
      hosts:
        mikrotik1:
          ansible_host: 192.168.180.1
          ansible_network_os: community.routeros.routeros
          ansible_user: admin
          ansible_password: password

2. Ansible Playbook (backup-config.yml)


– name: Backup Network Devices Configuration
hosts: all
gather_facts: no
tasks:

# ========================= Arista EOS =========================
– name: Backup Arista EOS
arista.eos.eos_config:
backup: yes
when: ansible_network_os == “arista.eos.eos”
register: eos_backup

# ========================= Cisco ACI =========================
– name: Backup Cisco ACI
cisco.aci.aci_config_snapshot:
state: present
validate_certs: no
output_path: “/backup/network/{{ inventory_hostname }}_backup.json”
when: ansible_network_os == “cisco.aci.aci”

# ========================= Cisco ASA =========================
– name: Backup Cisco ASA
cisco.asa.asa_config:
backup: yes
when: ansible_network_os == “cisco.asa.asa”
register: asa_backup

# ========================= Cisco DNA Center =========================
– name: Backup Cisco DNAC
cisco.dnac.configuration_archive:
state: present
when: ansible_network_os == “cisco.dnac.dnac”

# ========================= Cisco Intersight =========================
– name: Backup Cisco Intersight
cisco.intersight.intersight_backup:
state: present
when: ansible_network_os == “cisco.intersight.intersight”

# ========================= Cisco IOS =========================
– name: Backup Cisco IOS
cisco.ios.ios_config:
backup: yes
when: ansible_network_os == “cisco.ios.ios”
register: ios_backup

# ========================= Cisco IOS-XR =========================
– name: Backup Cisco IOS-XR
cisco.iosxr.iosxr_config:
backup: yes
when: ansible_network_os == “cisco.iosxr.iosxr”
register: iosxr_backup

# ========================= Cisco ISE =========================
– name: Backup Cisco ISE
cisco.ise.ise_backup:
state: present
when: ansible_network_os == “cisco.ise.ise”

# ========================= Cisco Meraki =========================
– name: Backup Cisco Meraki
cisco.meraki.meraki_config_backup:
state: present
when: ansible_network_os == “cisco.meraki.meraki”

# ========================= Cisco MSO =========================
– name: Backup Cisco MSO
cisco.mso.mso_backup:
state: present
when: ansible_network_os == “cisco.mso.mso”

# ========================= Cisco NX-OS =========================
– name: Backup Cisco NX-OS
cisco.nxos.nxos_config:
backup: yes
when: ansible_network_os == “cisco.nxos.nxos”
register: nxos_backup

# ========================= Cisco UCS =========================
– name: Backup Cisco UCS
cisco.ucs.ucs_backup:
state: present
when: ansible_network_os == “cisco.ucs.ucs”

# ========================= Community Network =========================
– name: Backup Community Network Devices
community.network.generic_command:
command: “show running-config”
when: ansible_network_os == “community.network.generic”
register: generic_backup

# ========================= F5 Networks =========================
– name: Backup F5 Load Balancer
f5networks.f5_modules.bigip_config:
backup: yes
when: ansible_network_os == “f5networks.f5_modules.bigip”
register: f5_backup

# ========================= Fortinet FortiManager =========================
– name: Backup Fortinet FortiManager
fortinet.fortimanager.fmgr_config_backup:
state: present
when: ansible_network_os == “fortinet.fortimanager.fortimanager”

# ========================= Fortinet FortiOS =========================
– name: Backup Fortinet FortiOS
fortinet.fortios.fortios_config:
backup: yes
when: ansible_network_os == “fortinet.fortios.fortios”
register: fortios_backup

# ========================= VyOS =========================
– name: Backup VyOS Router
vyos.vyos.vyos_config:
backup: yes
when: ansible_network_os == “vyos.vyos.vyos”
register: vyos_backup

# ========================= MikroTik RouterOS =========================
– name: Backup MikroTik RouterOS
community.routeros.routeros_command:
commands: “/export”
when: ansible_network_os == “community.routeros.routeros”
register: mikrotik_backup

# ========================= 统一存储备份文件 =========================
– name: Save Backups Locally
copy:
content: “{{
ios_backup.backup_path |
default(nxos_backup.backup_path) |
default(eos_backup.backup_path) |
default(asa_backup.backup_path) |
default(iosxr_backup.backup_path) |
default(fortios_backup.backup_path) |
default(mikrotik_backup.stdout[0]) |
default(generic_backup.stdout[0]) |
default(vyos_backup.backup_path) |
default(f5_backup.backup_path) |
default(”)
}}”
dest: “/backup/network/{{ inventory_hostname }}_backup_{{ ansible_date_time.iso8601 }}.txt”



3. 执行备份

运行:

ansible-playbook -i inventory.yml backup-config.yml

4. 技术文档

4.1 目标

本方案使用 Ansible 备份多个厂商的网络设备配置,涵盖 Cisco、Arista、Fortinet、VyOS、MikroTik 等设备。

4.2 目录结构

/etc/ansible/network-backup/
├── inventory.yml        # 设备清单
├── backup-config.yml    # 备份 Playbook
├── /backup/network/     # 存储备份文件

4.3 定时备份

使用 cron 任务:

crontab -e

添加:

0 3 * * * ansible-playbook -i /etc/ansible/network-backup/inventory.yml /etc/ansible/network-backup/backup-config.yml

每天凌晨 3:00 备份所有设备。

使用 systemd 计划任务

创建 ansible-network-backup.service:

sudo vi /etc/systemd/system/ansible-network-backup.service

添加以下内容:

[Unit]
Description=Ansible Network Backup Service
After=network.target

[Service]
ExecStart=/usr/bin/ansible-playbook -i /home/ansible/network-backup/inventory.yml /home/ansible/network-backup/backup-config.yml
User=ansible

[Install]
WantedBy=multi-user.target

启动并启用自动备份:

sudo systemctl enable ansible-network-backup
sudo systemctl start ansible-network-backup
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇