updates to fix buts around reboot and interface generation as well as adding more customizations
diff --git a/roles/compute-node/files/rename_ifaces.sh b/roles/compute-node/files/rename_ifaces.sh
index be08ba5..131ea10 100755
--- a/roles/compute-node/files/rename_ifaces.sh
+++ b/roles/compute-node/files/rename_ifaces.sh
@@ -81,6 +81,7 @@
     done
 }
 
+# 40G_LIST ETH_LIST FAB_IFACE EXT_IFACE MGT_IFACE
 function generate_interfaces {
     OUT=$IFACES_FILE
     rm -rf $OUT
@@ -93,14 +94,13 @@
     echo "" >> $OUT
 
     IDX=0
-    FIRST=1
     for i in $(cat $1); do
-        if [ $FIRST -eq 1 ]; then
+        if [ "eth$IDX" == "$3" ]; then
             echo "auto eth$IDX" >> $OUT
             echo "iface eth$IDX inet static" >> $OUT
-            echo "    address $IP" >> $OUT
-            echo "    network $NETWORK" >> $OUT
-            echo "    netmask $NETMASK" >> $OUT
+            echo "    address $FAB_IP" >> $OUT
+            echo "    network $FAB_NETWORK" >> $OUT
+            echo "    netmask $FAB_NETMASK" >> $OUT
             FIRST=0
         else
             echo "iface eth$IDX inet manual" >> $OUT
@@ -109,12 +109,27 @@
         IDX=$(expr $IDX + 1)
     done
 
-    FIRST=1
     for i in $(cat $2); do
-        if [ $FIRST -eq 1 ]; then
+        if [ "eth$IDX" == "$4" ]; then
+            if [ "$EXT_IP" == "dhcp" ]; then
+		echo "auto eth$IDX" >> $OUT
+                echo "iface eth$IDX inet dhcp" >> $OUT
+            elif [ "$EXT_IP" == "manual" ]; then
+		echo "iface eth$IDX inet manual" >> $OUT
+            else
+		echo "auto eth$IDX" >> $OUT
+                echo "iface eth$IDX inet static" >> $OUT
+                echo "    address $EXT_IP" >> $OUT
+                echo "    network $EXT_NETWORK" >> $OUT
+                echo "    netmask $EXT_NETMASK" >> $OUT
+                echo "    broadcast $EXT_BROADCAST" >> $OUT
+                echo "    gateway $EXT_GW" >> $OUT
+		echo "    dns-nameservers 8.8.8.8 8.8.4.4" >> $OUT
+		echo "    dns-search cord.lab" >> $OUT
+            fi
+        elif [ "eth$IDX" == "$5" ]; then
             echo "auto eth$IDX" >> $OUT
             echo "iface eth$IDX inet dhcp" >> $OUT
-            FIRST=0
         else
             echo "iface eth$IDX inet manual" >> $OUT
         fi
@@ -123,11 +138,24 @@
     done
 }
 
-ADDR=$1
-IP=$(echo $ADDR | cut -d/ -f1)
-MASKBITS=$(echo $ADDR | cut -d/ -f2)
-NETWORK=$(network $IP $MASKBITS)
-NETMASK=$(netmask $MASKBITS)
+FAB_IFACE=$1
+FAB_ADDR=$2
+FAB_IP=$(echo $FAB_ADDR | cut -d/ -f1)
+FAB_MASKBITS=$(echo $FAB_ADDR | cut -d/ -f2)
+FAB_NETWORK=$(network $FAB_IP $FAB_MASKBITS)
+FAB_NETMASK=$(netmask $FAB_MASKBITS)
+
+EXT_IFACE=$3
+EXT_ADDR=$4
+if [ "$EXT_ADDR" != "dhcp" ]; then
+    EXT_IP=$(echo $EXT_ADDR | cut -d/ -f1)
+    EXT_MASKBITS=$(echo $EXT_ADDR | cut -d/ -f2)
+    EXT_NETWORK=$(network $EXT_IP $EXT_MASKBITS)
+    EXT_NETMASK=$(netmask $EXT_MASKBITS)
+    EXT_BROADCAST=$(broadcast $EXT_IP $EXT_MASKBITS)
+    EXT_GW=$(first $EXT_ADDR)
+fi
+MGT_IFACE=$5
 
 LIST_ETH=$(mktemp -u)
 LIST_40G=$(mktemp -u)
