コード例 #1
0
    def test_index_multi_data(self):
        tenant_data = []
        tenant_names = {}
        for data in TENANT_LIST_RETURN:
            tenant_data.append(Tenant(data))
            tenant_names[data['id']] = data['name']

        service_data = []
        check_service_data = []
        for data in fixture.SERVICE_DATA_LIST:
            service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect'])
            service_data.append(service)
            service.tenant_name = tenant_names.get(service.tenant_id, None)
            check_service_data.append(service)

        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndReturn(service_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_data, True])

        self.mox.ReplayAll()
        res = self.client.get(SERVICE_INDEX_URL)
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/service/index.html')
        self.assertItemsEqual(res.context['table'].data, check_service_data)
コード例 #2
0
    def test_detail_api_error_handle(self):
        dc_group_info = fixture.SERVICE_DATA_DEFAULT['dc_group_info']
        obj_id = '|'.join(['dcconnect', str(dc_group_info[0]['group_id'])])

        nal_api.get_services(IsA(http.HttpRequest),
                             group_id=obj_id.split('|')[1],
                             func_type=obj_id.split('|')[0]).AndRaise(
                                 exceptions.NotAvailable())

        tenant_data = []
        tenant_names = {}
        for data in TENANT_LIST_RETURN:
            tenant_data.append(Tenant(data))
            tenant_names[data['id']] = data['name']

        service_data = []
        check_service_data = []
        for data in fixture.SERVICE_DATA_LIST:
            service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect'])
            service_data.append(service)
            service.tenant_name = tenant_names.get(service.tenant_id, None)
            check_service_data.append(service)

        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndReturn(service_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_data, True])

        self.mox.ReplayAll()
        res = self.client.get(
            reverse(SERVICE_DETAIL_URL, kwargs={"group_id": obj_id}))
        self.assertRedirects(res, SERVICE_INDEX_URL)
コード例 #3
0
    def test_index_api_error_handle(self):
        tenant_data = []
        for data in TENANT_LIST_RETURN:
            tenant_data.append(Tenant(data))

        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndRaise(
                                 exceptions.NotAvailable())

        self.mox.ReplayAll()
        res = self.client.get(SERVICE_INDEX_URL)
        self.assertItemsEqual(res.context['table'].data, [])
コード例 #4
0
ファイル: tables.py プロジェクト: openmsa/NO
    def get_data(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        group_id = obj_id.split('|')[1]
        detail_service = nal_api.get_services(request,
                                              group_id=group_id,
                                              func_type=func_type)

        service_columns = SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]
        detail_data = detail_service[service_columns['detail_name']][0]
        network_list = detail_service[service_columns['network_name']]

        tenant_name = detail_data.tenant_id
        try:
            if tenant_name != '-':
                tenant_data = api.keystone.tenant_get(request,
                                                      detail_data.tenant_id)
                tenant_name = getattr(tenant_data, 'name', '-')
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve tenant information."))
        detail_data.tenant_name = tenant_name

        for network in network_list:
            if getattr(network, 'dc_id') == detail_data.my_dc_id:
                setattr(detail_data, 'my_group_flg', '1')
                break
        return detail_data
