shebags mention python2 explicitly
[bootmanager.git] / source / steps / InitializeBootManager.py
index dfe3399..75fd10f 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python2
 #
 # Copyright (c) 2003 Intel Corporation
 # All rights reserved.
@@ -6,8 +6,11 @@
 # Copyright (c) 2004-2006 The Trustees of Princeton University
 # All rights reserved.
 
+from __future__ import print_function
+
 import os
 import xmlrpclib
+import ssl
 import socket
 import string
 
@@ -45,20 +48,38 @@ def Run(vars, log):
 
     # define the basic partition paths
     PARTITIONS = {}
-    PARTITIONS["root"] = "/dev/planetlab/root"
-    PARTITIONS["swap"] = "/dev/planetlab/swap"
-    PARTITIONS["vservers"] = "/dev/planetlab/vservers"
+#    PARTITIONS["root"] = "/dev/planetlab/root"
+#    PARTITIONS["swap"] = "/dev/planetlab/swap"
+#    PARTITIONS["vservers"] = "/dev/planetlab/vservers"
     # Linux 2.6 mounts LVM with device mapper
-    PARTITIONS["mapper-root"] = "/dev/mapper/planetlab-root"
-    PARTITIONS["mapper-swap"] = "/dev/mapper/planetlab-swap"
-    PARTITIONS["mapper-vservers"] = "/dev/mapper/planetlab-vservers"
+    PARTITIONS["root"] = "/dev/mapper/planetlab-root"
+    PARTITIONS["swap"] = "/dev/mapper/planetlab-swap"
+    PARTITIONS["vservers"] = "/dev/mapper/planetlab-vservers"
     vars["PARTITIONS"] = PARTITIONS
 
     log.write("Opening connection to API server\n")
     try:
-        api_inst = xmlrpclib.Server(vars['BOOT_API_SERVER'], verbose=0)
-    except KeyError as e:
+        server_url = vars['BOOT_API_SERVER']
+    except:
         raise BootManagerException("configuration file does not specify API server URL")
+        
+    api_inst = None
+    # preferred strategy : select tlsv1 as the encryption protocol
+    try:
+        ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        api_inst = xmlrpclib.ServerProxy(server_url,
+                                         context=ssl_context,
+                                         verbose=0)
+    # this is only supported in python >= 2.7.9 though, so allow for failure
+    except:
+        print("Default xmlrpclib strategy failed")
+        import traceback
+        traceback.print_exc()
+        pass
+
+    # if that failed, resort to the old-fashioned code
+    if api_inst is None:
+        api_inst = xmlrpclib.ServerProxy(server_url, verbose=0)
 
     vars['API_SERVER_INST'] = api_inst