ActiveTest Service Creation.
Onboarding is done by running 'make activetest'. fusion.img, qt600.img, vta.img, and vpma.img
should be in the corresponding service_profile's image/ folder in order for images to be
uploaded in glance.
The measurement agents can be created through the different agents tenants. For example, to
create a VPMA tenant, run 'make vpma 1' where '1' can be any numberical identifier for the
tenant to be created.
Measurement agents will automatically register with the fusion controller through the use of
the synchronizer. Furthermore, tests can be orchestrated through XOS by modifying the models
for the vpma agents.
Change-Id: I69bab4b5f771c87126781799217bb36fda478fd3
diff --git a/xos/api/tenant/activetesttenant.py b/xos/api/tenant/activetesttenant.py
new file mode 100644
index 0000000..3da66dd
--- /dev/null
+++ b/xos/api/tenant/activetesttenant.py
@@ -0,0 +1,201 @@
+from rest_framework.decorators import api_view
+from rest_framework.response import Response
+from rest_framework.reverse import reverse
+from rest_framework import serializers
+from rest_framework import generics
+from rest_framework import status
+from core.models import *
+from django.forms import widgets
+from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
+from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
+
+from services.activetest.models import ActiveTestTenant, ActiveTestService, VpmaService, VpmaTenant, Qt600Service, Qt600Tenant
+
+def get_default_activetest_service():
+ activetest_services = ActiveTestService.get_service_objects().all()
+ if activetest_services:
+ return activetest_services[0]
+ return None
+
+class ActiveTestTenantSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ provider_service = serializers.PrimaryKeyRelatedField(queryset=ActiveTestService.get_service_objects().all(), default=get_default_activetest_service)
+ backend_status = ReadOnlyField()
+
+ humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+
+ class Meta:
+ model = ActiveTestTenant
+ fields = ('humanReadableName', 'id', 'provider_service', 'backend_status')
+
+ def getHumanReadableName(self, obj):
+ return obj.__unicode__()
+
+class ActiveTestTenantViewSet(XOSViewSet):
+ base_name = "activetesttenant"
+ method_name = "activetesttenant"
+ method_kind = "viewset"
+ queryset = ActiveTestTenant.get_tenant_objects().all()
+ serializer_class = ActiveTestTenantSerializer
+
+
+ def list(self, request):
+ queryset = self.filter_queryset(self.get_queryset())
+ serializer = self.get_serializer(queryset, many=True)
+ return Response(serializer.data)
+
+#####################################################################################################################
+
+def get_default_vpma_service():
+ vpma_services = VpmaService.get_service_objects().all()
+ if vpma_services:
+ return vpma_services[0]
+ return None
+
+class VpmaTenantSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ provider_service = serializers.PrimaryKeyRelatedField(queryset=VpmaService.get_service_objects().all(), default=get_default_vpma_service)
+ backend_status = ReadOnlyField()
+ is_reflector = serializers.BooleanField(required=False)
+ is_initiator = serializers.BooleanField(required=False)
+ reflector = serializers.CharField(required=False)
+
+ humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+
+ class Meta:
+ model = VpmaTenant
+ fields = ('humanReadableName', 'id', 'provider_service', 'is_reflector', 'is_initiator', 'reflector', 'backend_status')
+
+ def getHumanReadableName(self, obj):
+ return obj.__unicode__()
+
+class VpmaTenantViewSet(XOSViewSet):
+ base_name = "vpmatenant"
+ method_name = "vpmatenant"
+ method_kind = "viewset"
+ queryset = VpmaTenant.get_tenant_objects().all()
+ serializer_class = VpmaTenantSerializer
+
+ @classmethod
+ def get_urlpatterns(self, api_path="^"):
+ patterns = super(VpmaTenantViewSet, self).get_urlpatterns(api_path=api_path)
+
+ # example to demonstrate adding a custom endpoint
+ patterns.append( self.detail_url("is_initiator/$", {"get": "get_is_initiator", "put": "set_is_initiator"}, "is_initiator") )
+ patterns.append( self.detail_url("is_reflector/$", {"get": "get_is_reflector", "put": "set_is_reflector"}, "is_reflector") )
+ patterns.append( self.detail_url("reflector/$", {"get": "get_reflector", "put": "set_reflector"}, "reflector") )
+
+ return patterns
+
+ def list(self, request):
+ queryset = self.filter_queryset(self.get_queryset())
+ serializer = self.get_serializer(queryset, many=True)
+ return Response(serializer.data)
+
+ def get_is_initiator(self, request, pk=None):
+ vpma_tenant = self.get_object()
+ return Response({"is_initiator": vpma_tenant.is_initiator})
+
+ def set_is_initiator(self, request, pk=None):
+ vpma_tenant = self.get_object()
+ vpma_tenant.is_initiator = request.data["is_initiator"]
+ vpma_tenant.save()
+ return Response({"is_initiator": vpma_tenant.is_initiator})
+
+ def get_is_reflector(self, request, pk=None):
+ vpma_tenant = self.get_object()
+ return Response({"is_reflector": vpma_tenant.is_reflector})
+
+ def set_is_reflector(self, request, pk=None):
+ vpma_tenant = self.get_object()
+ vpma_tenant.is_reflector = request.data["is_reflector"]
+ vpma_tenant.save()
+ return Response({"is_reflector": vpma_tenant.is_reflector})
+
+ def get_reflector(self, request, pk=None):
+ vpma_tenant = self.get_object()
+ return Response({"reflector": vpma_tenant.reflector})
+
+ def set_reflector(self, request, pk=None):
+ vpma_tenant = self.get_object()
+ vpma_tenant.reflector = request.data["reflector"]
+ vpma_tenant.save()
+ return Response({"reflector": vpma_tenant.reflector})
+
+#####################################################################################################################
+
+def get_default_qt600_service():
+ qt600_services = Qt600Service.get_service_objects().all()
+ if qt600_services:
+ return qt600_services[0]
+ return None
+
+class Qt600TenantSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ provider_service = serializers.PrimaryKeyRelatedField(queryset=Qt600Service.get_service_objects().all(), default=get_default_qt600_service)
+ backend_status = ReadOnlyField()
+ is_reflector = serializers.BooleanField(required=False)
+ is_initiator = serializers.BooleanField(required=False)
+ reflector = serializers.CharField(required=False)
+
+ humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+
+ class Meta:
+ model = Qt600Tenant
+ fields = ('humanReadableName', 'id', 'provider_service', 'is_reflector', 'is_initiator', 'reflector', 'backend_status')
+
+ def getHumanReadableName(self, obj):
+ return obj.__unicode__()
+
+class Qt600TenantViewSet(XOSViewSet):
+ base_name = "qt600tenant"
+ method_name = "qt600tenant"
+ method_kind = "viewset"
+ queryset = Qt600Tenant.get_tenant_objects().all()
+ serializer_class = Qt600TenantSerializer
+
+ @classmethod
+ def get_urlpatterns(self, api_path="^"):
+ patterns = super(Qt600TenantViewSet, self).get_urlpatterns(api_path=api_path)
+
+ # example to demonstrate adding a custom endpoint
+ patterns.append( self.detail_url("is_initiator/$", {"get": "get_is_initiator", "put": "set_is_initiator"}, "is_initiator") )
+ patterns.append( self.detail_url("is_reflector/$", {"get": "get_is_reflector", "put": "set_is_reflector"}, "is_reflector") )
+ patterns.append( self.detail_url("reflector/$", {"get": "get_reflector", "put": "set_reflector"}, "reflector") )
+
+ return patterns
+
+ def list(self, request):
+ queryset = self.filter_queryset(self.get_queryset())
+ serializer = self.get_serializer(queryset, many=True)
+ return Response(serializer.data)
+
+ def get_is_initiator(self, request, pk=None):
+ qt600_tenant = self.get_object()
+ return Response({"is_initiator": qt600_tenant.is_initiator})
+
+ def set_is_initiator(self, request, pk=None):
+ qt600_tenant = self.get_object()
+ qt600_tenant.is_initiator = request.data["is_initiator"]
+ qt600_tenant.save()
+ return Response({"is_initiator": qt600_tenant.is_initiator})
+
+ def get_is_reflector(self, request, pk=None):
+ qt600_tenant = self.get_object()
+ return Response({"is_reflector": qt600_tenant.is_reflector})
+
+ def set_is_reflector(self, request, pk=None):
+ qt600_tenant = self.get_object()
+ qt600_tenant.is_reflector = request.data["is_reflector"]
+ qt600_tenant.save()
+ return Response({"is_reflector": qt600_tenant.is_reflector})
+
+ def get_reflector(self, request, pk=None):
+ qt600_tenant = self.get_object()
+ return Response({"reflector": qt600_tenant.reflector})
+
+ def set_reflector(self, request, pk=None):
+ qt600_tenant = self.get_object()
+ qt600_tenant.reflector = request.data["reflector"]
+ qt600_tenant.save()
+ return Response({"reflector": qt600_tenant.reflector})