From b1ed1fb61e25e731e3a037aaadbf135d6452a9f8 Mon Sep 17 00:00:00 2001
From: Chris Hines <chris.hines@monash.edu>
Date: Tue, 3 Nov 2015 13:57:27 +1100
Subject: [PATCH] add a role to install the mellanox driver on CentOS 7

---
 roles/mellanox_drivers/files/mlnx_install.sh  | 44 ++++++++++++++++
 roles/mellanox_drivers/files/set_ifcfg.pl     | 45 +++++++++++++++++
 roles/mellanox_drivers/tasks/main.yml         | 50 +++++++++++++++++++
 .../mellanox_drivers/templates/ifcfg-ens6.j2  |  8 +++
 4 files changed, 147 insertions(+)
 create mode 100755 roles/mellanox_drivers/files/mlnx_install.sh
 create mode 100755 roles/mellanox_drivers/files/set_ifcfg.pl
 create mode 100644 roles/mellanox_drivers/tasks/main.yml
 create mode 100644 roles/mellanox_drivers/templates/ifcfg-ens6.j2

diff --git a/roles/mellanox_drivers/files/mlnx_install.sh b/roles/mellanox_drivers/files/mlnx_install.sh
new file mode 100755
index 0000000..0e6f980
--- /dev/null
+++ b/roles/mellanox_drivers/files/mlnx_install.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# A CRUDE Script to install Mellanox OFED drivers
+# Philip.Chan@monash.edu
+#
+# TODO: check if MLNX_OFED is already installed!
+# TODO: check kernel...
+
+KERN=`uname -r`
+
+if [ "$KERN" != "3.10.0-229.14.1.el7.x86_64" ]
+then
+  echo "Oops! Did you forget to reboot?"
+  echo "Kernel version has to be 3.10.0-229.14.1.el7.x86_64"
+  exit 1
+fi
+
+sudo yum install -y pciutils gcc-gfortran libxml2-python tcsh libnl lsof tcl tk perl
+sudo yum install -y gtk2 atk cairo
+tar xzvf MLNX_OFED_LINUX-3.1-1.0.3-rhel7.1-x86_64-ext.tgz
+cd MLNX_OFED_LINUX-3.1-1.0.3-rhel7.1-x86_64-ext
+sudo ./mlnxofedinstall -q
+cd ..
+
+tmpfile="/tmp/ifcfg.pc"
+rm -f $tmpfile
+./set_ifcfg.pl $tmpfile
+
+if [ -f $tmpfile ]
+then
+  echo "Attempting to install ifcfg-ens6"
+  if [ -f /etc/sysconfig/network-scripts/ifcfg-ens6 ]
+  then
+    echo "/etc/sysconfig/network-scripts/ifcfg-ens6 already exists!"
+    grep IP /etc/sysconfig/network-scripts/ifcfg-ens6
+    echo "bailing!"
+  else
+    sudo cp -ip $tmpfile /etc/sysconfig/network-scripts/ifcfg-ens6 
+    sudo chown root:root /etc/sysconfig/network-scripts/ifcfg-ens6 
+    cd /etc/sysconfig/network-scripts
+    sudo ./ifup ens6
+    ping -c 1 172.16.228.1
+  fi
+fi
+exit 0
diff --git a/roles/mellanox_drivers/files/set_ifcfg.pl b/roles/mellanox_drivers/files/set_ifcfg.pl
new file mode 100755
index 0000000..022c8cf
--- /dev/null
+++ b/roles/mellanox_drivers/files/set_ifcfg.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+#
+# Assumes Mellanox NIC is named as ens6
+# Philip.Chan@monash.edu
+#
+# Usage:
+#    ./set_ifcfg.pl [<tmpfilename>]
+# To be used within the mlnx_install.sh
+#
+
+my $outfile = shift @ARGV;
+$outfile = "tmp.ifcfg" if (! defined $outfile);
+
+sub get_index
+{
+  my $hn = shift;
+  my $maxhosts = 32;
+
+  if ($hn =~ /hc(\d+)/) {
+    return 33 + $1 if ($1 < $maxhosts);
+  }
+  if ($hn =~ /hs(\d+)/) {
+    return 1 + $1 if ($1 < $maxhosts);
+  }
+  return 0;
+}
+
+my $hostname = `/bin/hostname`;
+my $x = get_index($hostname);
+die "Unable to parse hostname $hostname" if ($x eq '0');
+
+my $ip = "172.16.229.$x";
+print "Assigning $ip to $hostname\n";
+
+open OUT, ">$outfile" or die "Failed to create output file $outfile!";
+print OUT "DEVICE=ens6\n";
+print OUT "ONBOOT=yes\n";
+print OUT "NM_CONTROLLED=no\n";
+print OUT "BOOTPROTO=none\n";
+print OUT "IPADDR=$ip\n";
+print OUT "PREFIX=22\n";
+print OUT "MTU=9000\n";
+close OUT;
+
+exit 0;
diff --git a/roles/mellanox_drivers/tasks/main.yml b/roles/mellanox_drivers/tasks/main.yml
new file mode 100644
index 0000000..a25adf0
--- /dev/null
+++ b/roles/mellanox_drivers/tasks/main.yml
@@ -0,0 +1,50 @@
+---
+- name: restart machine
+  command: shutdown -r now "Ansible updates triggered"
+  async: 0
+  poll: 0
+  ignore_errors: true
+
+- name: waiting for server to come back
+  local_action: wait_for host={{ inventory_hostname }}
+                state=started
+  sudo: false
+
+- name: test for existing installation of drivers
+  command: ibv_devinfo
+  sudo: true
+  register: drivers_installed
+  ignore_errors: true
+
+- name: copy driver source
+  unarchive: copy=yes src=MLNX_OFED_LINUX-3.1-1.0.3-rhel7.1-x86_64-ext.tgz dest=/tmp/MLNX_OFED_LINUX-3.1-1.0.3-rhel7.1-x86_64-ext
+  sudo: true
+  when: drivers_installed|failed and ansible_os_family=="RedHat" and ansible_distribution_major_version == "7"
+
+- name: install drivers
+  command: ./mlnxofedinstall -q
+  args:
+    path: /tmp/MLNX_OFED_LINUX-3.1-1.0.3-rhel7.1-x86_64-ext
+  sudo: true
+  when: drivers_installed failed and ansible_distribution_major_version == "7"
+
+
+- name: get IP address
+  command: ./scripts/map_ib_ip.pl {{ inventory_hostname }}
+  local_action: true
+  register: ip_address
+  
+- name: template IP address
+  template: dest=/etc/sysconfig/network-scripts/ifcfg-ens6 source=ifcfg-ens6.j2 owner=root group=root
+  sudo: true
+  when: ansible_distribution_major_version == "7"
+ 
+- name: bring up interface
+  command: ifup ens6
+  sudo: true
+  when: ansible_distribution_major_version == "7"
+   
+  
+
+
+
diff --git a/roles/mellanox_drivers/templates/ifcfg-ens6.j2 b/roles/mellanox_drivers/templates/ifcfg-ens6.j2
new file mode 100644
index 0000000..1066d62
--- /dev/null
+++ b/roles/mellanox_drivers/templates/ifcfg-ens6.j2
@@ -0,0 +1,8 @@
+DEVICE=ens6
+ONBOOT=yes
+NM_CONTROLLED=no
+BOOTPROTO=none
+IPADDR={{ ip_address.stdout }}
+PREFIX=22
+MTU=9000
+
-- 
GitLab