Merge "Add support for Cumulus NVUE switches"
This commit is contained in:
commit
82b02cb7d3
@ -36,6 +36,7 @@
|
|||||||
- junos
|
- junos
|
||||||
- mellanox
|
- mellanox
|
||||||
- nclu
|
- nclu
|
||||||
|
- nvue
|
||||||
- openvswitch
|
- openvswitch
|
||||||
tasks:
|
tasks:
|
||||||
- name: Fail if both interface name and description limits are specified
|
- name: Fail if both interface name and description limits are specified
|
||||||
@ -202,3 +203,14 @@
|
|||||||
- role: nclu-switch
|
- role: nclu-switch
|
||||||
nclu_switch_config: "{{ switch_config }}"
|
nclu_switch_config: "{{ switch_config }}"
|
||||||
nclu_switch_interface_config: "{{ switch_interface_config }}"
|
nclu_switch_interface_config: "{{ switch_interface_config }}"
|
||||||
|
|
||||||
|
- name: Ensure Cumulus physical switches are configured with NVUE
|
||||||
|
hosts: switches_of_type_nvue:&switches_in_display_mode_False
|
||||||
|
gather_facts: no
|
||||||
|
roles:
|
||||||
|
- role: ssh-known-host
|
||||||
|
|
||||||
|
- role: nvue-switch
|
||||||
|
nvue_switch_config: "{{ switch_config }}"
|
||||||
|
nvue_switch_interface_config: "{{ switch_interface_config }}"
|
||||||
|
nvue_switch_save: "{{ switch_config_save }}"
|
||||||
|
73
ansible/roles/nvue-switch/README.md
Normal file
73
ansible/roles/nvue-switch/README.md
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
NVUE Switch
|
||||||
|
===========
|
||||||
|
|
||||||
|
This role configures Cumulus switches using the `nvidia.nvue.command` Ansible
|
||||||
|
module. It provides a fairly minimal abstraction of the configuration interface
|
||||||
|
provided by the `nvidia.nvue.command` module, allowing for application of
|
||||||
|
arbitrary switch configuration options.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
The switches should be configured to allow SSH access.
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
`nvue_switch_config` is a list of NVUE commands to apply to the switch, and
|
||||||
|
defaults to an empty list. Commands must be formatted without the `nv` prefix,
|
||||||
|
which is added by the `nvidia.nvue.command` module before execution on the
|
||||||
|
switch.
|
||||||
|
|
||||||
|
`nvue_switch_interface_config` contains interface configuration. It is a dict
|
||||||
|
mapping switch interface names to configuration dicts. Interfaces can be switch
|
||||||
|
physical interfaces, but also special interfaces such as bridges or bonds. Each
|
||||||
|
dict may contain the following items:
|
||||||
|
|
||||||
|
- `description` - a description to apply to the interface.
|
||||||
|
- `config` - a list of per-interface configuration, each applied with a `nv
|
||||||
|
set interface <interface-name>` prefix.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The following playbook configures hosts in the `nvue-switches` group. It
|
||||||
|
applies global configuration to configure a BGP AS and add two EBGP neighbors
|
||||||
|
using BGP Unnumbered, enables two host interfaces with jumbo frames, and
|
||||||
|
attaches them to a traditional bridge called `bridge1` configured with an IP
|
||||||
|
address.
|
||||||
|
|
||||||
|
---
|
||||||
|
- name: Ensure Cumulus switches are configured with NVUE
|
||||||
|
hosts: nvue-switches
|
||||||
|
gather_facts: no
|
||||||
|
roles:
|
||||||
|
- role: nvue-switch
|
||||||
|
nvue_switch_config:
|
||||||
|
- "set router bgp autonomous-system 65000"
|
||||||
|
- "set router bgp neighbor swp51 interface remote-as external"
|
||||||
|
- "set router bgp neighbor swp52 interface remote-as external"
|
||||||
|
nvue_switch_interface_config:
|
||||||
|
swp1:
|
||||||
|
description: server1
|
||||||
|
config:
|
||||||
|
- "link mtu 9000"
|
||||||
|
swp2:
|
||||||
|
description: server2
|
||||||
|
config:
|
||||||
|
- "link mtu 9000"
|
||||||
|
bridge1:
|
||||||
|
config:
|
||||||
|
- "ip address 10.100.100.1/24"
|
||||||
|
- "ports swp1"
|
||||||
|
- "ports swp2"
|
||||||
|
|
||||||
|
Author Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Michal Nasiadka (<mnasiadka@gmail.com>)
|
11
ansible/roles/nvue-switch/defaults/main.yml
Normal file
11
ansible/roles/nvue-switch/defaults/main.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
# List of configuration lines to apply to the switch.
|
||||||
|
nvue_switch_config: []
|
||||||
|
|
||||||
|
# Interface configuration. Dict mapping switch interface names to configuration
|
||||||
|
# dicts. Each dict contains a 'description' item and a 'config' item which
|
||||||
|
# should contain a list of per-interface configuration.
|
||||||
|
nvue_switch_interface_config: {}
|
||||||
|
|
||||||
|
# Whether to save the NVUE configuration to disk.
|
||||||
|
nvue_switch_save: false
|
7
ansible/roles/nvue-switch/tasks/main.yml
Normal file
7
ansible/roles/nvue-switch/tasks/main.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure Cumulus switches are configured with NVUE
|
||||||
|
nvidia.nvue.command:
|
||||||
|
assume_yes: true
|
||||||
|
atomic: true
|
||||||
|
save: "{{ nvue_switch_save | bool }}"
|
||||||
|
template: "{{ lookup('template', 'nvue-config.j2') }}"
|
12
ansible/roles/nvue-switch/templates/nvue-config.j2
Normal file
12
ansible/roles/nvue-switch/templates/nvue-config.j2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#jinja2: trim_blocks: True,lstrip_blocks: True
|
||||||
|
{% for line in nvue_switch_config %}
|
||||||
|
{{ line }}
|
||||||
|
{% endfor %}
|
||||||
|
{% for interface, config in nvue_switch_interface_config.items() %}
|
||||||
|
{% for line in config.config %}
|
||||||
|
set interface {{ interface }} {{ line }}
|
||||||
|
{% endfor %}
|
||||||
|
{% if config.description is defined %}
|
||||||
|
set interface {{ interface }} description {{ config.description }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
@ -17,6 +17,8 @@ The following switch operating systems are currently supported:
|
|||||||
* Arista EOS
|
* Arista EOS
|
||||||
* Cumulus Linux (via `Network Command Line Utility (NCLU)
|
* Cumulus Linux (via `Network Command Line Utility (NCLU)
|
||||||
<https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/System-Configuration/Network-Command-Line-Utility-NCLU/>`__)
|
<https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/System-Configuration/Network-Command-Line-Utility-NCLU/>`__)
|
||||||
|
* Cumulus Linux (via `NVIDIA User Experience command line utility (NVUE)
|
||||||
|
<https://docs.nvidia.com/networking-ethernet-software/cumulus-linux/System-Configuration/NVIDIA-User-Experience-NVUE/>`__)
|
||||||
* Dell OS 6
|
* Dell OS 6
|
||||||
* Dell OS 9
|
* Dell OS 9
|
||||||
* Dell OS 10
|
* Dell OS 10
|
||||||
@ -211,11 +213,20 @@ Configuration for these devices is applied using the ``nclu`` Ansible module.
|
|||||||
|
|
||||||
``switch_type`` should be set to ``nclu``.
|
``switch_type`` should be set to ``nclu``.
|
||||||
|
|
||||||
|
Cumulus Linux (with NVUE)
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Configuration for these devices is applied using the ``nvidia.nvue.command``
|
||||||
|
Ansible module.
|
||||||
|
|
||||||
|
``switch_type`` should be set to ``nvue``.
|
||||||
|
|
||||||
SSH configuration
|
SSH configuration
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
As with any non-switch host in the inventory, the ``nclu`` module relies on the
|
As with any non-switch host in the inventory, the ``nclu`` and
|
||||||
default connection parameters used by Ansible:
|
``nvidia.nvue.command`` modules rely on the default connection parameters used
|
||||||
|
by Ansible:
|
||||||
|
|
||||||
* ``ansible_host`` is the hostname or IP address. Optional.
|
* ``ansible_host`` is the hostname or IP address. Optional.
|
||||||
|
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Adds support for configuring Cumulus switches using the `NVIDIA User
|
||||||
|
Experience command line utility (NVUE)
|
||||||
|
<https://docs.nvidia.com/networking-ethernet-software/cumulus-linux/System-Configuration/NVIDIA-User-Experience-NVUE/>`__.
|
||||||
|
This is integrated with the ``kayobe physical network configure`` command.
|
@ -7,6 +7,8 @@ collections:
|
|||||||
version: 3.11.0
|
version: 3.11.0
|
||||||
- name: dellemc.os10
|
- name: dellemc.os10
|
||||||
version: 1.1.1
|
version: 1.1.1
|
||||||
|
- name: nvidia.nvue
|
||||||
|
version: 1.2.0
|
||||||
- name: openstack.cloud
|
- name: openstack.cloud
|
||||||
version: '<3'
|
version: '<3'
|
||||||
- name: stackhpc.linux
|
- name: stackhpc.linux
|
||||||
|
Loading…
Reference in New Issue
Block a user