xenserver: Rename monitor-external-ids -> ovs-external-ids
[sliver-openvswitch.git] / xenserver / etc_init.d_openvswitch
index 0988fcc..e464109 100755 (executable)
@@ -117,6 +117,12 @@ else
     monitor_opt=
 fi
 
+function hup_monitor_external_ids {
+    if [ -e /var/run/openvswitch/ovs-external-ids.pid ]; then
+        action "Configuring Open vSwitch external IDs" kill -HUP `cat /var/run/openvswitch/ovs-external-ids.pid`
+    fi
+}
+
 function dp_list {
     "$dpctl" show | grep '^dp[0-9]\+:' | cut -d':' -f 1
 }
@@ -254,6 +260,13 @@ function stop_daemon {
     if test -f "$pidfile"; then
         local pid=$(cat "$pidfile")
         action "Killing `basename $BINARY` ($pid)" kill $pid
+        for delay in .1 .25 .65 1 1 1 1; do
+            if kill -0 $pid >/dev/null 2>&1; then
+                sleep $delay
+            else
+                break
+            fi
+        done
         rm -f "$pidfile"
     fi
 }
@@ -283,12 +296,16 @@ EOF
     esac
 }
 
-function set_system_uuid {
-    if test -n "$INSTALLATION_UUID"; then
-        action "Configuring Open vSwitch system UUID" true
-        $vsctl --no-wait set Open_vSwitch . external-ids:system-uuid="$INSTALLATION_UUID"
+function set_system_ids {
+    if [ -f /etc/xensource-inventory ]; then
+        action "Configuring Open vSwitch system IDs" true
+        $vsctl --no-wait --timeout=5 set Open_vSwitch . \
+            external-ids:system-type="$PRODUCT_BRAND" \
+            external-ids:system-version="$PRODUCT_VERSION-$BUILD_NUMBER" \
+            external-ids:system-id="$INSTALLATION_UUID" \
+            external-ids:xs-system-uuid="$INSTALLATION_UUID"
     else
-        action "Configuring Open vSwitch system UUID" false
+        action "Configuring Open vSwitch system IDs" false
     fi
 }
 
@@ -318,20 +335,26 @@ function start {
     fi
 
     start_ovsdb_server
-    $vsctl --no-wait init
+    $vsctl --no-wait --timeout=5 init
     if [ ! -e /var/run/openvswitch.booted ]; then
         touch /var/run/openvswitch.booted
         for bridge in $($vsctl list-br); do
-            $vsctl --no-wait del-br $bridge
+            $vsctl --no-wait --timeout=5 del-br $bridge
         done
     fi
 
-    set_system_uuid
+    set_system_ids
 
     start_vswitchd
     if [ "${ENABLE_BRCOMPAT}" = "y" ] ; then
         start_brcompatd
     fi
+
+    # Start daemon to monitor external ids
+    PYTHONPATH=/usr/share/openvswitch/python \
+               /usr/share/openvswitch/scripts/ovs-external-ids \
+               --pidfile --detach "$VSWITCHD_OVSDB_SERVER"
+
     touch /var/lock/subsys/openvswitch
 }
 
@@ -339,6 +362,9 @@ function stop {
     stop_daemon BRCOMPATD "$brcompatd"
     stop_daemon VSWITCHD "$vswitchd"
     stop_daemon OVSDB_SERVER "$ovsdb_server"
+    if [ -e /var/run/openvswitch/ovs-external-ids.pid ]; then
+        kill `cat /var/run/openvswitch/ovs-external-ids.pid`
+    fi
     rm -f /var/lock/subsys/openvswitch
 }
 
@@ -360,8 +386,10 @@ case "$1" in
         restart
         ;;
     reload|force-reload)
-       # Nothing to do--ovs-vswitchd and ovsdb-server keep their configuration
-       # up-to-date all the time.
+        # Nothing to do to ovs-vswitchd and ovsdb-server as they keep their
+        # configuration up-to-date all the time.  HUP ovs-external-ids so it
+        # re-runs.
+        hup_monitor_external_ids
        ;;
     strace-vswitchd)
         shift