xenserver: Make RPM install work again.
authorBen Pfaff <blp@nicira.com>
Fri, 11 Sep 2009 21:41:39 +0000 (14:41 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 11 Sep 2009 21:41:39 +0000 (14:41 -0700)
The RPM install was generating a database cache in Python pickle format in
/etc/ovs-vswitchd.conf, but interface-reconfigure was looking for it in
XML format in /var/lib/openvswitch/dbcache.  This fixes the problem, by
adding an init-dbcache command to interface-reconfigure and then using that
at RPM install time.

This moves the database cache creation from %pre to %post.  This is
necessary so that interface-reconfigure is available from the install
script.

xenserver/opt_xensource_libexec_interface-reconfigure
xenserver/vswitch-xen.spec

index 5681d02d2f6ea7b9abd598065046b0c1eb42e70e..70749b8a36dd66fa69f84f30e57a6d161d0174cb 100755 (executable)
@@ -8,6 +8,7 @@
     %(command-name)s --session <SESSION-REF> --pif <PIF-REF> [up|down|rewrite]
     %(command-name)s --force <BRIDGE> [up|down|rewrite <CONFIG>]
     %(command-name)s --force all down
+    %(command-name)s init-dbcache
 
     where,
           <CONFIG> = --device=<INTERFACE> --mode=dhcp
@@ -1441,6 +1442,9 @@ def main(argv=None):
         if len(force_rewrite_config) and not (force_interface and action == "rewrite"):
             raise Usage("\"--force rewrite\" needed for --device, --mode, --ip, --netmask, and --gateway")
 
+        if action == "init-dbcache" and arglist:
+            raise Usage("\"init-dbcache\" action does not accept any options")
+
         global db
         if force_interface:
             log("Force interface %s %s" % (force_interface, action))
@@ -1458,6 +1462,8 @@ def main(argv=None):
                     action_down(pif)
                 else:
                     raise Usage("Unknown action %s"  % action)
+        elif action == "init-dbcache":
+            DatabaseCache().save(dbcache_file)
         else:
             db = DatabaseCache(session_ref=session)
 
index 886834f507a622c9e554760a65c38398429a8715..6a218ab661c1bc3c2094fcfb1a739338c8cb32c2 100644 (file)
@@ -106,10 +106,12 @@ rm -rf \
     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-pki.8 \
     $RPM_BUILD_ROOT/root/vswitch/share/openvswitch
 
+install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
+
 %clean
 rm -rf $RPM_BUILD_ROOT
 
-%pre
+%post
 if [ ! -f /etc/xensource-inventory ]; then
     printf "XenSource inventory not present in /etc/xensource-inventory"
     exit 1
@@ -146,7 +148,7 @@ EOF
     fi
 fi
 
-if test ! -e /etc/ovs-vswitch.dbcache; then
+if test ! -e /var/lib/openvswitch/dbcache; then
     if test "$1" = 1; then
         printf "Creating xapi database cache...  "
     else
@@ -155,34 +157,7 @@ if test ! -e /etc/ovs-vswitch.dbcache; then
         printf "Re-creating xapi database cache...  "
     fi
 
-    source /etc/xensource-inventory
-    if python - "$INSTALLATION_UUID" <<EOF
-import XenAPI
-import pickle
-import sys
-
-session = XenAPI.xapi_local()
-try:
-    session.xenapi.login_with_password("root", "")
-
-    vlans = session.xenapi.VLAN.get_all_records()
-    bonds = session.xenapi.Bond.get_all_records()
-    pifs = session.xenapi.PIF.get_all_records()
-    networks = session.xenapi.network.get_all_records()
-    host = session.xenapi.host.get_by_uuid(sys.argv[1])
-finally:
-    session.xenapi.session.logout()
-
-dbcache_file = "/etc/ovs-vswitch.dbcache"
-f = open(dbcache_file, 'w')
-pickle.dump({'vlans': vlans,
-             'bonds': bonds,
-             'pifs': pifs,
-             'networks': networks}, f)
-pickle.dump({'host': host}, f)
-f.close()
-EOF
-    then
+    if /root/vswitch/scripts/interface-reconfigure init-dbcache; then
         printf "done.\n"
     else
         printf "FAILED\n"
@@ -193,7 +168,6 @@ EOF
     fi
 fi
 
-%post
 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
     cat >>/etc/sysctl.conf <<EOF
 # This works around an issue in xhad, which binds to a particular
@@ -357,3 +331,4 @@ fi
 /root/vswitch/share/man/man8/ovs-dpctl.8
 /root/vswitch/share/man/man8/ovs-ofctl.8
 /root/vswitch/share/man/man8/ovs-vswitchd.8
+/var/lib/openvswitch