WIP: adding metronet as a tosca service

Change-Id: I59e2bdc7c168aa388dc634b94f3c3353351b5ed2
diff --git a/xos/metronet.m4 b/xos/metronet.m4
index 60796f9..7fcc6b4 100644
--- a/xos/metronet.m4
+++ b/xos/metronet.m4
@@ -6,8 +6,18 @@
 include(macros.m4)
 
 node_types:
-    
-    tosca.nodes.MetroNetworkSystem:
+
+   tosca.nodes.VNodGlobalService:
+        description: >
+            CORD: The MetroNet Service.
+        derived_from: tosca.nodes.Root
+        capabilities:
+            xos_base_service_caps
+        properties:
+            xos_base_props
+            xos_base_service_props
+
+   tosca.nodes.MetroNetworkSystem:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The Metro Network Service.
@@ -15,6 +25,7 @@
             xos_base_service_caps
         properties:
             xos_base_props
+            xos_base_service_props
             administrativeState:
                 type: string
                 required: true
@@ -23,7 +34,7 @@
                 required: false
 
 
-    tosca.nodes.MetroNetworkDevice:
+   tosca.nodes.MetroNetworkDevice:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The Metro Network Device.
@@ -47,3 +58,31 @@
             id:
                 type: string
                 required: true
+
+   tosca.nodes.EcordBandwidthProfile:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord bandwith profile.
+        capabilities:
+            xos_base_service_caps
+        properties:
+            xos_base_props
+            bwpcfgcbs:
+                type: integer
+                required: false
+            bwpcfgebs:
+                type: integer
+                required: false
+            bwpcfgcir:
+                type: integer
+                required: false
+            bwpcfgeir:
+                type: integer
+                required: false
+            name:
+                type: string
+                required: true
+
+   tosca.relationships.UsesBandwidthProfile:
+        derived_from: tosca.relationships.Root
+        valid_target_types: [ tosca.capabilities.xos.EcordBandwidthProfile ]
\ No newline at end of file
diff --git a/xos/metronet.yaml b/xos/metronet.yaml
index b59e971..c0eb018 100644
--- a/xos/metronet.yaml
+++ b/xos/metronet.yaml
@@ -21,8 +21,66 @@
 
 
 node_types:
-    
-    tosca.nodes.MetroNetworkSystem:
+
+   tosca.nodes.VNodGlobalService:
+        description: >
+            CORD: The MetroNet Service.
+        derived_from: tosca.nodes.Root
+        capabilities:
+            scalable:
+                type: tosca.capabilities.Scalable
+            service:
+                type: tosca.capabilities.xos.Service
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            kind:
+                type: string
+                default: generic
+                description: Type of service.
+            view_url:
+                type: string
+                required: false
+                description: URL to follow when icon is clicked in the Service Directory.
+            icon_url:
+                type: string
+                required: false
+                description: ICON to display in the Service Directory.
+            enabled:
+                type: boolean
+                default: true
+            published:
+                type: boolean
+                default: true
+                description: If True then display this Service in the Service Directory.
+            public_key:
+                type: string
+                required: false
+                description: Public key to install into Instances to allows Services to SSH into them.
+            private_key_fn:
+                type: string
+                required: false
+                description: Location of private key file
+            versionNumber:
+                type: string
+                required: false
+                description: Version number of Service.
+
+   tosca.nodes.MetroNetworkSystem:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The Metro Network Service.
@@ -48,6 +106,37 @@
                 type: string
                 required: false
                 descrption: Replaces/renames this object
+            kind:
+                type: string
+                default: generic
+                description: Type of service.
+            view_url:
+                type: string
+                required: false
+                description: URL to follow when icon is clicked in the Service Directory.
+            icon_url:
+                type: string
+                required: false
+                description: ICON to display in the Service Directory.
+            enabled:
+                type: boolean
+                default: true
+            published:
+                type: boolean
+                default: true
+                description: If True then display this Service in the Service Directory.
+            public_key:
+                type: string
+                required: false
+                description: Public key to install into Instances to allows Services to SSH into them.
+            private_key_fn:
+                type: string
+                required: false
+                description: Location of private key file
+            versionNumber:
+                type: string
+                required: false
+                description: Version number of Service.
             administrativeState:
                 type: string
                 required: true
@@ -56,7 +145,7 @@
                 required: false
 
 
-    tosca.nodes.MetroNetworkDevice:
+   tosca.nodes.MetroNetworkDevice:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The Metro Network Device.
@@ -95,3 +184,49 @@
             id:
                 type: string
                 required: true
+
+   tosca.nodes.EcordBandwidthProfile:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord bandwith profile.
+        capabilities:
+            scalable:
+                type: tosca.capabilities.Scalable
+            service:
+                type: tosca.capabilities.xos.Service
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            bwpcfgcbs:
+                type: integer
+                required: false
+            bwpcfgebs:
+                type: integer
+                required: false
+            bwpcfgcir:
+                type: integer
+                required: false
+            bwpcfgeir:
+                type: integer
+                required: false
+            name:
+                type: string
+                required: true
+
+   tosca.relationships.UsesBandwidthProfile:
+        derived_from: tosca.relationships.Root
+        valid_target_types: [ tosca.capabilities.xos.EcordBandwidthProfile ]
\ No newline at end of file
diff --git a/xos/tosca/resources/metronetservice.py b/xos/tosca/resources/metronetservice.py
index 5514d28..3ed5e59 100644
--- a/xos/tosca/resources/metronetservice.py
+++ b/xos/tosca/resources/metronetservice.py
@@ -11,3 +11,22 @@
     provides = "tosca.nodes.MetroNetworkDevice"
     xos_model = NetworkDevice
     copyin_props = ["id", "name", "administrativeState", "username", "password", "authType", "restCtrlUrl"]
+
+class VnodGlobalService(XOSService):
+    provides = "tosca.nodes.VNodGlobalService"
+    xos_model = VnodGlobalService
+    copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "versionNumber"]
+
+    def get_xos_args(self):
+        args = super(VnodGlobalService, self).get_xos_args()
+
+        profile = self.get_requirement("tosca.relationships.UsesBandwidthProfile", throw_exception=False)
+        if profile:
+            profile = self.get_xos_object(BandwidthProfile, name=profile)
+            args["bandwidthProfile"] = profile
+        return args
+
+class XOSMetronetBandwithProficle(XOSResource):
+    provides = "tosca.nodes.EcordBandwidthProfile"
+    xos_model = BandwidthProfile
+    copyin_props = ['bwpcfgcbs','bwpcfgebs','bwpcfgcir','bwpcfgeir','name']
\ No newline at end of file