def collect(self, device, unused): client = NovaAPIClient( device.zCommandUsername, device.zCommandPassword, device.zOpenStackAuthUrl, device.zOpenStackProjectId, device.zOpenStackRegionName, ) keystone_client = KeystoneAPIClient( device.zCommandUsername, device.zCommandPassword, device.zOpenStackAuthUrl, device.zOpenStackProjectId, admin=True, ) results = {} results["tenants"] = [] try: result = yield keystone_client.tenants() results["tenants"] = result["tenants"] log.debug("tenants: %s\n" % str(results["tenants"])) except (ConnectError, TimeoutError), e: log.error(self._keystonev2errmsg, e)
def getRegions(self, username, api_key, project_id, auth_url): """Get a list of available regions, given a keystone endpoint and credentials.""" client = KeystoneAPIClient( username=username, password=api_key, project_id=project_id, auth_url=auth_url, ) serviceCatalog = yield client.serviceCatalog() ep = [] [ep.extend(x['endpoints']) for x in serviceCatalog] regions = set([x['region'] for x in ep]) returnValue([{'key': c, 'label': c} for c in sorted(regions)])
def collect(self, config): log.debug("Collect for OpenStack") results = [] ds0 = config.datasources[0] ceilometer_url = ds0.zPerfCeilometerAPIUrl.rstrip('/') username = ds0.zCommandUsername password = ds0.zCommandPassword metric = ds0.params['metric'] authurl = ds0.zOpenStackAuthUrl project = ds0.zOpenStackProjectId resourceId = ds0.resourceId # this is not very efficient- if we end up using this datasource, it should # be rewritten to use a real ceilometer client library with token caching/re-login # support. client = KeystoneAPIClient( username=username, password=password, project_id=project, auth_url=authurl, ) yield client.login() hdr = {} hdr['X-Auth-Token'] = client._token hdr['Content-Type'] = 'application/json' def sleep(secs): d = defer.Deferred() reactor.callLater(secs, d.callback, None) return d for ds in config.datasources: metric = ds.params['metric'] resourceId = ds.resourceId getURL = "%s/v2/meters/%s/statistics?q.field=resource_id&q.op=eq&q.value=%s" % \ (ceilometer_url, metric, resourceId) factory = ProxyWebClient(getURL) result = yield factory.get_page(hdr) results.append((ds, result)) defer.returnValue(results)
def getCeilometerUrl(self, username, api_key, project_id, auth_url, region_name): """Return the first defined ceilometer URL, given a keystone endpoint, credentials, and a region. May return an empty string if none is found.""" client = KeystoneAPIClient( username=username, password=api_key, project_id=project_id, auth_url=auth_url, ) serviceCatalog = yield client.serviceCatalog() for sc in serviceCatalog: if sc['type'] == 'metering': for endpoint in sc['endpoints']: if endpoint['region'] == region_name: returnValue(str(endpoint['publicURL'])) return # never found one. returnValue("")