adding support to install the mellanox or intel nic

Change-Id: I11c240d53a4d494dbccd76c2e7f415ed0cdfb0eb
diff --git a/roles/compute-node/files/rename_ifaces.sh b/roles/compute-node/files/rename_ifaces.sh
index 27184f1..fdf2931 100755
--- a/roles/compute-node/files/rename_ifaces.sh
+++ b/roles/compute-node/files/rename_ifaces.sh
@@ -49,6 +49,9 @@
     local DRIVER=$(ethtool -i $1 2>/dev/null | grep driver | awk '{print $2}')
     local RESULT="DNC"
     case $DRIVER in
+	mlx4_en)
+            RESULT="MLX4_EN"
+            ;;
         i40e)
             RESULT="I40G"
             ;;
@@ -170,7 +173,7 @@
         ETH)
             echo "$(get_mac $i)" >> $LIST_ETH
             ;;
-        I40G)
+        I40G|MLX4_EN)
             echo "$(get_mac $i)" >> $LIST_40G
             ;;
         *) ;;
diff --git a/roles/compute-node/tasks/main.yml b/roles/compute-node/tasks/main.yml
index cc4a3ee..1965f60 100644
--- a/roles/compute-node/tasks/main.yml
+++ b/roles/compute-node/tasks/main.yml
@@ -62,17 +62,45 @@
     group=root
     mode=0600
 
+- name: Verify Mellanox 40Gb NIC
+  shell: /usr/bin/lspci | grep "Ethernet controller" | grep -c ConnectX-3 || true
+  register: mlx_nic_present
+
+- name: Verify Intel 40Gb NIC
+  shell: /usr/bin/lspci | grep "Ethernet controller" | grep -c "XL710 for 40GbE QSFP+" || true
+  register: intel_nic_present
+
+- name: Fail install if no known NIC is present
+  when: mlx_nic_present.stdout == "0" and intel_nic_present.stdout == "0"
+  fail: msg="No known NICs are present on this compute node"
+
 - name: Verify i40e Driver
   command: modinfo --field=version i40e
   register: i40e_version
+  when: intel_nic_present.stdout == "1"
   changed_when: False
   failed_when: False
   tags:
     - interface_config
 
+- name: Verify mlx4 Driver
+  command: modinfo --field=version mlx4_core
+  register: mlx4_version
+  when: mlx_nic_present.stdout == "1"
+  changed_when: False
+  failed_when: False
+  tags:
+    - interface_config
+
+- name: Update mlx4 Driver
+  include: tasks/mlx4_driver.yml
+  when: mlx_nic_present.stdout == "1" and mlx4_version.stdout != '3.1-1.0.4'
+  tags:
+    - interface_config
+
 - name: Update i40e Driver
   include: tasks/i40e_driver.yml
-  when: i40e_version.stdout != '1.4.25'
+  when: intel_nic_present.stdout == "1" and i40e_version.stdout != '1.4.25'
   tags:
     - interface_config
 
diff --git a/roles/compute-node/tasks/mlx4_driver.yml b/roles/compute-node/tasks/mlx4_driver.yml
new file mode 100644
index 0000000..06219d2
--- /dev/null
+++ b/roles/compute-node/tasks/mlx4_driver.yml
@@ -0,0 +1,43 @@
+---
+- name: Install Prerequesites
+  become: yes
+  apt: name={{ item }} state=installed
+  with_items:
+    - debhelper
+    - autotools-dev
+    - dkms
+    - zlib1g-dev
+
+- name: Unarchive mlx4 driver package
+  unarchive:
+    copy=no
+    src=http://www.mellanox.com/downloads/Drivers/mlnx-en-3.1-1.0.4.tgz
+    dest=/tmp
+
+- name: Install mlx4 driver
+  become: yes
+  command: /tmp/mlnx-en-3.1-1.0.4/install.sh --batch
+
+- name: Remove Build Directory
+  become: yes
+  file:
+    path=/tmp/mlnx-en-3.1-1.0.4
+    state=absent
+
+- name: Remove Build files
+  become: yes
+  file:
+    path=/tmp/mlnx-en-3.1-1.0.4.tgz
+    state=absent
+
+- name: Remove Mellanox Service files
+  become: yes
+  file:
+    path=/etc/init/mlnx-en.conf
+    state=absent
+
+- name: Remove Mellanox Init Script
+  become: yes
+  file:
+    path=/etc/init.d/mlnx-en.d
+    state=absent