Defined Models and REST APIs
TOSCA specs
Synchronizer
Change-Id: Icd9dde1b456711ca7e5f0c69ae547072ff5b3120
diff --git a/xos/api/service/vrouter.py b/xos/api/service/vrouter.py
new file mode 100644
index 0000000..a932931
--- /dev/null
+++ b/xos/api/service/vrouter.py
@@ -0,0 +1,146 @@
+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 services.vrouter.models import *
+from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
+from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
+import json
+
+BASE_NAME = 'vrouter'
+
+
+class VRouterServiceSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ name = serializers.CharField(required=False)
+ kind = serializers.CharField(required=False)
+ service_specific_attribute = serializers.CharField(required=False)
+ humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+
+ class Meta:
+ model = VRouterService
+ fields = ('humanReadableName', 'id', 'name', 'kind', 'service_specific_attribute')
+
+ def getHumanReadableName(self, obj):
+ return obj.__unicode__()
+
+
+class VRouterDeviceSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ name = serializers.CharField(required=False)
+ openflow_id = serializers.CharField(required=False)
+ config_key = serializers.CharField(required=False)
+ driver = serializers.CharField(required=False)
+ vrouter_service = serializers.PrimaryKeyRelatedField(read_only=True)
+
+ ports = serializers.SerializerMethodField("getDevicePorts")
+
+ def getDevicePorts(self, device):
+ ports = VRouterPort.objects.filter(vrouter_device=device.id)
+ return VRouterPortSerializer(ports, many=True).data
+
+ class Meta:
+ model = VRouterDevice
+ fields = ('id', 'name', 'openflow_id', 'config_key', 'driver', 'vrouter_service', 'ports')
+
+
+class VRouterPortSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ name = serializers.CharField(required=False)
+ openflow_id = serializers.CharField(required=False)
+ interfaces = serializers.SerializerMethodField("getPortInterfaces")
+
+ def getPortInterfaces(self, port):
+ interfaces = VRouterInterface.objects.filter(vrouter_port=port.id)
+ return VRouterInterfaceSerializer(interfaces, many=True).data
+
+ class Meta:
+ model = VRouterPort
+ fields = ('id', 'name', 'openflow_id', 'interfaces')
+
+
+class VRouterInterfaceSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ name = serializers.CharField(required=False)
+ mac = serializers.CharField(required=False)
+ vlan = serializers.CharField(required=False)
+ ips = serializers.SerializerMethodField("getInterfaceIps")
+
+ def getInterfaceIps(self, interface):
+ interfaces = VRouterIp.objects.filter(vrouter_interface=interface.id)
+ return VRouterIpSerializer(interfaces, many=True).data
+
+ class Meta:
+ model = VRouterPort
+ fields = ('id', 'name', 'mac', 'vlan', 'ips')
+
+
+class VRouterIpSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ ip = serializers.CharField(required=False)
+ name = serializers.CharField(required=False)
+
+ class Meta:
+ model = VRouterIp
+ fields = ('id', 'ip', 'name')
+
+
+class VRouterAppSerializer(PlusModelSerializer):
+ id = ReadOnlyField()
+ name = serializers.CharField(required=False)
+ control_plane_connect_point = serializers.CharField(required=False)
+ ospf_enabled = serializers.BooleanField(required=False)
+ interfaces = serializers.SerializerMethodField("dumpInterfaces")
+
+ def dumpInterfaces(self, app):
+ return json.dumps(app.interfaces)
+
+ class Meta:
+ model = VRouterApp
+ fields = ('id', 'name', 'control_plane_connect_point', 'ospf_enabled', 'interfaces')
+
+
+class VRouterServiceViewSet(XOSViewSet):
+ base_name = BASE_NAME
+ method_name = "vrouter"
+ method_kind = "viewset"
+ queryset = VRouterService.objects.filter(kind='vROUTER')
+ serializer_class = VRouterServiceSerializer
+
+ @classmethod
+ def get_urlpatterns(self, api_path="^"):
+ patterns = super(VRouterServiceViewSet, self).get_urlpatterns(api_path=api_path)
+
+ patterns.append(self.detail_url("devices/$", {
+ "get": "get_devices"
+ }, "vrouter_devices"))
+
+ patterns.append(self.detail_url("apps/$", {
+ "get": "get_apps"
+ }, "vrouter_apps"))
+
+ return patterns
+
+ def get_devices(self, request, pk=None):
+ if (not request.user.is_authenticated()):
+ raise XOSPermissionDenied("You must be authenticated in order to use this API")
+ else:
+ if(pk is not None):
+ devices = VRouterDevice.objects.filter(vrouter_service=pk)
+ else:
+ devices = VRouterDevice.objects.all()
+ return Response(VRouterDeviceSerializer(devices, many=True).data)
+
+ def get_apps(self, request, pk=None):
+ if (not request.user.is_authenticated()):
+ raise XOSPermissionDenied("You must be authenticated in order to use this API")
+ else:
+ if(pk is not None):
+ apps = VRouterApp.objects.filter(vrouter_service=pk)
+ else:
+ apps = VRouterApp.objects.all()
+ return Response(VRouterAppSerializer(apps, many=True).data)