备份现有 Ansible 配置 - NCLU

虽然您可以使用 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/daemonsFRR 的守护程序配置文件
/etc/frr/frr.confFRR 配置文件

有关要备份哪些文件以及 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 的更多信息。