3 from boto.ec2.regioninfo import RegionInfo
4 from boto.exception import EC2ResponseError
9 from sfa.util.sfalogging import logger
10 from sfa.openstack.nova_shell import NovaShell
11 from sfa.util.config import Config
15 A xmlrpc connection to the euca api.
18 def __init__(self, config):
20 self.nova_shell = NovaShell(config)
21 self.access_key = None
22 self.secret_key = None
24 def _init_ctx(self, username=None, project=None):
25 if username and project:
26 self.access_key = "%s:%s" % (username, project)
27 self.secret_key = self.nova_shell.auth_manager.get_user(username).secret
29 admin_user = self.nova_shell.auth_manager.get_user(self.config.SFA_NOVA_USER)
30 #access_key = admin_user.access
31 self.access_key = '%s' % admin_user.name
32 self.secret_key = admin_user.secret
36 def get_euca_connection(self, username=None, project=None):
38 logger.info('Unable to access EC2 API - boto library not found.')
41 if username and project:
42 self._init_ctx(username, project)
43 elif not self.access_key or not self.secret_key:
46 url = self.config.SFA_NOVA_API_URL
51 # Split the url into parts
52 if url.find('https://') >= 0:
54 url = url.replace('https://', '')
55 elif url.find('http://') >= 0:
57 url = url.replace('http://', '')
58 parts = url.split(':')
61 parts = parts[1].split('/')
64 path = '/'+'/'.join(parts)
65 return boto.connect_ec2(aws_access_key_id=self.access_key,
66 aws_secret_access_key=self.secret_key,
68 region=RegionInfo(None, 'eucalyptus', host),
73 def __getattr__(self, name):
74 def func(*args, **kwds):
75 conn = self.get_euca_connection()