备份现有 Ansible 配置 - NCLU
虽然您可以使用 Ansible 的模块或模板从头开始构建网络,但可以从预配置的网络中获取网络配置,甚至将其推送回交换机。
这种类型的模型可能对以下情况有利:
- 升级场景
- 在尝试新事物之前拍摄网络快照
- 快速恢复到快照
- 提供自动化入门介绍

要求
- Cumulus Linux 交换机
- 用于运行 Ansible 的服务器/笔记本电脑
- 在服务器/笔记本电脑上安装 Ansible
Ansible 模块
以下两个示例主要使用以下四个核心 Ansible 模块
Fetch 示例
在服务器上,有一个文件夹,其中包含一个名为 fetch.yml
的文件。
user@server ~/consulting/fetch $ ls
fetch.yml
该文件的内容非常简单
---
- hosts: leaf1
become: yes
tasks:
- name: Fetch ports.conf
fetch: dest=save/{{ansible_hostname}}/ports.conf src=/etc/cumulus/ports.conf flat=yes
- name: Fetch interfaces Configuration
fetch: dest=save/{{ansible_hostname}}/interfaces src=/etc/network/interfaces flat=yes
- name: Fetch FRR daemons file
fetch: dest=save/{{ansible_hostname}}/daemons src=/etc/frr/daemons flat=yes
- name: Fetch frr.conf
fetch: dest=save/{{ansible_hostname}}/frr.conf src=/etc/frr/frr.conf flat=yes
要运行 playbook,请运行 ansible-playbook
命令
user@server ~/consulting/fetch $ ansible-playbook fetch.yml
PLAY [leaf1] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [leaf1]
TASK: [Fetch ports.conf] ******************************************************
changed: [leaf1]
TASK: [Fetch interfaces Configuration] ******************************************************
changed: [leaf1]
TASK: [Fetch FRR daemons file] **********************************************
changed: [leaf1]
TASK: [Fetch frr.conf] ******************************************************
ok: [leaf1]
PLAY RECAP ********************************************************************
leaf1 : ok=5 changed=3 unreachable=0 failed=0
该 playbook 将这四个常用的 Cumulus Linux 文件复制到服务器
文件名 | 描述 |
---|---|
/etc/cumulus/ports.conf | 分拆端口的配置 |
/etc/network/interfaces | 网络配置文件 |
/etc/frr/daemons | FRR 的守护程序配置文件 |
/etc/frr/frr.conf | FRR 配置文件 |
有关要备份哪些文件以及 Cumulus Linux 使用哪些文件的更多信息,请阅读 Upgrading Cumulus Linux。
该 playbook 将文件复制到一个名为 save
的目录中
user@server ~/consulting/fetch $ ls
fetch.yml save
该 playbook 将文件放入基于主机名的目录中。此特定示例显示 playbook 仅在一个名为 leaf1 的交换机上运行
user@server ~/consulting/fetch/save $ ls
leaf1
该 playbook 将所有文件存储在 leaf1
目录中
user@server ~/consulting/fetch/save/leaf1 $ ls
daemons interfaces ports.conf frr.conf
Copy 示例
在服务器上,Ansible 向目录添加了一个名为 copy.yml
的文件;该文件具有以下内容
---
- hosts: leaf1
become: yes
tasks:
- name: Restore ports.conf
copy: src=save/{{ansible_hostname}}/ports.conf dest=/etc/cumulus/
- name: Restore Interface Configuration
copy: src=save/{{ansible_hostname}}/interfaces dest=/etc/network/
- name: Restore FRR daemons file
copy: src=save/{{ansible_hostname}}/daemons dest=/etc/frr/daemons
- name: Restore frr.conf
copy: src=save/{{ansible_hostname}}/frr.conf dest=/etc/frr/frr.conf
- name: reload switchd
service: name=switchd state=restarted
- name: reload networking
command: /sbin/ifreload -a
- name: restart frr
service: name=frr state=restart
此文件只是将已保存的文件推回,然后使用 service 和 command 模块重新启动相应的服务。没有发出 service=networking
命令,而是直接运行了 ifreload -a
命令。
user@server ~/consulting/fetch $ ansible-playbook copy.yml
PLAY [leaf1] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [leaf1]
TASK: [Restore ports.conf] *******************************************************
ok: [leaf1]
TASK: [Restore Interface Configuration] *******************************************************
ok: [leaf1]
TASK: [Restore FRR daemons file] ***************************************************
ok: [leaf1]
TASK: [Restore frr.conf] ******************************************************
changed: [leaf1]
TASK: [reload switchd] ********************************************************
changed: [leaf1]
TASK: [reload networking] *****************************************************
changed: [leaf1]
TASK: [restart frr] *********************************************************
changed: [leaf1]
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/user/copy.retry
leaf1 : ok=8 changed=4 unreachable=0 failed=0
将文件推回交换机后,它现在基于之前的快照运行。
您可以基于一天中的时间而不是使用名为 save
的通用文件夹来创建 save
目录
{{ansible_date_time.time}}
您可以通过阅读 this article 了解有关 Ansible 收集哪些 facts 的更多信息。