コード例 #1
0
ファイル: test_az_ag.py プロジェクト: paperandsoap/tricircle
    def test_list_pods_by_tenant(self):

        pod1, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ + FAKE_AZ,
                                             FAKE_TENANT_ID)
        pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID)
        self.assertEqual(pod1, None)
        self.assertEqual(len(pods), 0)

        # TODO(joehuang): tenant bound to multiple pods in one AZ

        # schedule one
        pod2, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ,
                                             FAKE_TENANT_ID)
        pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID)
        self.assertDictEqual(pods[0], pod2)
コード例 #2
0
    def _get_all(self, context):

        # TODO(joehuang): query optimization for pagination, sort, etc
        ret = []
        pods = az_ag.list_pods_by_tenant(context, self.tenant_id)
        for pod in pods:
            if pod['pod_name'] == '':
                continue

            query = urlparse.urlsplit(request.url).query
            query_filters = urlparse.parse_qsl(query)
            skip_pod = False
            for k, v in query_filters:
                if k == 'availability_zone' and v != pod['az_name']:
                    skip_pod = True
                    break
            if skip_pod:
                continue

            s_ctx = hclient.get_pod_service_ctx(
                context,
                request.url,
                pod['pod_name'],
                s_type=cons.ST_CINDER)
            if s_ctx['b_url'] == '':
                LOG.error(_LE("bottom pod endpoint incorrect %s")
                          % pod['pod_name'])
                continue

            # TODO(joehuang): convert header and body content
            resp = hclient.forward_req(context, 'GET',
                                       request.headers,
                                       s_ctx['b_url'],
                                       request.body)

            if resp.status_code == 200:

                routings = db_api.get_bottom_mappings_by_tenant_pod(
                    context, self.tenant_id,
                    pod['pod_id'], cons.RT_VOLUME
                )

                b_ret_body = jsonutils.loads(resp.content)
                if b_ret_body.get('volumes'):
                    for vol in b_ret_body['volumes']:

                        if not routings.get(vol['id']):
                            b_ret_body['volumes'].remove(vol)
                            continue

                        vol['availability_zone'] = pod['az_name']

                    ret.extend(b_ret_body['volumes'])
        return ret
コード例 #3
0
    def _get_all(self, context):

        # TODO(joehuang): query optimization for pagination, sort, etc
        ret = []
        pods = az_ag.list_pods_by_tenant(context, self.tenant_id)
        for pod in pods:
            if pod['pod_name'] == '':
                continue

            query = urlparse.urlsplit(request.url).query
            query_filters = urlparse.parse_qsl(query)
            skip_pod = False
            for k, v in query_filters:
                if k == 'availability_zone' and v != pod['az_name']:
                    skip_pod = True
                    break
            if skip_pod:
                continue

            s_ctx = hclient.get_pod_service_ctx(context,
                                                request.url,
                                                pod['pod_name'],
                                                s_type=cons.ST_CINDER)
            if s_ctx['b_url'] == '':
                LOG.error(
                    _LE("bottom pod endpoint incorrect %s") % pod['pod_name'])
                continue

            # TODO(joehuang): get the release of top and bottom
            t_release = cons.R_MITAKA
            b_release = cons.R_MITAKA
            b_headers = hclient.convert_header(t_release, b_release,
                                               request.headers)

            resp = hclient.forward_req(context, 'GET', b_headers,
                                       s_ctx['b_url'], request.body)

            if resp.status_code == 200:

                routings = db_api.get_bottom_mappings_by_tenant_pod(
                    context, self.tenant_id, pod['pod_id'], cons.RT_VOLUME)

                b_ret_body = jsonutils.loads(resp.content)
                if b_ret_body.get('volumes'):
                    for vol in b_ret_body['volumes']:

                        if not routings.get(vol['id']):
                            b_ret_body['volumes'].remove(vol)
                            continue

                        vol['availability_zone'] = pod['az_name']

                    ret.extend(b_ret_body['volumes'])
        return ret
コード例 #4
0
    def test_get_pod_by_az_tenant(self):

        pod1, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ + FAKE_AZ,
                                             FAKE_TENANT_ID)
        self.assertIsNone(pod1)
        pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID)
        self.assertEqual(len(pods), 0)

        # schedule one
        pod2, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ,
                                             FAKE_TENANT_ID)

        pod_bindings = core.query_resource(self.context,
                                           models.PodBinding,
                                           [{'key': 'tenant_id',
                                             'comparator': 'eq',
                                             'value': FAKE_TENANT_ID}],
                                           [])
        self.assertIsNotNone(pod_bindings)
        if pod_bindings[0]['pod_id'] == FAKE_SITE_ID:
            self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME)
            self.assertEqual(pod2['pod_id'], FAKE_SITE_ID)
            self.assertEqual(pod2['az_name'], FAKE_AZ)

        else:
            self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME_2)
            self.assertEqual(pod2['pod_id'], FAKE_SITE_ID_2)
            self.assertEqual(pod2['az_name'], FAKE_AZ)

        # scheduled one should always be bound
        pod3, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ,
                                             FAKE_TENANT_ID)

        self.assertEqual(pod2['pod_name'], pod3['pod_name'])
        self.assertEqual(pod2['pod_id'], pod3['pod_id'])
        self.assertEqual(pod2['az_name'], pod3['az_name'])
コード例 #5
0
ファイル: test_az_ag.py プロジェクト: paperandsoap/tricircle
    def test_get_pod_by_az_tenant(self):

        pod1, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ + FAKE_AZ,
                                             FAKE_TENANT_ID)
        self.assertEqual(pod1, None)
        pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID)
        self.assertEqual(len(pods), 0)

        # schedule one
        pod2, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ,
                                             FAKE_TENANT_ID)

        pod_bindings = core.query_resource(self.context,
                                           models.PodBinding,
                                           [{'key': 'tenant_id',
                                             'comparator': 'eq',
                                             'value': FAKE_TENANT_ID}],
                                           [])
        self.assertIsNotNone(pod_bindings)
        if pod_bindings[0]['pod_id'] == FAKE_SITE_ID:
            self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME)
            self.assertEqual(pod2['pod_id'], FAKE_SITE_ID)
            self.assertEqual(pod2['az_name'], FAKE_AZ)
        else:
            self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME_2)
            self.assertEqual(pod2['pod_id'], FAKE_SITE_ID_2)
            self.assertEqual(pod2['az_name'], FAKE_AZ)

        # scheduled one should always be bound
        pod3, _ = az_ag.get_pod_by_az_tenant(self.context,
                                             FAKE_AZ,
                                             FAKE_TENANT_ID)

        self.assertEqual(pod2['pod_name'], pod3['pod_name'])
        self.assertEqual(pod2['pod_id'], pod3['pod_id'])
        self.assertEqual(pod2['az_name'], pod3['az_name'])