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