From abded1e472ed1e6dbb4b77c776eb6c822d34a8a3 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Mon, 25 Jun 2018 15:22:29 +0000
Subject: [PATCH] Add support for Mellanox switches running MLNX-OS

Mellanox switches running MLNX-OS cannot be managed using the Ansible onyx*
modules, as the OS is too old. This change uses the stackhpc.mellanox-switch
Ansible role to configure these devices using the Ansible expect module.

Change-Id: I86f654c95be05e3a82d6015e4c89093127553408
Story: 2002687
Task: 22512
---
 ansible/group_vars/switches/mellanox                 | 12 ++++++++++++
 ansible/physical-network.yml                         | 12 ++++++++++++
 .../notes/mellanox-switch-cb82a8c278f5e652.yaml      |  5 +++++
 requirements.yml                                     |  1 +
 4 files changed, 30 insertions(+)
 create mode 100644 ansible/group_vars/switches/mellanox
 create mode 100644 releasenotes/notes/mellanox-switch-cb82a8c278f5e652.yaml

diff --git a/ansible/group_vars/switches/mellanox b/ansible/group_vars/switches/mellanox
new file mode 100644
index 00000000..7cb69791
--- /dev/null
+++ b/ansible/group_vars/switches/mellanox
@@ -0,0 +1,12 @@
+---
+# Switch configuration.
+
+###############################################################################
+# Authentication configuration.
+
+# For Mellanox switches, this defines a 'provider' argument to the
+# mellanox-switch role.
+switch_mellanox_provider:
+  host: "{{ ansible_host }}"
+  username: "{{ ansible_user }}"
+  auth_pass: "{{ switch_auth_pass }}"
diff --git a/ansible/physical-network.yml b/ansible/physical-network.yml
index f87ee3b6..eaa4c901 100644
--- a/ansible/physical-network.yml
+++ b/ansible/physical-network.yml
@@ -93,3 +93,15 @@
       junos_switch_config_format: "{{ switch_junos_config_format }}"
       junos_switch_config: "{{ switch_config }}"
       junos_switch_interface_config: "{{ switch_interface_config }}"
+
+- name: Ensure Mellanox physical switches are configured
+  hosts: switches_of_type_mellanox:&switches_in_display_mode_False
+  gather_facts: no
+  roles:
+    - role: ssh-known-host
+
+    - role: stackhpc.mellanox-switch
+      mellanox_switch_type: "{{ switch_type }}"
+      mellanox_switch_provider: "{{ switch_mellanox_provider }}"
+      mellanox_switch_config: "{{ switch_config }}"
+      mellanox_switch_interface_config: "{{ switch_interface_config }}"
diff --git a/releasenotes/notes/mellanox-switch-cb82a8c278f5e652.yaml b/releasenotes/notes/mellanox-switch-cb82a8c278f5e652.yaml
new file mode 100644
index 00000000..10745ed4
--- /dev/null
+++ b/releasenotes/notes/mellanox-switch-cb82a8c278f5e652.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adds support for configuration of Mellanox switches running MLNX-OS. This
+    is integrated with the `kayobe physical network configure` command.
diff --git a/requirements.yml b/requirements.yml
index c0ae60f7..34082bd6 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -14,6 +14,7 @@
 - src: stackhpc.grafana-conf
 - src: stackhpc.libvirt-host
 - src: stackhpc.libvirt-vm
+- src: stackhpc.mellanox-switch
 - src: stackhpc.os-flavors
 - src: stackhpc.os-images
 - src: stackhpc.os-ironic-state
-- 
GitLab