@@ -149,26 +177,27 @@
     esac
 done
 
-RESULT="false"
+CHANGED="false"
 
-generate_interfaces $LIST_40G $LIST_ETH
+generate_interfaces $LIST_40G $LIST_ETH $FAB_IFACE $EXT_IFACE $MGT_IFACE
+
 diff /etc/network/interfaces $IFACES_FILE 2>&1 > /dev/null
 if [ $? -ne 0 ]; then
-  RESULT="true"
+  CHANGED="true"
   cp /etc/network/interfaces /etc/network/interfaces.1
   cp $IFACES_FILE /etc/network/interfaces
 fi
 
-generate_persistent_names $LIST_40G $LIST_ETH
+generate_persistent_names $LIST_40G $LIST_ETH $FAB_IFACE $EXT_IFACE
 if [ -r /etc/udev/rules.d/70-persistent-net.rules ]; then
   diff /etc/udev/rules.d/70-persistent-net.rules $NAMES_FILE 2>&1 > /dev/null
   if [ $? -ne 0 ]; then
-    RESULT="true"
+    CHANGED="true"
     cp /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.1
     cp $NAMES_FILE /etc/udev/rules.d/70-persistent-net.rules
   fi
 else
-  RESULT="true"
+  CHANGED="true"
   cp $NAMES_FILE /etc/udev/rules.d/70-persistent-net.rules
 fi
 
@@ -177,4 +206,4 @@
 rm -rf $LIST_ETH
 rm -rf $LIST_40G
 
-echo -n $RESULT
+echo -n $CHANGED
diff --git a/roles/compute-node/tasks/main.yml b/roles/compute-node/tasks/main.yml
index b5160a6..4eeac12 100644
--- a/roles/compute-node/tasks/main.yml
+++ b/roles/compute-node/tasks/main.yml
@@ -1,4 +1,12 @@
 ---
+- name: Verify Manditory Variables
+  fail: msg="Variable '{{ item }}' is not defined"
+  when: item not in hostvars[inventory_hostname]
+  with_items:
+    - fabric_ip
+  tags:
+    - interface_config
+
 - name: Applications
   become: yes
   apt: name={{ item }} state=latest force=yes 
@@ -70,16 +78,16 @@
 
 - name: Consistent Interface Naming
   become: yes
-  script: files/rename_ifaces.sh {{ fabric_ip }}
+  script: files/rename_ifaces.sh {{ compute_node.interfaces.fabric }} {{ compute_node.addresses.fabric }} {{ compute_node.interfaces.external }} {{ compute_node.addresses.external }} {{ compute_node.interfaces.management }}
   register: ifaces_changed
-  changed_when: ifaces_changed.stdout != "false"
+  changed_when: ifaces_changed.stdout.find("true") != -1
   tags:
     - interface_config
 
 - name: Reboot Required
   become: yes
   command: /sbin/reboot
-  async: 1
+  async: 0
   poll: 0
   ignore_errors: true
   when: ifaces_changed.stdout != "false"
@@ -87,6 +95,7 @@
     - interface_config
 
 - name: Wait For Restart
-  local_action: wait_for host={{ ansible_host }} state=started port=22 delay=30 search_regex=OpenSSH timeout=600
+  local_action: wait_for port=22 host={{ inventory_hostname }} search_regex=OpenSSH delay=30 timeout=600 connect_timeout=15
+  when: ifaces_changed.stdout != "false"
   tags:
     - interface_config
diff --git a/roles/compute-node/vars/main.yml b/roles/compute-node/vars/main.yml
index 6d1a0cd..d240443 100644
--- a/roles/compute-node/vars/main.yml
+++ b/roles/compute-node/vars/main.yml
@@ -1 +1,11 @@
 pub_ssh_key: "{{ lookup('file', 'files/id_rsa.pub') }}"
+
+compute_node:
+    interfaces:
+        fabric: "{{ fabric_iface | default('eth0') }}"
+        management: "{{ management_iface | default('eth2') }}"
+        external: "{{ external_iface | default('eth3') }}"
+    addresses:
+        fabric: "{{ fabric_ip | mandatory }}"
+        management: "{{ management_ip | default('dhcp') }}"
+        external: "{{ external_ip | default('manual') }}"