Example #1
0
    def get_network_resource_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'networks': []}
        _result = self.index(request, input_resources='networks', **kwargs)
        single = _result.pop('networks')
        for network in single:
            filters = {'network_id': [network['id']]}
            num = self._get_num(context,
                                port=True,
                                subnet=True,
                                filters=filters)
            net = {
                'tenant_id': network['tenant_id'],
                'id': network['id'],
                'name': network['name'],
                'status': network['status'],
                'port_num': num['port_num'],
                'subnet_num': num['subnet_num'],
            }

            data['networks'].append(net)
        _result.update(data)
        return _result
Example #2
0
    def get_agent_resource_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'agents' : []}
        _result = self.index(request, input_resources='agents', **kwargs)
        single = _result.pop('agents')
        for  agent in single:
           num = {}
           if agent['binary'] in AGENT_RESOURCE_MAP:
               filters = {'id' : [agent['id']]}
               num = self._get_agent_host_resources_count(context,
                        agent, request, filters=filters)
           agent_info = {
                     'id': agent['id'],
                     'admin_state_up':agent['admin_state_up'],
                     'agent_type':agent['agent_type'],
                     'alive':agent['alive'],
                     'host':agent['host'],
                 }
           agent_info = dict(agent_info.items() + num.items())
           data['agents'].append(agent_info)

        _result.update(data)
        return  _result
Example #3
0
    def get_agent_resource_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'agents': []}
        _result = self.index(request, input_resources='agents', **kwargs)
        single = _result.pop('agents')
        for agent in single:
            num = {}
            if agent['binary'] in AGENT_RESOURCE_MAP:
                filters = {'id': [agent['id']]}
                num = self._get_agent_host_resources_count(context,
                                                           agent,
                                                           request,
                                                           filters=filters)
            agent_info = {
                'id': agent['id'],
                'admin_state_up': agent['admin_state_up'],
                'agent_type': agent['agent_type'],
                'alive': agent['alive'],
                'host': agent['host'],
            }
            agent_info = dict(agent_info.items() + num.items())
            data['agents'].append(agent_info)

        _result.update(data)
        return _result
Example #4
0
    def get_all_resource_counter_old(self, request, id, **kwargs):
        '''get all resource counter '''
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        data = {'resources':[]}

        for resource_name in STATISTICS_RESOURCE:
            _result = self.index(request, input_resources = resource_name, **kwargs)

            LOG.info("get resource couner result:%s, resource_name:%s" % (_result, resource_name))

            for key, value in _result.iteritems():
                if resource_name!= key :
                    msg = _("resource %s is not surpport") % resource_name
                    raise qexception.BadRequest(resource='body', msg=msg)

                if resource_name == "floatingips":
                    in_used = [v for v in value if v['port_id'] is not None]
                    no_used = [v for v in value if v['port_id'] is None]
                    info = {'in_used':len(in_used),
                            'no_used':len(no_used),
                            'total':len(value)
                           }

                elif resource_name == "agents":
                    active = [v for v in value if v['alive']]
                    error = [v for v in value if not v['alive']]
                    info = {'active':len(active),
                            'error':len(error),
                            'total':len(value)
                           }

                elif resource_name == "routers" or resource_name == "loadbalancers":
                    active = [v for v in value if v['status'] == 'ACTIVE']
                    error = [v for v in value if v['status'] != 'ACTIVE']
                    info = {'active':len(active),
                            'error':len(error),
                            'total':len(value)
                           }
                elif resource_name == "networks":
                    network = self._get_network_ports_num(request.context)
                    info = {'total':len(value),
                            'shared_ports':network['share_ports'],
                            'no_shared_ports':network['no_share_ports'],
                           }

                else:
                    info = {'total':len(value)}

                re = {'resource':resource_name, 'counter':info}
                data['resources'].append(re)

        LOG.info("get resource counter, data:%s" % data)

        return  data
