git://git.onelab.eu
/
plcapi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
====
[plcapi.git]
/
PLC
/
Shell.py
diff --git
a/PLC/Shell.py
b/PLC/Shell.py
index
e0d7fbd
..
df87e1c
100644
(file)
--- a/
PLC/Shell.py
+++ b/
PLC/Shell.py
@@
-5,9
+5,8
@@
# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2005 The Trustees of Princeton University
#
# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2005 The Trustees of Princeton University
#
-# $Id: Shell.py,v 1.18 2006/12/15 18:36:16 mlhuang Exp $
-#
+import os
import pydoc
import xmlrpclib
import pydoc
import xmlrpclib
@@
-57,8
+56,12
@@
class Shell:
config = None,
# XML-RPC server
url = None, xmlrpc = False, cacert = None,
config = None,
# XML-RPC server
url = None, xmlrpc = False, cacert = None,
- # API authentication
- method = None, role = None, user = None, password = None):
+ # API authentication method
+ method = None,
+ # Password authentication
+ role = None, user = None, password = None,
+ # Session authentication
+ session = None):
"""
Initialize a new shell instance. Re-initializes globals.
"""
"""
Initialize a new shell instance. Re-initializes globals.
"""
@@
-80,20
+83,20
@@
class Shell:
else:
self.api = PLCAPI(config)
self.config = self.api.config
else:
self.api = PLCAPI(config)
self.config = self.api.config
+ self.url = None
self.server = None
except Exception, err:
# Try connecting to the API server via XML-RPC
self.api = PLCAPI(None)
self.server = None
except Exception, err:
# Try connecting to the API server via XML-RPC
self.api = PLCAPI(None)
-
if config is None
:
- self.config = Config()
- else:
-
try
:
+
try
:
+ if config is None:
+ self.config = Config()
+
else
:
self.config = Config(config)
self.config = Config(config)
- except Exception, err:
- # Try to continue if no configuration file is available
- self.config = None
- pass
+ except Exception, err:
+ # Try to continue if no configuration file is available
+ self.config = None
if url is None:
if self.config is None:
if url is None:
if self.config is None:
@@
-103,16
+106,25
@@
class Shell:
":" + str(self.config.PLC_API_PORT) + \
"/" + self.config.PLC_API_PATH + "/"
":" + str(self.config.PLC_API_PORT) + \
"/" + self.config.PLC_API_PATH + "/"
-
if cacert is None and self.config is not
None:
- cacert = self.config.PLC_API_CA_SSL_CRT
+
if cacert is
None:
+
cacert = self.config.PLC_API_CA_SSL_CRT
- self.server = xmlrpclib.ServerProxy(url, PyCurlTransport(url, cacert), allow_none = 1)
+ self.url = url
+ if cacert is not None:
+ self.server = xmlrpclib.ServerProxy(url, PyCurlTransport(url, cacert), allow_none = 1)
+ else:
+ self.server = xmlrpclib.ServerProxy(url, allow_none = 1)
# Set up authentication structure
# Set up authentication structure
- # Default is to use capability authentication
+ # Default is to use
session or
capability authentication
if (method, user, password) == (None, None, None):
if (method, user, password) == (None, None, None):
- method = "capability"
+ if session is not None or os.path.exists("/etc/planetlab/session"):
+ method = "session"
+ if session is None:
+ session = "/etc/planetlab/session"
+ else:
+ method = "capability"
if method == "capability":
# Load defaults from configuration file if using capability
if method == "capability":
# Load defaults from configuration file if using capability
@@
-129,6
+141,14
@@
class Shell:
if role == "anonymous" or method == "anonymous":
self.auth = {'AuthMethod': "anonymous"}
if role == "anonymous" or method == "anonymous":
self.auth = {'AuthMethod': "anonymous"}
+ elif method == "session":
+ if session is None:
+ raise Exception, "Must specify session"
+
+ if os.path.exists(session):
+ session = file(session).read()
+
+ self.auth = {'AuthMethod': "session", 'session': session}
else:
if user is None:
raise Exception, "Must specify username"
else:
if user is None:
raise Exception, "Must specify username"
@@
-143,7
+163,7
@@
class Shell:
if role is not None:
self.auth['Role'] = role
if role is not None:
self.auth['Role'] = role
- for method in PLC.
Methods.
methods:
+ for method in PLC.
API.PLCAPI.all_
methods:
api_function = self.api.callable(method)
if self.server is None:
api_function = self.api.callable(method)
if self.server is None: