+import boto
+from boto.ec2.regioninfo import RegionInfo
+from boto.exception import EC2ResponseError
+from sfa.util.sfalogging import logger
+
+
+class EucaShell:
+ """
+ A xmlrpc connection to the euca api.
+ """
+
+ def __init__(self, config):
+ self.config = Config
+
+ def get_euca_connection(self):
+
+ access_key = self.config.SFA_EUCA_ACCESS_KEY
+ secret_key = self.config.SFA_EUCA_SECRET_KEY
+ url = self.config.SFA_EUCA_URL
+ path = "/"
+ euca_port = self.config.SFA_EUCA_PORT
+ use_ssl = False
+
+ # Split the url into parts
+ if url.find('https://') >= 0:
+ use_ssl = True
+ url = url.replace('https://', '')
+ elif url.find('http://') >= 0:
+ use_ssl = False
+ url = url.replace('http://', '')
+ (host, parts) = url.split(':')
+ if len(parts) > 1:
+ parts = parts.split('/')
+ port = int(parts[0])
+ parts = parts[1:]
+ path = '/'.join(parts)
+
+ if not access_key or not secret_key or not url:
+ logger.error('Please set ALL of the required environment ' \
+ 'variables by sourcing the eucarc file.')
+ return None
+ return boto.connect_ec2(aws_access_key_id=access_key,
+ aws_secret_access_key=secret_key,
+ is_secure=use_ssl,
+ region=RegionInfo(None, 'eucalyptus', host),
+ port=port,
+ path=path)
+
+ def __getattr__(self, name):
+ def func(*args, **kwds):
+ conn = self.get_euca_connection()
+ return getattr(conn, name)(*args, **kwds)
+ return func