from keystoneauth1.identity import v3 from keystoneauth1 import session from keystoneclient.v3 import client as keystoneclient class Project(object): def __init__(self, name, uuid): self.name = name self.uuid = uuid class Keystone(object): def __init__(self, env): if env.os_identity_api_version != "3": raise Exception("Keystone v3 is required. You are using version %s" % env.os_identity_api_version) self.os_identity_api_version = env.os_identity_api_version self.os_image_api_version = env.os_image_api_version self.os_auth_url = env.os_auth_url.replace("v2.0", "v3") auth = v3.Password(username=env.os_username, password=env.os_password, project_domain_name=env.os_project_domain_name, user_domain_name=env.os_user_domain_name, project_name=env.os_project_name, auth_url=self.os_auth_url) self.session = session.Session(auth=auth) self.client = keystoneclient.Client(session=self.session, region_name=env.os_region_name) def get_projects(self): return map(lambda x: Project(x.name, x.id), [p for p in self.client.projects.list() if p.enabled]) def get_catalog_url(self, service_type=None, endpoint_type="publicURL"): return self.session.get_endpoint(service_type=service_type, endpoint_type=endpoint_type) def get_glance_url(self, endpoint_type="publicURL"): return self.get_catalog_url(service_type="image", endpoint_type=endpoint_type)