运行您的第一个命令和剧本
使用这个快速教程将您学到的概念付诸实践。安装 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 资源模块。