X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fopenstack%2Feuca_shell.py;h=e2bdf7f86d7c010fab5e961e199ff50b778a8839;hb=a138be0bc9c64130bbd365a618b0642ff9cdb7e6;hp=e47c1066b985de2a0381e45e88b903a1bf5787ae;hpb=a6c363bda8e5807e48b2a24bc9e2031209117748;p=sfa.git diff --git a/sfa/openstack/euca_shell.py b/sfa/openstack/euca_shell.py index e47c1066..e2bdf7f8 100644 --- a/sfa/openstack/euca_shell.py +++ b/sfa/openstack/euca_shell.py @@ -6,12 +6,6 @@ try: except: has_boto=False -try: - from euca2ools import Euca2ool - has_euca = True -except: - has_euca = False - from sfa.util.sfalogging import logger from sfa.openstack.nova_shell import NovaShell from sfa.util.config import Config @@ -23,25 +17,38 @@ class EucaShell: def __init__(self, config): self.config = config + self.nova_shell = NovaShell(config) + self.access_key = None + self.secret_key = None - def get_euca_connection(self): + def init_context(self, project_name=None): + + # use the context of the specified project's project + # manager. + if project_name: + project = self.nova_shell.auth_manager.get_project(project_name) + self.access_key = "%s:%s" % (project.project_manager.name, project_name) + self.secret_key = project.project_manager.secret + else: + # use admin user's context + admin_user = self.nova_shell.auth_manager.get_user(self.config.SFA_NOVA_USER) + #access_key = admin_user.access + self.access_key = '%s' % admin_user.name + self.secret_key = admin_user.secret + + def get_euca_connection(self, project_name=None): if not has_boto: logger.info('Unable to access EC2 API - boto library not found.') return None - if not has_euca: - logger.info('euca2ools library not found.') - return None - self.euca2ool = Euca2ool() - nova = NovaShell(self.config) - admin_user = nova.auth_manager.get_user(self.config.SFA_NOVA_USER) - access_key = admin_user.access - secret_key = admin_user.secret + if not self.access_key or not self.secret_key: + self.init_context(project_name) + url = self.config.SFA_NOVA_API_URL + host = None + port = None path = "/" - euca_port = self.config.SFA_NOVA_API_PORT use_ssl = False - # Split the url into parts if url.find('https://') >= 0: use_ssl = True @@ -51,22 +58,20 @@ class EucaShell: url = url.replace('http://', '') parts = url.split(':') host = parts[0] - port = None if len(parts) > 1: - parts = parts.split('/') + parts = parts[1].split('/') port = int(parts[0]) parts = parts[1:] - path = '/'.join(parts) - - return boto.connect_ec2(aws_access_key_id=access_key, - aws_secret_access_key=secret_key, + path = '/'+'/'.join(parts) + return boto.connect_ec2(aws_access_key_id=self.access_key, + aws_secret_access_key=self.secret_key, is_secure=use_ssl, region=RegionInfo(None, 'eucalyptus', host), + host=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 +