コード例 #5
0
ファイル: setting.py プロジェクト: openmsa/NO
    def delete(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        service_id = obj_id.split('|')[1]

        service = nal_api.get_services(request,
                                       group_id=service_id,
                                       func_type=func_type)
        detail_list = \
            service[SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']]
        detail_data = detail_list[0]

        params = {
            'function_type': func_type,
            'group_id': service_id,
            'service_type': detail_data.service_type
        }

        service_name = SERVICE_TYPE_MAPPING.get(detail_data.service_type, '')
        service_detail = SERVICE_TYPE_DETAIL_MAPPING.get(service_name, {})
        for key, value in service_detail.iteritems():
            params[key] = value

        if str(detail_data.task_status) == '9':
            params['job_cleaning_mode'] = 1

        try:
            LOG.info('Deleting service "%s".' % service_id)
            nal_api.delete_service(request, params)
        except Exception:
            redirect = reverse(constants.SERVICE_INDEX_URL)
            msg = 'Unable to delete service.'
            exceptions.handle(request, msg, redirect=redirect)
コード例 #6
0
    def get_data(self):
        services = []
        try:
            services = nal_api.get_services(self.request,
                                            func_type='all_dcconnect')
        except Exception:
            exceptions.handle(self.request,
                              _('Unable to retrieve service list.'))

        tenants = []
        try:
            tenants, _more = api.keystone.tenant_list(self.request,
                                                      paginate=True)
        except Exception:
            exceptions.handle(self.request,
                              _("Unable to retrieve all tenant information."))

        tenant_names = {}
        for tenant in tenants:
            tenant_names[tenant.id] = tenant.name

        service_list = []
        for service in services:
            service.tenant_name = tenant_names.get(service.tenant_id, '')
            service_list.append(service)

        return service_list
コード例 #7
0
ファイル: setting.py プロジェクト: openmsa/NO
    def allowed(self, request, service):
        func_type = self.table.kwargs['group_id'].split('|')[0]
        group_id = self.table.kwargs['group_id'].split('|')[1]

        service = nal_api.get_services(self.table.request,
                                       group_id=group_id,
                                       func_type=func_type)
        detail_list = \
            service[SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']]
        detail_data = detail_list[0]
        network_data = \
            service[SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['network_name']]

        if getattr(detail_data, 'my_dc_id') in [
                getattr(network, 'dc_id') for network in network_data
        ]:
            allow_member = SERVICE_DISPLAY_BUTTONS_LIST['is_member']
        else:
            allow_member = SERVICE_DISPLAY_BUTTONS_LIST['is_not_member']
        allow_status = \
            SERVICE_DISPLAY_BUTTONS_FOR_STATUS[str(detail_data.task_status)]
        service_name = SERVICE_TYPE_MAPPING[str(detail_data.service_type)]
        allow_device = SERVICE_DISPLAY_BUTTONS_FOR_DEVICE[service_name]

        allow_set = set(allow_member) & set(allow_status) & set(allow_device)
        if self.__class__.__name__ in list(allow_set):
            return True
        return False
コード例 #8
0
    def test_index_no_data(self):
        tenant_data = []
        for data in TENANT_LIST_RETURN:
            tenant_data.append(Tenant(data))

        service_data = []
        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndReturn(service_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_data, True])

        self.mox.ReplayAll()
        res = self.client.get(SERVICE_INDEX_URL)
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/service/index.html')
        self.assertItemsEqual(res.context['table'].data, [])
コード例 #9
0
    def test_index_tenant_error(self):
        service_data = []
        for data in fixture.SERVICE_DATA_LIST:
            service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect'])
            service_data.append(service)

        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndReturn(service_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndRaise(OSError)

        self.mox.ReplayAll()
        res = self.client.get(SERVICE_INDEX_URL)

        self.assertTemplateUsed(res, 'admin/service/index.html')
        self.assertItemsEqual(res.context['table'].data, service_data)
        self.assertMessageCount(res, error=1)
コード例 #10
0
    def test_detail_tenant_error(self):
        service_data = {}
        obj_id = '|'.join([
            'dcconnect',
            str(fixture.SERVICE_DATA_DEFAULT['dc_group_info'][0]['group_id'])
        ])
        for key, value in SERVICE_RETURN_MAPPING['dcconnect'].iteritems():
            if isinstance(value, dict):
                service_data[key] = []
                for service_row in fixture.SERVICE_DATA_DEFAULT[key]:
                    service_data[key].append(Service(service_row, value))

        nal_api.get_services(
            IsA(http.HttpRequest),
            group_id=obj_id.split('|')[1],
            func_type=obj_id.split('|')[0]).AndReturn(service_data)

        api.keystone.tenant_get(IsA(http.HttpRequest),
                                IsA('str')).AndRaise(OSError)

        tenant_data = []
        tenant_names = {}
        for data in TENANT_LIST_RETURN:
            tenant_data.append(Tenant(data))
            tenant_names[data['id']] = data['name']

        service_data = []
        check_service_data = []
        for data in fixture.SERVICE_DATA_LIST:
            service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect'])
            service_data.append(service)
            service.tenant_name = tenant_names.get(service.tenant_id, None)
            check_service_data.append(service)

        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndReturn(service_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_data, True])

        self.mox.ReplayAll()
        res = self.client.get(
            reverse(SERVICE_DETAIL_URL, kwargs={"group_id": obj_id}))
        self.assertRedirects(res, SERVICE_INDEX_URL)
コード例 #11
0
    def handle(self, request, data):
        try:
            service_type = data['service_type']
            service_type_name = SERVICE_TYPE_MAPPING[service_type]

            tenant_id = request.user.project_id
            services = nal_api.get_services(request,
                                            tenant_id,
                                            func_type='all_dcconnect')
            for service in services:
                if SERVICE_FUNCTION_TYPE_MAPPING[service.service_type] \
                        == 'dcconnect':
                    messages.error(
                        request, 'DC connection service is already created.')
                    raise exceptions.NotAvailable

            func_type = SERVICE_FUNCTION_TYPE_MAPPING[service_type]
            params = {
                'service_name': data['service_name'],
                'service_type': service_type,
                'function_type': func_type
            }

            for column in SERVICE_CREATE_COLUMNS['separate']:
                if service_type_name in DISPLAY_CREATE_COLUMNS_MAP[column[0]]:
                    if isinstance(data[column[0]], bool):
                        data[column[0]] = int(data[column[0]])
                    params[column[0]] = data[column[0]]

            service_detail = \
                SERVICE_TYPE_DETAIL_MAPPING.get(service_type_name, {})
            for key, value in service_detail.iteritems():
                params[key] = value

            if 'IaaS_subnet_id' in params:
                subnet_id = data['IaaS_subnet_id']
                subnet_detail = _get_subnet_detail(request, subnet_id)
                network = _get_network_detail(request,
                                              subnet_detail.network_id)
                params['IaaS_network_type'] = network['IaaS_network_type']
                params['IaaS_network_id'] = network['IaaS_network_id']
                params['IaaS_segmentation_id'] = \
                    network['IaaS_segmentation_id']
                params['network_name'] = network['network_name']

            service = nal_api.create_service(request, params)
            msg = _('Job of service creation is running.')
            LOG.debug(msg)
            messages.success(request, msg)
            return True

        except exceptions.NotAvailable:
            return False
        except Exception:
            redirect = reverse(constants.SERVICE_INDEX_URL)
            exceptions.handle(request, redirect=redirect)
コード例 #12
0
ファイル: views.py プロジェクト: openmsa/NO
    def get_data(self):
        services = []
        try:
            tenant_id = self.request.user.project_id
            services = nal_api.get_services(self.request,
                                            tenant_id,
                                            func_type='all_dcconnect')
        except Exception:
            exceptions.handle(self.request,
                              _('Unable to retrieve service list.'))

        return services
コード例 #13
0
    def test_detail_in_dc_member(self):

        service_data = {}
        obj_id = '|'.join([
            'dcconnect',
            str(fixture.SERVICE_DATA_DEFAULT['dc_group_info'][0]['group_id'])
        ])
        for key, value in SERVICE_RETURN_MAPPING['dcconnect'].iteritems():
            if isinstance(value, dict):
                service_data[key] = []
                for service_row in fixture.SERVICE_DATA_DEFAULT[key]:
                    service_data[key].append(Service(service_row, value))

        nal_api.get_services(
            IsA(http.HttpRequest),
            group_id=obj_id.split('|')[1],
            func_type=obj_id.split('|')[0]).AndReturn(service_data)

        tenant_data = Tenant({
            'id': 'aaa8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameA'
        })
        api.keystone.tenant_get(IsA(http.HttpRequest),
                                IsA('str')).AndReturn(tenant_data)

        self.mox.ReplayAll()
        res = self.client.get(
            reverse(SERVICE_DETAIL_URL, kwargs={"group_id": obj_id}))
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/service/detail.html')
        for i, detail in enumerate(
                SERVICE_DETAIL_DISPLAY_COLUMNS['dcconnect']['detail']):
            if i == 0:
                self.assertItemsEqual(res.context['service'][0],
                                      ['Tenant Name', 'network_nameA'])
            else:
                pass
            self.assertItemsEqual(res.context['service'][i + 1][0], detail[0])
コード例 #14
0
ファイル: views.py プロジェクト: openmsa/NO
 def _get_data(self):
     try:
         func_type = self.kwargs['group_id'].split('|')[0]
         group_id = self.kwargs['group_id'].split('|')[1]
         service = nal_api.get_services(self.request,
                                        group_id=group_id,
                                        func_type=func_type)
     except Exception:
         msg = _('Unable to retrieve details for service "%s".') \
             % (group_id)
         exceptions.handle(self.request,
                           msg,
                           redirect=self.get_redirect_url())
     return service
コード例 #15
0
ファイル: tables.py プロジェクト: openmsa/NO
    def get_data(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        group_id = obj_id.split('|')[1]
        detail_service = nal_api.get_services(request,
                                              group_id=group_id,
                                              func_type=func_type)

        network_name = \
            SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['network_name']
        detail_name = SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']
        detail_data = detail_service[detail_name][0]

        setattr(detail_data, 'my_group_flg', '0')
        for network in detail_service[network_name]:
            if getattr(network, 'dc_id') == detail_data.my_dc_id:
                setattr(detail_data, 'my_group_flg', '1')
                break
        return detail_data
コード例 #16
0
    def __init__(self, request, *args, **kwargs):
        super(UpdateServiceForm, self).__init__(request, *args, **kwargs)

        func_type = kwargs['initial']['obj_id'].split('|')[0]
        group_id = kwargs['initial']['obj_id'].split('|')[1]
        subnet_id = ''
        if len(kwargs['initial']['obj_id'].split('|')) == 3:
            subnet_id = kwargs['initial']['obj_id'].split('|')[2]
        update_type = kwargs['initial']['update_type']

        service = nal_api.get_services(self.request,
                                       group_id=group_id,
                                       func_type=func_type)
        self.fields['group_id'].initial = group_id
        self.fields['func_type'].initial = func_type
        self.fields['update_type'].initial = update_type

        if SERVICE_UPDATE_COLUMNS[update_type]['display_type'] == \
                'input_column':
            service_columns = SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]
            detail_data = service[service_columns['detail_name']][0]
            network_list = service[service_columns['network_name']]

            for column in SERVICE_UPDATE_COLUMNS[update_type]['common']:
                input_attrs = {}
                for attr_key, attr_val in column[1]['widget'].items():
                    input_attrs[attr_key] = attr_val

                if column[1]['field'] == 'ChoiceField':
                    self.fields[column[0]] = getattr(
                        forms, column[1]['field'])(
                            label=column[1]['label'],
                            choices=column[1]['choices'],
                            required=column[1]['required'],
                            widget=forms.Select(attrs=input_attrs))
                else:
                    self.fields[column[0]] = getattr(
                        forms, column[1]['field'])(
                            label=column[1]['label'],
                            required=column[1]['required'],
                            widget=forms.TextInput(attrs=input_attrs))

                if hasattr(detail_data, column[0]):
                    if 'service_type' == column[0]:
                        self.fields['service_type'].initial = \
                            SERVICE_TYPE_MAPPING.get(
                                str(getattr(detail_data, column[0])),
                                getattr(detail_data, column[0]))
                    else:
                        self.fields[column[0]].initial = getattr(
                            detail_data, column[0])

            for column in SERVICE_UPDATE_COLUMNS[update_type]['separate']:
                if SERVICE_TYPE_MAPPING[str(detail_data.service_type)] in \
                        DISPLAY_UPDATE_COLUMNS_MAP[column[0]]:
                    if column[1]['field'] == 'ChoiceField':
                        self.fields[column[0]] = getattr(
                            forms, column[1]['field'])(
                                label=column[1]['label'],
                                choices=column[1]['choices'],
                                help_text=column[1].get('help_text'),
                                required=column[1]['required'])
                    elif column[1]['field'] == 'BooleanField':
                        self.fields[column[0]] = getattr(
                            forms,
                            column[1]['field'])(label=column[1]['label'],
                                                required=column[1]['required'])
                    else:
                        self.fields[column[0]] = getattr(
                            forms, column[1]['field'])(
                                label=column[1]['label'],
                                help_text=column[1].get('help_text'),
                                required=column[1]['required'])

            self._logic_by_update_type(request, update_type, detail_data,
                                       network_list, subnet_id)
コード例 #17
0
    def test_row_update(self):

        dc_group_info = fixture.SERVICE_DATA_NO_MEMBER_LIST['dc_group_info']
        service_data = {}
        obj_id = '|'.join(['dcconnect', str(dc_group_info[0]['group_id'])])
        for key, value in SERVICE_RETURN_MAPPING['dcconnect'].iteritems():
            if isinstance(value, dict):
                service_data[key] = []
                for service_row in fixture.SERVICE_DATA_NO_MEMBER_LIST[key]:
                    service_data[key].append(Service(service_row, value))

        nal_api.get_services(
            IsA(http.HttpRequest),
            group_id=obj_id.split('|')[1],
            func_type=obj_id.split('|')[0]).AndReturn(service_data)

        tenant_data = Tenant({
            'id': 'aaa8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameA'
        })
        api.keystone.tenant_get(IsA(http.HttpRequest),
                                IsA('str')).AndReturn(tenant_data)

        tenant_list = [{
            'id': 'aaa8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameA'
        }, {
            'id': 'bbb8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameB'
        }, {
            'id': 'ccc8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameC'
        }]
        tenant_data = []
        tenant_names = {}
        for data in tenant_list:
            tenant_data.append(Tenant(data))
            tenant_names[data['id']] = data['name']

        service_data = []
        check_service_data = []
        for data in fixture.SERVICE_DATA_LIST:
            service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect'])
            service_data.append(service)
            service.tenant_name = tenant_names.get(service.tenant_id, None)
            check_service_data.append(service)

        nal_api.get_services(IsA(http.HttpRequest),
                             func_type='all_dcconnect').AndReturn(service_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_data, True])

        self.mox.ReplayAll()

        params = {
            'action': 'row_update',
            'table': 'service',
            'obj_id': obj_id,
        }
        res = self.client.get('?'.join([SERVICE_INDEX_URL, urlencode(params)]))
        self.assertContains(res, dc_group_info[0]['group_name'])