def __init__(self, username): self.username = username phantom_info_objects = PhantomInfoDB.objects.all() if not phantom_info_objects: raise PhantomWebException('The service is mis-configured. Please contact your sysadmin') rabbit_info_objects = RabbitInfoDB.objects.all() if not rabbit_info_objects: raise PhantomWebException('The service is mis-configured. Please contact your sysadmin') self.phantom_info = phantom_info_objects[0] self.rabbit_info = rabbit_info_objects[0] g_general_log.debug("Using dburl %s" % (self.phantom_info.dburl)) self._authz = PhantomSQL(self.phantom_info.dburl) self._user_dbobject = self._authz.get_user_object_by_display_name(username) if not self._user_dbobject: raise PhantomWebException('The user %s is not associated with cloud user database. Please contact your sysadmin' % (username)) self.access_key = self._user_dbobject.access_key ssl = self.rabbit_info.rabbitssl self._dashi_conn = DashiCeiConnection(self.rabbit_info.rabbithost, self.rabbit_info.rabbituser, self.rabbit_info.rabbitpassword, exchange=self.rabbit_info.rabbitexchange, timeout=60, port=self.rabbit_info.rabbitport, ssl=ssl) self.epum = EPUMClient(self._dashi_conn) self.dtrs = DTRSClient(self._dashi_conn) self._load_clouds()
class UserObjectMySQL(UserObject): def __init__(self, username): self.username = username phantom_info_objects = PhantomInfoDB.objects.all() if not phantom_info_objects: raise PhantomWebException('The service is mis-configured. Please contact your sysadmin') rabbit_info_objects = RabbitInfoDB.objects.all() if not rabbit_info_objects: raise PhantomWebException('The service is mis-configured. Please contact your sysadmin') self.phantom_info = phantom_info_objects[0] self.rabbit_info = rabbit_info_objects[0] g_general_log.debug("Using dburl %s" % (self.phantom_info.dburl)) self._authz = PhantomSQL(self.phantom_info.dburl) self._user_dbobject = self._authz.get_user_object_by_display_name(username) if not self._user_dbobject: raise PhantomWebException('The user %s is not associated with cloud user database. Please contact your sysadmin' % (username)) self.access_key = self._user_dbobject.access_key ssl = self.rabbit_info.rabbitssl self._dashi_conn = DashiCeiConnection(self.rabbit_info.rabbithost, self.rabbit_info.rabbituser, self.rabbit_info.rabbitpassword, exchange=self.rabbit_info.rabbitexchange, timeout=60, port=self.rabbit_info.rabbitport, ssl=ssl) self.epum = EPUMClient(self._dashi_conn) self.dtrs = DTRSClient(self._dashi_conn) self._load_clouds() def close(self): self._authz.close() def has_phantom_data(self): return True def describe_domain(self, username, domain): # TODO: this should eventually be part of the REST API describe = self.epum.describe_domain(domain, caller=username) g_general_log.info("describe_domain: %s" % describe) return describe def get_all_groups(self): domain_names = self.epum.list_domains(caller=self.access_key) domains = [] for domain in domain_names: domain_description = self.epum.describe_domain(domain, caller=self.access_key) domains.append(domain_description) return domains def get_all_lcs(self): dt_names = self.dtrs.list_dts(self.access_key) dts = [] for dt_name in dt_names: dt = self.dtrs.describe_dt(self.access_key, dt_name) dts.append(dt) return dts def load_clouds(self): self._load_clouds() def _load_clouds(self): dtrs_client = DTRSClient(self._dashi_conn) sites = dtrs_client.list_credentials(self._user_dbobject.access_key) self.iaasclouds = {} for site_name in sites: try: site_desc = dtrs_client.describe_site(site_name) desc = dtrs_client.describe_credentials(self._user_dbobject.access_key, site_name) uci = UserCloudInfo(site_name, self._user_dbobject.displayname, desc['access_key'], desc['secret_key'], desc['key_name'], site_desc['driver_class'], site_desc=site_desc) self.iaasclouds[site_name] = uci except Exception, ex: g_general_log.error("Failed trying to add the site %s to the user %s | %s" % (site_name, self._user_dbobject.displayname, str(ex)))