Example #5
0
    def get_subnet_resource_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'subnets': []}
        _result = self.index(request, input_resources='subnets', **kwargs)
        single = _result.pop('subnets')
        for subnet in single:
            filters = {'fixed_ips': {'subnet_id': [subnet['id']]}}
            num = self._get_num(context, port=True, filters=filters)
            for device_owner in [
                    'network:router_interface', 'network:router_gateway'
            ]:
                filters = {
                    'device_owner': [device_owner],
                    'fixed_ips': {
                        'subnet_id': [subnet['id']]
                    }
                }
                port = self._get_ports(context, filters=filters)
                if port:
                    break

            router = {}
            if port and port[0]['device_id'] is not None:
                router = self._get_router(context, port[0]['device_id'])

            name = router.get('name', None)
            net = {
                'tenant_id': subnet['tenant_id'],
                'id': subnet['id'],
                'name': subnet['name'],
                'port_num': num['port_num'],
                'cidr': subnet['cidr'],
                'enable_dhcp': subnet['enable_dhcp'],
                'router': name,
            }

            data['subnets'].append(net)

        _result.update(data)
        return _result
Example #6
0
    def get_security_group_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'security_groups':[]}
        _result = self.index(request, input_resources='security_groups', **kwargs)
        single = _result.pop('security_groups')
        for sg in single:
           filters = {'security_group_id':[sg['id']]}
           num = len(sg['security_group_rules'])
           net = {
                     'tenant_id':sg['tenant_id'],
                     'name':sg['name'],
                     'rules_count':num,
                 }
           data['security_groups'].append(net)

        _result.update(data)
        return  _result
Example #7
0
    def get_security_group_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'security_groups': []}
        _result = self.index(request,
                             input_resources='security_groups',
                             **kwargs)
        single = _result.pop('security_groups')
        for sg in single:
            filters = {'security_group_id': [sg['id']]}
            num = len(sg['security_group_rules'])
            net = {
                'tenant_id': sg['tenant_id'],
                'name': sg['name'],
                'rules_count': num,
            }
            data['security_groups'].append(net)

        _result.update(data)
        return _result
Example #8
0
    def get_network_resource_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'networks':[]}
        _result = self.index(request, input_resources='networks', **kwargs)
        single = _result.pop('networks')
        for network in single:
            filters = {'network_id':[network['id']]}
            num = self._get_num(context, port=True, subnet=True, filters=filters)
            net = {
                      'tenant_id':network['tenant_id'],
                      'id':network['id'],
                      'name':network['name'],
                      'status':network['status'],
                      'port_num':num['port_num'],
                      'subnet_num':num['subnet_num'],
                  }

            data['networks'].append(net)
        _result.update(data)
        return  _result
Example #9
0
    def get_subnet_resource_info(self, request, id, **kwargs):
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        context = request.context
        data = {'subnets':[]}
        _result = self.index(request, input_resources='subnets', **kwargs)
        single = _result.pop('subnets')
        for subnet in single:
           filters = {'fixed_ips':{'subnet_id':[subnet['id']]}}
           num = self._get_num(context, port=True, filters=filters)
           for device_owner in ['network:router_interface', 'network:router_gateway']:
               filters = {'device_owner':[device_owner], 'fixed_ips':{'subnet_id':[subnet['id']]}}
               port = self._get_ports(context, filters=filters)
               if port:
                  break

           router = {}
           if port and port[0]['device_id'] is not None:
               router = self._get_router(context, port[0]['device_id'])

           name = router.get('name', None)
           net = {
                     'tenant_id':subnet['tenant_id'],
                     'id':subnet['id'],
                     'name':subnet['name'],
                     'port_num':num['port_num'],
                     'cidr':subnet['cidr'],
                     'enable_dhcp':subnet['enable_dhcp'],
                     'router':name,
                 }

           data['subnets'].append(net)

        _result.update(data)
        return  _result
Example #10
0
    def get_all_resource_counter_old(self, request, id, **kwargs):
        '''get all resource counter '''
        if 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        data = {'resources': []}

        for resource_name in STATISTICS_RESOURCE:
            _result = self.index(request,
                                 input_resources=resource_name,
                                 **kwargs)

            LOG.info("get resource couner result:%s, resource_name:%s" %
                     (_result, resource_name))

            for key, value in _result.iteritems():
                if resource_name != key:
                    msg = _("resource %s is not surpport") % resource_name
                    raise qexception.BadRequest(resource='body', msg=msg)

                if resource_name == "floatingips":
                    in_used = [v for v in value if v['port_id'] is not None]
                    no_used = [v for v in value if v['port_id'] is None]
                    info = {
                        'in_used': len(in_used),
                        'no_used': len(no_used),
                        'total': len(value)
                    }

                elif resource_name == "agents":
                    active = [v for v in value if v['alive']]
                    error = [v for v in value if not v['alive']]
                    info = {
                        'active': len(active),
                        'error': len(error),
                        'total': len(value)
                    }

                elif resource_name == "routers" or resource_name == "loadbalancers":
                    active = [v for v in value if v['status'] == 'ACTIVE']
                    error = [v for v in value if v['status'] != 'ACTIVE']
                    info = {
                        'active': len(active),
                        'error': len(error),
                        'total': len(value)
                    }
                elif resource_name == "networks":
                    network = self._get_network_ports_num(request.context)
                    info = {
                        'total': len(value),
                        'shared_ports': network['share_ports'],
                        'no_shared_ports': network['no_share_ports'],
                    }

                else:
                    info = {'total': len(value)}

                re = {'resource': resource_name, 'counter': info}
                data['resources'].append(re)

        LOG.info("get resource counter, data:%s" % data)

        return data
