[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_command 和 ios_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]