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-control-machine$cd /users/chiapuzi/Desktop/sandbox/
    

SSH/CLI 模块

  • 要使用 SSH/CLI 模块 aoscx_configaoscx_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 模块
    • 有关我们新 pyaoscx AOS-CX Ansible 模块实现的信息,请见 下方
    • 有关在主机上同时使用 REST API 模块和 SSH/CLI 模块的信息,请见 下方
  • ansible_httpapi_use_ssl: (仅对 REST API 模块要求)必须始终为 True,因为 AOS-CX 使用端口 443 进行 REST
  • ansible_httpapi_validate_certs: (仅对 REST API 模块要求)根据 Ansible 是否应尝试验证证书设置为 TrueFalse
  • ansible_acx_no_proxy: 根据 Ansible 是否应绕过环境代理以连接 AOS-CX 设置为 TrueFalse
  • ansible_aoscx_validate_certs: 根据 Ansible 是否应绕过验证证书以连接 AOS-CX 设置为 TrueFalse。仅在 ansible_connection 设置为 aoscx 时需要。
  • ansible_aoscx_use_proxy: 根据 Ansible 是否应绕过环境代理以连接 AOS-CX 设置为 TrueFalse。仅在 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

成功在主机上使用这两种类型模块的推荐方法如下:

  1. 设置主机变量,使 Ansible 通过 REST API 连接到主机,如 上面 所示。
  2. 在剧本中,在每个使用 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
许可证
Unknown
下载
97.4k