arubanetworks.aoscx_role
aoscx
这个 Ansible 网络角色提供了一组依赖于平台的配置管理模块,专门为 AOS-CX 网络设备设计。
要求
- Python 3 或更高版本
- Ansible 2.8.1 或更高版本
- 参考 Ansible 的文档 获取安装步骤
- Ansible 2.10+ 需要安装
ansible.netcommon
集合
- 支持的最低 AOS-CX 固件版本为 10.04。
- 使用以下命令在 AOS-CX 设备上启用 REST:
switch(config)# https-server rest access-mode read-write switch(config)# https-server vrf mgmt
安装
通过 Galaxy 安装:
ansible-galaxy install arubanetworks.aoscx_role
示例输出:
开始 galaxy 角色安装过程
- 正在下载角色 'aoscx_role',拥有者为 arubanetworks
- 从 https://github.com/aruba/aoscx-ansible-role/archive/3.0.1.tar.gz 下载角色
- 将 arubanetworks.aoscx_role 解压至 /users/chiapuzi/.ansible/roles/arubanetworks.aoscx_role
- arubanetworks.aoscx_role (3.0.1) 安装成功
ansible-control-machine$
切换到角色目录,执行
ansible-galaxy role list
查找:ansible-control-machine$ansible-galaxy role list # /users/chiapuzi/.ansible/roles - arubanetworks.aoscx_role, 3.0.1 - arubanetworks.aruba_central_role, 0.1.0 [警告]: - 配置路径 /usr/share/ansible/roles 不存在。 [警告]: - 配置路径 /etc/ansible/roles 不存在。 ansible-control-machine$cd /users/chiapuzi/.ansible/roles/arubanetworks.aoscx_role/ ansible-control-machine$ls cliconf_plugins httpapi_plugins README.md terminal_plugins connection_plugins library RELEASE-NOTES.md CONTRIBUTING.md meta requirements.txt docs module_utils requirements.yml ansible-control-machine$
- 使用以下命令安装所有 Ansible 依赖:
ansible-galaxy install -r requirements.yml
- 使用以下命令安装所有 Python 依赖:
python3 -m pip install -r requirements.txt
- 使用以下命令安装所有 Ansible 依赖:
切换回工作目录,开始自动化工作!
ansible-control-machine$cd /users/chiapuzi/Desktop/sandbox/
SSH/CLI 模块
- 要使用 SSH/CLI 模块
aoscx_config
和aoscx_command
,必须在 AOS-CX 设备上启用 SSH 访问。默认情况下启用。- 如果需要,可以使用以下命令重新启用设备上的 SSH 访问:
switch(config)# ssh server vrf mgmt
- 控制机器的
known_hosts
文件必须包含目标设备的公钥。- 另外,可以禁用控制机器的主机密钥检查,尽管这不推荐。
- 要禁用主机密钥检查,可以修改 ansible.cfg 文件(默认位于 /etc/ansible/ansible.cfg)以包括:
host_key_checking = false
限制和注意事项
- 默认命令超时时间为 30 秒。如果命令执行超过 30 秒,任务将超时。
- 如果经常遇到
command timeout triggered, timeout value is 30 secs
错误,请考虑将环境变量ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
设置为更大值。详细信息请参见 Ansible 文档 这里。
- 如果经常遇到
库存变量
在你的库存中应定义的 AOS-CX 主机变量包括:
ansible_host
: 交换机的 IP 地址,格式为A.B.C.D
。对于 IPv6 主机,请使用字符串并用方括号括起来,例如'[2001::1]'
。ansible_user
: 交换机的用户名,格式为明文
ansible_password
: 交换机的密码,格式为明文
ansible_network_os
: 必须始终设置为aoscx
ansible_connection
: 设置为httpapi
使用 REST API 模块,设置为network_cli
使用 SSH/CLI 模块,设置为aoscx
使用 pyaoscx 模块ansible_httpapi_use_ssl
: (仅对 REST API 模块要求)必须始终为True
,因为 AOS-CX 使用端口 443 进行 RESTansible_httpapi_validate_certs
: (仅对 REST API 模块要求)根据 Ansible 是否应尝试验证证书设置为True
或False
ansible_acx_no_proxy
: 根据 Ansible 是否应绕过环境代理以连接 AOS-CX 设置为True
或False
ansible_aoscx_validate_certs
: 根据 Ansible 是否应绕过验证证书以连接 AOS-CX 设置为True
或False
。仅在ansible_connection
设置为aoscx
时需要。ansible_aoscx_use_proxy
: 根据 Ansible 是否应绕过环境代理以连接 AOS-CX 设置为True
或False
。仅在ansible_connection
设置为aoscx
时需要。
pyaoscx 模块
为了利用我们最近更新的 AOS-CX Python SDK Pyaoscx,我们重新设计了 Ansible 集成,利用 pyaoscx 处理所有基于 REST API 的模块。
如果我一直在使用 AOS-CX 的 REST API 模块,意味着什么?
我们之前的实现将继续运行,但将不支持未来的模块。这意味着你应该且最终必须更新你的 Ansible 库存变量,以指定 ansible_network_os=aoscx
和其它变量,并通过 Python3 pip 安装 pyaoscx Python 包,所有剧本将保持不变:pip3 install pyaoscx
AOS-CX Ansible 角色将自动判断你是否安装了 pyaoscx,并在 ansible_network_os
设置为 aoscx
时使用该方法。如果设置为 httpapi
,它将继续使用之前的实现方法。
示例库存:
仅 REST API 模块:
INI
aoscx_1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=password ansible_network_os=aoscx ansible_connection=aoscx ansible_aoscx_validate_certs=False ansible_aoscx_use_proxy=False
YAML
all:
hosts:
aoscx_1:
ansible_host: 10.0.0.1
ansible_user: admin
ansible_password: password
ansible_network_os: aoscx
ansible_connection: aoscx # 通过 pyaoscx 连接的 REST API
ansible_aoscx_validate_certs: False
ansible_aoscx_use_proxy: False
ansible_acx_no_proxy: True
传统 REST API 模块:
INI
aoscx_1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=password ansible_network_os=aoscx ansible_connection=httpapi ansible_httpapi_validate_certs=False ansible_httpapi_use_ssl=True ansible_acx_no_proxy=True
YAML
all:
hosts:
aoscx_1:
ansible_host: 10.0.0.1
ansible_user: admin
ansible_password: password
ansible_network_os: aoscx
ansible_connection: httpapi # REST API 连接方法
ansible_httpapi_validate_certs: False
ansible_httpapi_use_ssl: True
ansible_acx_no_proxy: True
仅 SSH/CLI 模块:
INI
aoscx_1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=password ansible_network_os=aoscx ansible_connection=network_cli
YAML
all:
hosts:
aoscx_1:
ansible_host: 10.0.0.1
ansible_user: admin
ansible_password: password
ansible_network_os: aoscx
ansible_connection: network_cli # SSH 连接方法
示例剧本
包含角色
如果通过 Galaxy 安装角色,将 arubanetworks.aoscx_role
添加到角色列表中:
- hosts: all
roles:
- role: arubanetworks.aoscx_role
vars:
ansible_python_interpreter: /usr/bin/python3
gather_facts: False
tasks:
- name: 创建 L3 接口 1/1/3
aoscx_l3_interface:
interface: 1/1/3
description: Uplink_Interface
ipv4: ['10.20.1.3/24']
ipv6: ['2001:db8::1234/64']
在同一主机上同时使用 REST API 和 SSH/CLI 模块
要在同一主机上同时使用 REST API 和 SSH/CLI 模块,
您必须创建独立的剧本,使得每个剧本仅使用 REST API 模块或仅使用 SSH/CLI 模块。
一个剧本不能混合使用 REST API 和 SSH/CLI 模块调用。
在每个剧本中,ansible_connection
必须根据所使用的模块具有适当的值。
如果剧本使用 REST API 模块,则值应为 aoscx
。
如果剧本使用 SSH/CLI 模块,则值应为 network_cli
。
成功在主机上使用这两种类型模块的推荐方法如下:
- 设置主机变量,使 Ansible 通过 REST API 连接到主机,如 上面 所示。
- 在剧本中,在每个使用 SSH/CLI 模块的剧本中,将
ansible_connection
设置为network_cli
。
库存应该类似于以下内容:
all:
hosts:
aoscx_1:
ansible_host: 10.0.0.1
ansible_user: admin
ansible_password: password
ansible_network_os: aoscx
ansible_connection: aoscx # 通过 pyaoscx 连接的 REST API
ansible_httpapi_validate_certs: False
ansible_httpapi_use_ssl: True
ansible_acx_no_proxy: True
剧本如下(请注意第二个剧本使用 SSH/CLI 模块 aoscx_command
,相应地设置 ansible_connection
值):
- hosts: all
roles:
- role: arubanetworks.aoscx_role
vars:
ansible_python_interpreter: /usr/bin/python3
gather_facts: False
tasks:
- name: 添加或更新横幅
aoscx_banner:
banner_type: banner
banner: "嗨!"
- hosts: all
roles:
- role: arubanetworks.aoscx_role
vars:
ansible_connection: network_cli
gather_facts: False
tasks:
- name: 在交换机上执行 show run
aoscx_command:
commands: ['show run']
贡献
在 Aruba Networks,我们致力于确保我们的产品质量,如发现任何问题,请在我们的 Github 上提出问题,我们将及时回应!
有关更多贡献机会,请遵循我们在 CONTRIBUTING.md 中列出的指导方针。
许可证
Apache 2.0
作者信息
- Madhusudan Pranav Venugopal (@madhusudan-pranav-venugopal)
- Yang Liu (@yliu-aruba)
- Tiffany Chiapuzio-Wong (@tchiapuziowong)
- Derek Wang (@derekwangHPEAruba)
- Daniel Alvarado Bonilla (@daniel-alvarado)
Ansible modules for configuring AOS-CX switches. (github repo - https://github.com/aruba/aoscx-ansible-role)
ansible-galaxy install arubanetworks.aoscx_role