Defined Models and REST APIs
TOSCA specs
Synchronizer

Change-Id: Icd9dde1b456711ca7e5f0c69ae547072ff5b3120
diff --git a/xos/tosca/resources/vrouterservice.py b/xos/tosca/resources/vrouterservice.py
index 64ee455..6b422c2 100644
--- a/xos/tosca/resources/vrouterservice.py
+++ b/xos/tosca/resources/vrouterservice.py
@@ -1,8 +1,90 @@
 from service import XOSService
-from services.vrouter.models import VRouterService
+from services.vrouter.models import *
+
 
 class XOSVRouterService(XOSService):
     provides = "tosca.nodes.VRouterService"
     xos_model = VRouterService
-    copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "versionNumber"]
+    copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "versionNumber",
+                    "rest_hostname", "rest_port", "rest_user", "rest_pass"]
 
+
+class XOSVRouterDevice(XOSService):
+    provides = "tosca.nodes.VRouterDevice"
+    xos_model = VRouterDevice
+    copyin_props = ['openflow_id', 'config_key', 'driver']
+
+    def get_xos_args(self):
+        args = super(XOSVRouterDevice, self).get_xos_args()
+
+        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=False)
+        if serviceName:
+            service = self.get_xos_object(Service, name=serviceName)
+            args["vrouter_service_id"] = service.id
+        return args
+
+
+class XOSVRouterPort(XOSService):
+    provides = "tosca.nodes.VRouterPort"
+    xos_model = VRouterPort
+    copyin_props = ['openflow_id']
+
+    def get_xos_args(self):
+        args = super(XOSVRouterPort, self).get_xos_args()
+
+        deviceName = self.get_requirement("tosca.relationships.PortOfDevice", throw_exception=False)
+        if deviceName:
+            device = self.get_xos_object(VRouterDevice, name=deviceName)
+            args["vrouter_device"] = device
+
+        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=False)
+        if serviceName:
+            service = self.get_xos_object(Service, name=serviceName)
+            args["vrouter_service_id"] = service.id
+
+        return args
+
+
+class XOSVRouterInterface(XOSService):
+    provides = "tosca.nodes.VRouterInterface"
+    xos_model = VRouterInterface
+    copyin_props = ['name', 'mac', 'vlan']
+
+    def get_xos_args(self):
+        args = super(XOSVRouterInterface, self).get_xos_args()
+
+        portName = self.get_requirement("tosca.relationships.InterfaceOfPort", throw_exception=False)
+        if portName:
+            port = self.get_xos_object(VRouterPort, name=portName)
+            args["vrouter_port"] = port
+        return args
+
+
+class XOSVRouterIp(XOSService):
+    provides = "tosca.nodes.VRouterIp"
+    xos_model = VRouterIp
+    copyin_props = ['ip']
+
+    def get_xos_args(self):
+        args = super(XOSVRouterIp, self).get_xos_args()
+
+        interfaceName = self.get_requirement("tosca.relationships.IpOfInterface", throw_exception=False)
+        if interfaceName:
+            interface = self.get_xos_object(VRouterInterface, name=interfaceName)
+            args["vrouter_interface"] = interface
+        return args
+
+
+class XOSVRouterApp(XOSService):
+    provides = "tosca.nodes.VRouterApp"
+    xos_model = VRouterApp
+    copyin_props = ['name', 'control_plane_connect_point', 'ospf_enabled']
+
+    def get_xos_args(self):
+        args = super(XOSVRouterApp, self).get_xos_args()
+
+        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=True)
+        if serviceName:
+            service = self.get_xos_object(Service, name=serviceName)
+            args["vrouter_service_id"] = service.id
+        return args