使用 Ansible 自动化网络设备

[ad_1]

Ansible 是系统和网络工程师的绝佳自动化工具,借助 Ansible,我们可以将小型网络自动化到大型企业网络。 我一直在使用 Ansible 来自动化我的 Aruba 和 Cisco 交换机 Fedora 有几年的有源笔记本电脑。 本文涵盖了要求和执行几个剧本。

配置 Ansible

如果没有安装 Ansible,可以使用下面的命令安装

$ sudo dnf -y install ansible

安装后,在您的主目录或您喜欢的目录中创建一个文件夹并复制 ansible 配置文件。 对于这个演示,我将使用以下内容。

$ mkdir -pv /home/$USER/network_automation
$ sudo cp -v /etc/ansible.cfg /home/$USER/network_automation
$ cd /home/$USER/network_automation
$ sudo chown $USER:$USER ansible.cfg && chmod 0600 ansible.cfg

为防止冗长的命令失败,请编辑 ansible.cfg 并附加以下行。 我们必须添加持久连接并为 command_timeout 设置所需的时间(以秒为单位),如下所示。 这很有用的一个用例是当您执行具有冗长配置的网络设备的备份时。

$ vim ansible.cfg
[persistent_connection]
command_timeout = 300
connection_timeout = 30

要求

如果启用了 SELinux,则需要安装 SELinux 绑定,这在使用复制模块时是必需的。

# Install SELinux bindings
$ sudo dnf -y install python3-libselinux python3-libsemanage

创建库存

清单包含网络资产的名称,资产分组在方括号中 [],以下是库存样本。

[site_a]
Core_A ansible_host=192.168.122.200
Distro_A ansible_host=192.168.122.201
Distro_B ansible_host=192.168.122.202

组变量可用于处理公共变量,例如凭据、网络操作系统等。 Ansible 文档 存货 提供了额外的细节。

剧本

Playbooks 是 Ansible 的配置、部署和编排语言。 它们可以描述您希望远程系统执行的策略,或一般 IT 流程中的一组步骤。
Ansible 手册

读操作

让我们创建一个简单的 playbook 来运行 show 命令来读取几个交换机上的配置。

  1 ---
  2 - name: Basic Playbook
  3   hosts: site_a
  4   connection: local
  5 
  6   tasks:
  7   - name: Get Interface Brief
  8     ios_command:
  9       commands:
 10         - show ip interface brief | e una
 11     register: interfaces
 12 
 13   - name: Print results
 14     debug:
 15       msg: "{{ interfaces.stdout[0] }}
带调试

上图分别显示了没有和有调试模块的差异。

让我们将剧本分成三个块,从第 1 行到第 4 行。

  • 三个破折号/连字符开始 YAML 文档
  • hosts 定义主机或主机组,多个组以逗号分隔
  • 连接定义了连接到网络设备的方法。 另一个选项是 network_cli(推荐方法),本文稍后会用到。 看 IOS 平台选项 更多细节。

第 6 到 11 行启动任务,我们将使用 ios_commandios_config. 这个播放会执行show命令show ip interface brief | e una 并将命令的输出保存到 interfaces 变量中,使用注册密钥。

第 13 行到第 15 行,默认情况下,当您执行 show 命令时,您将看不到输出,尽管这在自动化期间不会使用。 它对调试非常有用; 因此,使用了调试模块。

下面的视频显示了剧本的执行。 有几种方法可以执行剧本。

  • 向命令行传递参数,例如,包括 -u -k 以提示输入远程用户凭据
ansible-playbook -i inventory show_demo.yaml -u admin -k
  • 在主机或组变量中包含凭据
ansible-playbook -i inventory show_demo.yaml

切勿以纯文本形式存储密码。 我们建议使用 SSH 密钥来验证 SSH 连接。 Ansible 支持 ssh-agent 来管理您的 SSH 密钥。 如果您必须使用密码来验证 SSH 连接,我们建议使用
在 Playbooks 中使用 Vault

将参数传递给命令行
清单中的凭据

如果我们想将输出保存到文件中,我们将使用复制模块,如下面的剧本所示。 除了使用 copy 模块,我们还将包含 backup_dir 变量来指定目录路径。

---
- name: Get System Infomation
  hosts: site_a
  connection: network_cli
  gather_facts: no
  
  vars:
    backup_dir: /home/eramirez/dev/ansible/fedora_magazine
  
  tasks:
  - name: get system interfaces
    ios_command:
      commands:
        - show ip int br | e una
    register: interface
    
  - name: Save result to disk
    copy:
      content: "{{ interface.stdout[0] }}"
      dest: "{{ backup_dir }}/{{ inventory_hostname }}.txt"

为了演示清单中变量的使用,我们将使用纯文本。 这种方法 必须 不得用于生产。

[site_a]
Core_A ansible_host=192.168.122.200
Distro_A ansible_host=192.168.122.201
Distro_B ansible_host=192.168.122.202
[all:vars]
ansible_connection=network_cli
ansible_network_os=ios
ansible_user=admin
ansible_password=fedora
ansible_become=yes
ansible_become_password=yes
ansible_become_method=enable 

写操作

在上一节中,我们看到我们可以从网络设备中获取信息; 在本节中,我们将编写(添加/修改)这些网络设备上的配置。 要对网络设备进行更改,我们将使用 ios配置 模块。

让我们创建一个剧本来在 site_a 中的所有网络设备中配置几个接口。 我们将首先备份 site_a 中所有设备的当前配置。 最后,我们将保存配置。

---
- name: Get System Infomation
  hosts: site_a
  connection: network_cli
  gather_facts: no
  
  vars:
    backup_dir: /home/eramirez/dev/ansible/fedora_magazine
  
  tasks:
  - name: Backup configs
    ios_config:
      backup: yes
      backup_options:
        filename: "{{ inventory_hostname }}_running_cfg.txt"
        dir_path: "{{ backup_dir }}"
    
  - name: get system interfaces
    ios_config:
      lines:
        - description Raspberry Pi
        - switchport mode access
        - switchport access vlan 100
        - spanning-tree portfast
        - logging event link-status
        - no shutdown
      parents: "{{ item }}"
    with_items:
      - interface FastEthernet1/12
      - interface FastEthernet1/13
      
  - name: Save switch configuration
    ios_config:
      save_when: modified

在我们执行 playbook 之前,我们将首先验证接口配置。 然后我们将运行剧本并确认更改,如下所示。

结论

本文是一个基本介绍,以激发您的兴趣,演示如何使用 Ansible 来管理网络设备。 Ansible 能够自动化一个庞大的网络,其中包括 MPLS 路由和在执行下一个任务之前执行验证。

[ad_2]

Related Posts