运行您的第一个命令和剧本
使用此快速教程将您学到的概念付诸实践。安装 Ansible,手动执行网络配置命令,使用 Ansible 执行相同的命令,然后创建一个剧本,以便您可以在多个网络设备上随时执行该命令。
先决条件
在您完成本教程之前,您需要
安装 Ansible 2.10(或更高版本)
一个或多个与 Ansible 兼容的网络设备
基本的 Linux 命令行知识
基本的网络交换机和路由器配置知识
安装 Ansible
使用您首选的方法安装 Ansible。请参阅 安装 Ansible。然后返回本教程。
确认 Ansible 版本(必须 >= 2.10)
ansible --version
建立与受管节点的手动连接
要确认您的凭据,请手动连接到网络设备并检索其配置。用您的真实凭据替换示例用户和设备名称。例如,对于 VyOS 路由器
ssh [email protected]
show config
exit
此手动连接还建立了网络设备的真实性,将它的 RSA 密钥指纹添加到您的已知主机列表中。(如果您之前连接过该设备,则您已经建立了它的真实性。)
运行您的第一个网络 Ansible 命令
您可以使用一个简化的 Ansible 命令检索网络设备的配置,而不是手动连接并运行命令。您可以使用以下命令检索设备配置
ansible all -i vyos.example.net, -c ansible.netcommon.network_cli -u my_vyos_user -k -m vyos.vyos.vyos_facts -e ansible_network_os=vyos.vyos.vyos
- 此命令中的标志设置了七个值
命令应应用到的主机组(在本例中为所有主机)
清单 (-i,要定位的设备或设备 - 不带尾随逗号 -i 指向清单文件)
连接方法 (-c,用于连接和执行 ansible 的方法)
用户 (-u,SSH 连接的用户名)
SSH 连接方法 (-k,请提示输入密码)
模块 (-m,要运行的 Ansible 模块,使用完全限定的集合名称 (FQCN))
一个额外的变量 (-e,在本例中,设置网络操作系统值)
注意:如果您使用 ssh-agent
与 ssh 密钥,Ansible 会自动加载它们。您可以省略 -k
标志。
注意
如果您在虚拟环境中运行 Ansible,您还需要添加变量 ansible_python_interpreter=/path/to/venv/bin/python
创建和运行您的第一个网络 Ansible 剧本
如果您想每天运行此命令,您可以将其保存在剧本中,并使用 ansible-playbook
而不是 ansible
运行它。该剧本可以存储您使用命令行标志提供的许多参数,从而减少了您在命令行中需要键入的内容。为此,您需要两个文件 - 剧本和清单文件。
下载
first_playbook.yml
,它看起来像这样
---
- name: Network Getting Started First Playbook
connection: ansible.netcommon.network_cli
gather_facts: false
hosts: all
tasks:
- name: Get config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
该剧本设置了命令行中七个值中的三个:组 (hosts: all
)、连接方法 (connection: ansible.netcommon.network_cli
) 和模块(在每个任务中)。在剧本中设置了这些值后,您可以在命令行中省略它们。该剧本还添加了第二个任务来显示配置输出。当模块在剧本中运行时,输出会保存在内存中,供后续任务使用,而不是写入控制台。此处的调试任务允许您在 shell 中查看结果。
使用以下命令运行剧本
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml
该剧本包含一个包含两个任务的剧本,应该会生成类似于以下的输出
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml
PLAY [Network Getting Started First Playbook]
***************************************************************************************************************************
TASK [Get config for VyOS devices]
***************************************************************************************************************************
ok: [vyos.example.net]
TASK [Display the config]
***************************************************************************************************************************
ok: [vyos.example.net] => {
"msg": "The hostname is vyos and the OS is VyOS 1.1.8"
}
现在您已经可以检索设备配置了,请尝试使用 Ansible 更新它。下载
first_playbook_ext.yml
,它是第一个剧本的扩展版本
---
- name: Network Getting Started First Playbook Extended
connection: ansible.netcommon.network_cli
gather_facts: false
hosts: all
tasks:
- name: Get config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
- name: Update the hostname
vyos.vyos.vyos_config:
backup: yes
lines:
- set system host-name vyos-changed
- name: Get changed config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the changed config
debug:
msg: "The new hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
扩展的第一个剧本在一个剧本中包含五个任务。使用与上面相同的命令运行它。输出将显示 Ansible 对配置所做的更改
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.yml
PLAY [Network Getting Started First Playbook Extended]
************************************************************************************************************************************
TASK [Get config for VyOS devices]
**********************************************************************************************************************************
ok: [vyos.example.net]
TASK [Display the config]
*************************************************************************************************************************************
ok: [vyos.example.net] => {
"msg": "The hostname is vyos and the OS is VyOS 1.1.8"
}
TASK [Update the hostname]
*************************************************************************************************************************************
changed: [vyos.example.net]
TASK [Get changed config for VyOS devices]
*************************************************************************************************************************************
ok: [vyos.example.net]
TASK [Display the changed config]
*************************************************************************************************************************************
ok: [vyos.example.net] => {
"msg": "The new hostname is vyos-changed and the OS is VyOS 1.1.8"
}
PLAY RECAP
************************************************************************************************************************************
vyos.example.net : ok=5 changed=1 unreachable=0 failed=0
从网络设备收集事实
gather_facts
关键字现在支持收集网络设备事实,以标准化的键值对形式。您可以将这些网络事实提供给后续任务,以管理网络设备。
您还可以使用新的 gather_network_resources
参数与网络 *_facts
模块(例如 arista.eos.eos_facts)一起使用,以仅返回设备配置的子集,如下所示。
- hosts: arista
gather_facts: True
gather_subset: interfaces
module_defaults:
arista.eos.eos_facts:
gather_network_resources: interfaces
该剧本将返回以下接口事实
"network_resources": {
"interfaces": [
{
"description": "test-interface",
"enabled": true,
"mtu": "512",
"name": "Ethernet1"
},
{
"enabled": true,
"mtu": "3000",
"name": "Ethernet2"
},
{
"enabled": true,
"name": "Ethernet3"
},
{
"enabled": true,
"name": "Ethernet4"
},
{
"enabled": true,
"name": "Ethernet5"
},
{
"enabled": true,
"name": "Ethernet6"
},
]
}
请注意,gather_network_resources
将所有支持的资源(接口、BGP、OSPF 等)的配置数据呈现为事实,而 gather_subset
主要用于获取操作数据。
您可以存储这些事实,并直接在另一个任务中使用它们,例如使用 eos_interfaces 资源模块。