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("")