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
16 A xmlrpc connection to the euca api.
19 def __init__(self, config):
21 self.nova_shell = NovaShell(config)
22 self.access_key = None
23 self.secret_key = None
25 def init_context(self, project_name=None):
27 # use the context of the specified project's project
30 project = self.nova_shell.auth_manager.get_project(project_name)
31 self.access_key = "%s:%s" % (
32 project.project_manager.name, project_name)
33 self.secret_key = project.project_manager.secret
35 # use admin user's context
36 admin_user = self.nova_shell.auth_manager.get_user(
37 self.config.SFA_NOVA_USER)
38 #access_key = admin_user.access
39 self.access_key = '%s' % admin_user.name
40 self.secret_key = admin_user.secret
42 def get_euca_connection(self, project_name=None):
44 logger.info('Unable to access EC2 API - boto library not found.')
47 if not self.access_key or not self.secret_key:
48 self.init_context(project_name)
50 url = self.config.SFA_NOVA_API_URL
55 # Split the url into parts
56 if url.find('https://') >= 0:
58 url = url.replace('https://', '')
59 elif url.find('http://') >= 0:
61 url = url.replace('http://', '')
62 parts = url.split(':')
65 parts = parts[1].split('/')
68 path = '/' + '/'.join(parts)
69 return boto.connect_ec2(aws_access_key_id=self.access_key,
70 aws_secret_access_key=self.secret_key,
72 region=RegionInfo(None, 'eucalyptus', host),
77 def __getattr__(self, name):
78 def func(*args, **kwds):
79 conn = self.get_euca_connection()