[CalendarServer-changes] [8918] CalendarServer/trunk/contrib/migration

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 21 16:39:33 PDT 2012


Revision: 8918
          http://trac.macosforge.org/projects/calendarserver/changeset/8918
Author:   sagen at apple.com
Date:     2012-03-21 16:39:33 -0700 (Wed, 21 Mar 2012)
Log Message:
-----------
When migrating, examine previous run state of CalDAV/CardDAV and set appropriately on new system.

Modified Paths:
--------------
    CalendarServer/trunk/contrib/migration/calendarmigrator.py
    CalendarServer/trunk/contrib/migration/test/test_migrator.py

Modified: CalendarServer/trunk/contrib/migration/calendarmigrator.py
===================================================================
--- CalendarServer/trunk/contrib/migration/calendarmigrator.py	2012-03-20 22:53:44 UTC (rev 8917)
+++ CalendarServer/trunk/contrib/migration/calendarmigrator.py	2012-03-21 23:39:33 UTC (rev 8918)
@@ -44,6 +44,12 @@
 DITTO = "/usr/bin/ditto"
 RESOURCE_MIGRATION_TRIGGER = "trigger_resource_migration"
 
+# For looking up previous run state
+CALDAV_LAUNCHD_KEY = "org.calendarserver.calendarserver"
+CARDDAV_LAUNCHD_KEY = "org.addressbookserver.addressbookserver"
+LAUNCHD_OVERRIDES = "var/db/launchd.db/com.apple.launchd/overrides.plist"
+LAUNCHD_PREFS_DIR = "System/Library/LaunchDaemons"
+SERVER_ADMIN = "%s/usr/sbin/serveradmin" % (SERVER_APP_ROOT,)
 
 # Processed by mergePlist
 specialKeys = """
@@ -109,6 +115,8 @@
 
         if os.path.exists(options.sourceRoot):
 
+            enableCalDAV, enableCardDAV = examineRunState(options)
+
             # Pull values out of previous plists
             (
                 oldServerRootValue,
@@ -144,6 +152,8 @@
                 options,
                 newServerRootValue,
                 newDataRootValue,
+                enableCalDAV,
+                enableCardDAV
             )
 
             # Create log directory
@@ -159,15 +169,118 @@
             # Trigger migration of locations and resources from OD
             triggerResourceMigration(newServerRoot)
 
+            setRunState(options, enableCalDAV, enableCardDAV)
 
     else:
         log("ERROR: --sourceRoot and --sourceVersion must be specified")
         sys.exit(1)
 
 
+def examineRunState(options):
+    """
+    Try to determine whether the CalDAV and CardDAV services were running in
+    previous system.
 
-def migrateConfiguration(options, newServerRootValue, newDataRootValue):
+    @return: a tuple of booleans: whether CalDAV was enabled, and whether
+    CardDAV was enabled
     """
+
+    enableCalDAV = None
+    enableCardDAV = None
+
+    try:
+        disabled = isServiceDisabled(options.sourceRoot, CALDAV_LAUNCHD_KEY)
+        enableCalDAV = not disabled
+        log("Calendar service '%s' was previously %s" %
+            (CALDAV_LAUNCHD_KEY, "disabled" if disabled else "enabled"))
+    except ServiceStateError, e:
+        log("Couldn't determine previous state of calendar service '%s': %s" %
+            (CALDAV_LAUNCHD_KEY, e))
+
+    try:
+        disabled = isServiceDisabled(options.sourceRoot, CARDDAV_LAUNCHD_KEY)
+        enableCardDAV = not disabled
+        log("Addressbook service '%s' was previously %s" %
+            (CARDDAV_LAUNCHD_KEY, "disabled" if disabled else "enabled"))
+    except ServiceStateError, e:
+        log("Couldn't determine previous state of addressbook service '%s': %s" %
+            (CARDDAV_LAUNCHD_KEY, e))
+
+    if enableCalDAV:
+        # Check previous plist in case previous system was Lion, since there
+        # is now only one launchd key for both services
+        oldCalDAVPlistPath = os.path.join(options.sourceRoot,
+            CALDAVD_CONFIG_DIR, CALDAVD_PLIST)
+        if os.path.exists(oldCalDAVPlistPath):
+            log("Examining previous caldavd.plist for EnableCalDAV and EnableCardDAV: %s" % (oldCalDAVPlistPath,))
+            oldCalDAVDPlist = readPlist(oldCalDAVPlistPath)
+            if "EnableCalDAV" in oldCalDAVDPlist:
+                enableCalDAV = oldCalDAVDPlist["EnableCalDAV"]
+                log("Based on caldavd.plist, setting EnableCalDAV to %s" % (enableCalDAV,))
+            if "EnableCardDAV" in oldCalDAVDPlist:
+                enableCardDAV = oldCalDAVDPlist["EnableCardDAV"]
+                log("Based on caldavd.plist, setting EnableCardDAV to %s" % (enableCardDAV,))
+
+    # A value of None means we weren't able to determine, so default to off
+    if enableCalDAV is None:
+        enableCalDAV = False
+    if enableCardDAV is None:
+        enableCardDAV = False
+
+    return (enableCalDAV, enableCardDAV)
+
+
+def setRunState(options, enableCalDAV, enableCardDAV):
+    """
+    Use serveradmin to launch the service if needed.
+    """
+
+    if enableCalDAV or enableCardDAV:
+        serviceName = "calendar" if enableCalDAV else "addressbook"
+        log("Starting service via serveradmin start %s" % (serviceName,))
+        ret = subprocess.call([SERVER_ADMIN, "start", serviceName])
+        log("serveradmin exited with %d" % (ret,))
+
+
+def isServiceDisabled(source, service):
+    """
+    Returns whether or not a service is disabled
+
+    @param source: System root to examine
+    @param service: launchd key representing service
+    @return: True if service is disabled, False if enabled
+    """
+
+    overridesPath = os.path.join(source, LAUNCHD_OVERRIDES)
+    if os.path.isfile(overridesPath):
+        overrides = readPlist(overridesPath)
+        try:
+            return overrides[service]['Disabled']
+        except KeyError:
+            # Key is not in the overrides.plist, continue on
+            pass
+
+    prefsPath = os.path.join(source, LAUNCHD_PREFS_DIR, "%s.plist" % service)
+    if os.path.isfile(prefsPath):
+        prefs = readPlist(prefsPath)
+        try:
+            return prefs['Disabled']
+        except KeyError:
+            return False
+
+    raise ServiceStateError("Neither %s nor %s exist" %
+        (overridesPath, prefsPath))
+
+
+class ServiceStateError(Exception):
+    """
+    Could not determine service state
+    """
+
+
+
+def migrateConfiguration(options, newServerRootValue, newDataRootValue, enableCalDAV, enableCardDAV):
+    """
     Copy files/directories/symlinks from previous system's /etc/caldavd
     and /etc/carddavd
 
