From 54741d0818453d1a64f1ce7d82fb6e9fe058956e Mon Sep 17 00:00:00 2001
From: smbaker <smbaker@fc8clean.lan>
Date: Thu, 3 Jan 2013 09:45:11 -0800
Subject: [PATCH] check to make sure openvswitch is running before configuring
 ovs_bridge

---
 plnet.py | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)
 mode change 100755 => 100644 plnet.py

diff --git a/plnet.py b/plnet.py
old mode 100755
new mode 100644
index b46d720..d8f3322
--- a/plnet.py
+++ b/plnet.py
@@ -13,6 +13,20 @@ import modprobe
 global version
 version = 4.3
 
+def ovs_check(logger):
+    """ Return True if openvswitch is running, False otherwise. Try restarting
+        it once.
+    """
+    rc = os.system("service openvswitch status")
+    if rc!=0:
+        logger.log("net: restarting openvswitch")
+        rc = os.system("service openvswitch restart")
+    rc = os.system("service openvswitch status")
+    if rc!=0:
+        logger.log("net: failed to restart openvswitch")
+        return False
+    return True
+
 def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeManager"):
     global version
 
@@ -127,9 +141,14 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
                 elif settingname in [ 'BRIDGE' ]:
                     details['BRIDGE'] = setting['value']
                 elif settingname in [ 'OVS_BRIDGE' ]:
-                    details['OVS_BRIDGE'] = setting['value']
-                    details['TYPE'] = "OVSPort"
-                    details['DEVICETYPE'] = "ovs"
+                    # If openvswitch isn't running, then we'll lose network
+                    # connectivity when we reconfigure eth0.
+                    if ovs_check(logger):
+                        details['OVS_BRIDGE'] = setting['value']
+                        details['TYPE'] = "OVSPort"
+                        details['DEVICETYPE'] = "ovs"
+                    else:
+                        logger.log("net:InitInterfaces ERROR: OVS_BRIDGE specified, yet ovs is not running")
                 else:
                     logger.log("net:InitInterfaces WARNING: ignored setting named %s"%setting[name_key])
 
-- 
2.47.0