from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
+from django.http import StreamingHttpResponse
from driver.interfaces.serializers import HealReqSerializer, InstScaleHealRespSerializer, ScaleReqSerializer, \
NotifyReqSerializer, GrantRespSerializer, GrantReqSerializer, JobQueryRespSerializer, TerminateVnfRequestSerializer, \
from driver.pub.utils import restcall
from driver.pub.utils.restcall import req_by_msb
+CHUNK_SIZE = 1024 * 8
+
logger = logging.getLogger(__name__)
return json_data
+def read(file_path, start, end):
+ fp = open(file_path, 'rb')
+ fp.seek(start)
+ pos = start
+ while pos + CHUNK_SIZE < end:
+ yield fp.read(CHUNK_SIZE)
+ pos = fp.tell()
+ yield fp.read(end - pos)
+
+
+def parse_file_range(file_path, file_range):
+ start, end = 0, os.path.getsize(file_path)
+ if file_range:
+ [start, end] = file_range.split('-')
+ start, end = start.strip(), end.strip()
+ start, end = int(start), int(end)
+ return start, end
+
+
def fun_name():
return "=================%s==================" % inspect.stack()[1][3]
return ret
-class InstamtiateVnf(APIView):
+class InstantiateVnf(APIView):
@swagger_auto_schema(
request_body=InstantiateVnfRequestSerializer(),
responses={
def get(self, request):
logger.debug("get")
return Response({"status": "active"})
+
+
+class Subscribe(APIView):
+ def get(self, request):
+ logger.debug("====Subscribe get====")
+ resp_data = {
+ "subscriptions": [{
+ "subscribeid": "cdbddb00-452c-11e9-91e8-acc860114657",
+ "filter": [{
+ "vendor": "ZTE",
+ "type": "vCPE",
+ }],
+ "notificationuri": " https://127.0.0.1:80/v2/vnfm/vnfds/notification",
+ }]
+ }
+ return Response(data=resp_data, status=status.HTTP_200_OK)
+
+ def post(self, request):
+ logger.debug("====Subscribe post====")
+ resp_data = {"subscribeid": "cdbddb00-452c-11e9-91e8-acc860114657"}
+ return Response(data=resp_data, status=status.HTTP_201_CREATED)
+
+
+class SubscribeDetail(APIView):
+ def delete(self, request, subscribeId):
+ logger.debug("====SubscribeDetail delete %s====", subscribeId)
+ return Response(status=status.HTTP_204_NO_CONTENT)
+
+
+class VnfPkgs(APIView):
+ def get(self, request):
+ logger.debug("====VnfPkgs get====")
+ resp_data = {
+ "data": [{
+ "packageid": "924fc980-4530-11e9-ae68-acc860114657",
+ "vendor": "ZTE",
+ "type": "vCPE",
+ "vnfdfile": "MRP6600_FS_SRIOV_4NIC_200W.zip",
+ "imagefiles": ["MRP6600_FS_SRIOV_MRPISU_IMGV500R008C20SPC030T.tar"],
+ "swfiles": ["MRP6600_SRV_V500R008C20SPC030T.tar"],
+ "description": "This is a service for vCPE.",
+ }]
+ }
+ return Response(data=resp_data, status=status.HTTP_200_OK)
+
+
+class VnfPkg(APIView):
+ def get(self, request, packageId, fileName):
+ logger.debug("====VnfPkg get====%s, %s", packageId, fileName)
+ file_range = request.META.get('RANGE')
+ logger.debug('file_range: %s' % file_range)
+ # TODO: get filepath
+ local_file_path = fileName
+ start, end = parse_file_range(local_file_path, file_range)
+ file_iterator = read(local_file_path, start, end)
+ return StreamingHttpResponse(file_iterator, status=status.HTTP_200_OK)