Example #11
0
    def resource(request):
        if request.path in ['/v2.0/floatingips','/v2.0/tenants'] and 'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        if request.path in ['/v2.0/uos_resources.json'] and \
                        'routers' in request.params.getall('uos_resources') and \
                        len(request.params.getall('uos_resources')) == 1 and \
                        'uos_staff' in request.context.roles:
            uos_utils.uos_staff_act_as_admin(request)

        route_args = request.environ.get('wsgiorg.routing_args')
        if route_args:
            args = route_args[1].copy()
        else:
            args = {}

        # NOTE(jkoelker) by now the controller is already found, remove
        #                it from the args if it is in the matchdict
        args.pop('controller', None)
        fmt = args.pop('format', None)
        action = args.pop('action', None)
        content_type = format_types.get(fmt,
                                        request.best_match_content_type())
        language = request.best_match_language()
        deserializer = deserializers.get(content_type)
        serializer = serializers.get(content_type)

        try:
            if request.body:
                args['body'] = deserializer.deserialize(request.body)['body']

            method = getattr(controller, action)

            result = method(request=request, **args)
        except (exceptions.NeutronException,
                netaddr.AddrFormatError) as e:
            for fault in faults:
                if isinstance(e, fault):
                    mapped_exc = faults[fault]
                    break
            else:
                mapped_exc = webob.exc.HTTPInternalServerError
            if 400 <= mapped_exc.code < 500:
                LOG.info(_('%(action)s failed (client error): %(exc)s'),
                         {'action': action, 'exc': e})
            else:
                LOG.exception(_('%s failed'), action)
            e = translate(e, language)
            body = serializer.serialize(
                {'NeutronError': get_exception_data(e)})
            kwargs = {'body': body, 'content_type': content_type}
            raise mapped_exc(**kwargs)
        except webob.exc.HTTPException as e:
            type_, value, tb = sys.exc_info()
            LOG.exception(_('%s failed'), action)
            translate(e, language)
            value.body = serializer.serialize(
                {'NeutronError': get_exception_data(e)})
            value.content_type = content_type
            six.reraise(type_, value, tb)
        except NotImplementedError as e:
            e = translate(e, language)
            # NOTE(armando-migliaccio): from a client standpoint
            # it makes sense to receive these errors, because
            # extensions may or may not be implemented by
            # the underlying plugin. So if something goes south,
            # because a plugin does not implement a feature,
            # returning 500 is definitely confusing.
            body = serializer.serialize(
                {'NotImplementedError': get_exception_data(e)})
            kwargs = {'body': body, 'content_type': content_type}
            raise webob.exc.HTTPNotImplemented(**kwargs)
        except Exception:
            # NOTE(jkoelker) Everything else is 500
            LOG.exception(_('%s failed'), action)
            # Do not expose details of 500 error to clients.
            msg = _('Request Failed: internal server error while '
                    'processing your request.')
            msg = translate(msg, language)
            body = serializer.serialize(
                {'NeutronError': get_exception_data(
                    webob.exc.HTTPInternalServerError(msg))})
            kwargs = {'body': body, 'content_type': content_type}
            raise webob.exc.HTTPInternalServerError(**kwargs)
        status = action_status.get(action, 200)

        if type(result) == dict and  'file' in result.keys():
            content_disposition = "attachment; filename=%s" % result['name']
            content_type = "application/binary; charset=UTF-8"
            contents = result['contents'].decode('base64')
            return file_response(request,status,content_type, content_disposition, contents)

        body = serializer.serialize(result)
        # NOTE(jkoelker) Comply with RFC2616 section 9.7
        if status == 204:
            content_type = ''
            body = None

        return webob.Response(request=request, status=status,
                              content_type=content_type,
                              body=body)