@@ -251,6 +364,10 @@
     newCalDAVDPlist["DocumentRoot"] = "Documents"
     newCalDAVDPlist["DataRoot"] = newDataRootValue
 
+    newCalDAVDPlist["EnableCalDAV"] = enableCalDAV
+    newCalDAVDPlist["EnableCardDAV"] = enableCardDAV
+
+
     log("Writing %s" % (newConfigFile,))
     writePlist(newCalDAVDPlist, newConfigFile)
 
@@ -331,12 +448,7 @@
     # If SSL is enabled, redirect HTTP to HTTPS.
     combined["RedirectHTTPToHTTPS"] = enableSSL
 
-    # Default services to disabled
-    combined["EnableCalDAV"] = False
-    combined["EnableCardDAV"] = False
 
-
-
 def log(msg):
     try:
         timestamp = datetime.datetime.now().strftime("%b %d %H:%M:%S")

Modified: CalendarServer/trunk/contrib/migration/test/test_migrator.py
===================================================================
--- CalendarServer/trunk/contrib/migration/test/test_migrator.py	2012-03-20 22:53:44 UTC (rev 8917)
+++ CalendarServer/trunk/contrib/migration/test/test_migrator.py	2012-03-21 23:39:33 UTC (rev 8918)
@@ -95,8 +95,6 @@
             "SSLCertificate": "/etc/certificates/test.cert.pem",
             "SSLPort": 8443,
             "SSLPrivateKey": "/etc/certificates/test.key.pem",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -133,8 +131,6 @@
             "SSLCertificate": "",
             "SSLPort": 8443,
             "SSLPrivateKey": "",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -171,8 +167,6 @@
             "SSLCertificate": "/etc/certificates/test.cert.pem",
             "SSLPort": 8443,
             "SSLPrivateKey": "/etc/certificates/test.key.pem",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -209,8 +203,6 @@
             "SSLCertificate": "/etc/certificates/test.cert.pem",
             "SSLPort": 8443,
             "SSLPrivateKey": "/etc/certificates/test.key.pem",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -247,8 +239,6 @@
             "SSLCertificate": "/etc/certificates/test.cert.pem",
             "SSLPort": 9999,
             "SSLPrivateKey": "/etc/certificates/test.key.pem",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -282,8 +272,6 @@
             "SSLCertificate": "",
             "SSLPort": 8443,
             "SSLPrivateKey": "",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -312,8 +300,6 @@
             "SSLCertificate": "/etc/certificates/test.cert.pem",
             "SSLPort": 8443,
             "SSLPrivateKey": "/etc/certificates/test.key.pem",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -333,8 +319,6 @@
             "SSLCertificate": "",
             "SSLPort": 8443,
             "SSLPrivateKey": "",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -380,8 +364,6 @@
             "SSLCertificate": "",
             "SSLPort": 8443,
             "SSLPrivateKey": "",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -419,8 +401,6 @@
             "SSLCertificate": "",
             "SSLPort": 8443,
             "SSLPrivateKey": "",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
@@ -458,8 +438,6 @@
             "SSLCertificate": "",
             "SSLPort": 8443,
             "SSLPrivateKey": "",
-            "EnableCalDAV" : False,
-            "EnableCardDAV" : False,
         }
         newCombined = { }
         mergePlist(oldCalDAV, oldCardDAV, newCombined)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120321/50dc8e78/attachment-0001.html>


More information about the calendarserver-changes mailing list