Add TOSCA templates for vCPE use case 43/63643/3
authorEric Multanen <eric.w.multanen@intel.com>
Thu, 30 Aug 2018 03:21:23 +0000 (20:21 -0700)
committerEric Multanen <eric.w.multanen@intel.com>
Fri, 7 Sep 2018 04:03:58 +0000 (21:03 -0700)
Adds initial TOSCA files and script to generate
CSAR files for the vCPE use case VNFs.

Change-Id: Idb85153e8e18b9c21f24aa6ef92d887e17da07c3
Issue-ID: INT-536
Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
18 files changed:
tosca/vCPE/Artifacts/images/ubuntu_16.04 [new file with mode: 0644]
tosca/vCPE/Artifacts/keys/authorized_keys [new file with mode: 0644]
tosca/vCPE/Artifacts/keys/id_rsa [new file with mode: 0644]
tosca/vCPE/Artifacts/keys/id_rsa.pub [new file with mode: 0644]
tosca/vCPE/Definitions/onap_dm.yaml [new file with mode: 0644]
tosca/vCPE/README.md [new file with mode: 0644]
tosca/vCPE/TOSCA-Metadata/TOSCA.meta [new file with mode: 0644]
tosca/vCPE/generate_csar.sh [new file with mode: 0755]
tosca/vCPE/infra/MainServiceTemplate.mf [new file with mode: 0644]
tosca/vCPE/infra/MainServiceTemplate.yaml [new file with mode: 0644]
tosca/vCPE/vbng/MainServiceTemplate.mf [new file with mode: 0644]
tosca/vCPE/vbng/MainServiceTemplate.yaml [new file with mode: 0644]
tosca/vCPE/vbrgemu/MainServiceTemplate.mf [new file with mode: 0644]
tosca/vCPE/vbrgemu/MainServiceTemplate.yaml [new file with mode: 0644]
tosca/vCPE/vgmux/MainServiceTemplate.mf [new file with mode: 0644]
tosca/vCPE/vgmux/MainServiceTemplate.yaml [new file with mode: 0644]
tosca/vCPE/vgw/MainServiceTemplate.mf [new file with mode: 0644]
tosca/vCPE/vgw/MainServiceTemplate.yaml [new file with mode: 0644]

diff --git a/tosca/vCPE/Artifacts/images/ubuntu_16.04 b/tosca/vCPE/Artifacts/images/ubuntu_16.04
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tosca/vCPE/Artifacts/keys/authorized_keys b/tosca/vCPE/Artifacts/keys/authorized_keys
new file mode 100644 (file)
index 0000000..444ca79
--- /dev/null
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
diff --git a/tosca/vCPE/Artifacts/keys/id_rsa b/tosca/vCPE/Artifacts/keys/id_rsa
new file mode 100644 (file)
index 0000000..6059757
--- /dev/null
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu
+zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK
+aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS
+PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY
+ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL
+hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP
+aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c
+1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ
+93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx
+HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA
+siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO
+WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh
+/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq
+kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5
+v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9
+sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u
+Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz
+zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj
+5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352
+rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1
+un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO
+hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9
+z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX
+rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6
+14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw==
+-----END RSA PRIVATE KEY-----
diff --git a/tosca/vCPE/Artifacts/keys/id_rsa.pub b/tosca/vCPE/Artifacts/keys/id_rsa.pub
new file mode 100644 (file)
index 0000000..444ca79
--- /dev/null
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
diff --git a/tosca/vCPE/Definitions/onap_dm.yaml b/tosca/vCPE/Definitions/onap_dm.yaml
new file mode 100644 (file)
index 0000000..0a3faba
--- /dev/null
@@ -0,0 +1,827 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+#Artifact Types
+#Based on R2 Design-time Resource DM clean version v8
+artifact_types:
+  tosca.artifacts.nfv.SwImage:
+    derived_from: tosca.artifacts.Deployment.Image
+
+#Capabilities Type
+#Based on R2 Design-time Resource DM clean version v21
+capability_types:
+  tosca.capabilities.nfv.VirtualBindable:
+    derived_from: tosca.capabilities.Root
+  
+  tosca.capabilities.nfv.Metric:
+    derived_from: tosca.capabilities.Root
+  
+  tosca.capabilities.nfv.VirtualCompute:
+    derived_from: tosca.capabilities.Root
+    properties:
+      logical_node:
+        type: tosca.datatypes.nfv.LogicalNodeData
+        required: false
+      compute_requirements:
+        type: map
+        entry_schema:
+          type: string
+        required: false
+      requested_additional_capabilities:
+        type: map
+        entry_schema:
+           type: tosca.datatypes.nfv.RequestedAdditionalCapability
+        required: false
+      virtual_memory:
+        type: tosca.datatypes.nfv.VirtualMemory
+        required: true
+      virtual_cpu:
+        type: tosca.datatypes.nfv.VirtualCpu
+        required: true
+
+  tosca.capabilities.nfv.VirtualStorage:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.VirtualLinkable:
+    derived_from: tosca.capabilities.Root
+  
+  tosca.capabilities.nfv.ExtVirtualLinkable:
+    derived_from: tosca.capabilities.Root
+
+#Data Types
+#Based on R2 Design-time Resource DM clean version v45
+data_types:
+  tosca.datatypes.nfv.L2AddressData:
+    derived_from: tosca.datatypes.Root
+    properties: 
+      mac_address_assignment:
+        type: boolean
+        required: true
+
+  tosca.datatypes.nfv.injectFile:
+    derived_from: tosca.datatypes.Root
+    properties: 
+      source_path:
+        type: string
+        required: true
+      dest_path:
+        type: string
+        required: true
+
+  tosca.datatypes.nfv.L3AddressData:
+    derived_from: tosca.datatypes.Root
+    properties: 
+      ip_address_assignment:
+        type: boolean
+        required: true   
+      floating_ip_activated:
+        type: boolean
+        required: true
+      ip_address_type:
+        type: string
+        required: false
+        constraints:
+          - valid_values: [ipv4, ipv6]
+      number_of_ip_address:
+        type: integer
+        required: false
+      fixed_ip_address:
+        type: list
+        entry_schema:
+          type: string
+        required: false
+
+  tosca.datatypes.nfv.AddressData:
+    derived_from: tosca.datatypes.Root
+    properties: 
+      address_type:
+        type: string
+        required: true
+        constraints:
+          - valid_values: [mac_address, ip_address]    
+      l2_address_data:
+        type: tosca.datatypes.nfv.L2AddressData # empty in "GS NFV IFA011 V0.7.3"
+        required: false
+      l3_address_data:
+        type: tosca.datatypes.nfv.L3AddressData
+        required: false 
+  
+  tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements:
+    derived_from: tosca.datatypes.Root
+    properties: 
+      name:
+        type: string
+        required: false   
+      description:
+        type: string
+        required: false
+      support_mandatory:
+        type: boolean
+        required: true
+      #TODO HPA
+      network_interface_requirements:
+        type: map
+        entry_schema:
+          type: string
+        required: true
+      nic_io_requirements:
+        type: tosca.datatypes.nfv.LogicalNodeData
+        required: false
+  
+  tosca.datatypes.nfv.ConnectivityType:
+    derived_from: tosca.datatypes.Root
+    properties: 
+      layer_protocol:
+        type: string
+        required: true
+        constraints:
+          - valid_values: [ethernet, mpls, odu2, ipv4, ipv6, pseudo_wire ]  
+      flow_pattern:
+        type: string
+        required: false
+        constraints: # not defined in IFA011 v2.4.1 and SOL001 v.6.0
+          - valid_values: [Line, Tree, Mesh]
+  
+  tosca.datatypes.nfv.RequestedAdditionalCapability:
+    derived_from: tosca.datatypes.Root
+    properties:
+      #name:
+        # key of containing map
+      support_mandatory:
+        type: boolean
+        required: true
+      min_requested_additional_capability_version:
+        type: string
+        required: false
+      preferred_requested_additional_capability_version:
+        type: string
+        required: false
+      requested_additional_capability_name:
+        type: string
+        required: true
+      target_performance_parameters:
+        type: map
+        entry_schema:
+          type: string
+        required: true     
+  
+  tosca.datatypes.nfv.VirtualMemory:
+      derived_from: tosca.datatypes.Root
+      properties:
+        virtual_mem_size:
+          type: scalar-unit.size # Number
+          required: true
+        virtual_mem_oversubscription_policy:
+          type: string
+          required: false
+        #TODO HPA
+        vdu_memory_requirements:
+          type: map
+          entry_schema:
+           type: string
+          required: false
+        numa_enabled:
+          type: boolean
+          required: false
+  
+  tosca.datatypes.nfv.VirtualCpu:
+    derived_from: tosca.datatypes.Root
+    properties:
+      cpu_architecture:
+        type: string
+        required: false
+      num_virtual_cpu:
+        type: integer
+        required: true
+      virtual_cpu_clock:
+        type: scalar-unit.frequency
+        required: false
+      virtual_cpu_oversubscription_policy:
+        type: string
+        required: false
+      #TODO HPA
+      vdu_cpu_requirements:
+        type: map
+        entry_schema:
+           type: string
+        required: false
+      virtual_cpu_pinning:
+        type: tosca.datatypes.nfv.VirtualCpuPinning
+        required: false
+  
+  tosca.datatypes.nfv.VirtualCpuPinning:
+    derived_from: tosca.datatypes.Root
+    properties:
+      cpu_pinning_policy:
+        type: string # CpuPinningPolicy
+        constraints:
+          - valid_values: [ static, dynamic ]
+        required: false
+      cpu_pinning_map:
+        type: map
+        entry_schema:
+          type: string
+        required: false
+  
+  tosca.datatypes.nfv.VnfcConfigurableProperties:
+    derived_from: tosca.datatypes.Root
+    properties:
+      additional_vnfc_configurable_properties:
+        type: map
+        entry_schema:
+          type: string
+        required: false
+  
+  tosca.datatypes.nfv.VduProfile:
+      derived_from: tosca.datatypes.Root
+      properties:
+        min_number_of_instances:
+          type: integer
+          required: true
+        max_number_of_instances:
+          type: integer
+          required: true
+        #localAffinityOrAntiAffinityRule:  # not defined in SOL001 v.6.0
+        #  type: tosca.datatype.nfv.LocalAffinityOrAntiAffinityRule
+        #  required: true
+        #affinityOrAntiAffinityGroupId: # not defined in SOL001 v.6.0
+        #  type: string
+        #  required: true
+        watchdog: #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+          type: string
+          required: true
+        vmBootUpTimeOut: #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+          type: integer
+          required: false
+  
+   
+  tosca.datatypes.nfv.VlProfile:
+      derived_from: tosca.datatypes.Root
+      properties:
+        max_bit_rate_requirements:
+           type: tosca.datatypes.nfv.LinkBitRateRequirements
+           required: true
+        min_bit_rate_requirements:
+           type: tosca.datatypes.nfv.LinkBitRateRequirements
+           required: true
+        qos:
+           type: tosca.datatypes.nfv.Qos
+           required: false
+        initiationParameters: #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: map
+           entry_schema:
+             type: string
+           required: false
+        cidr: #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+        networkName:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+        startIp:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+        endIp:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+        gatewayIp:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+        segmentationId:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: integer
+           required: false
+        physicalNetwork:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+        networkType:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: string
+           required: false
+           constraints:
+             - valid_values: [VLAN, VXLAN]
+        dhcpEnabled:  # not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: boolean
+           required: false
+        vlanTransparent:  #Align with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v.6.0
+           type: boolean
+           required: false
+  
+  tosca.datatypes.nfv.InstantiationLevel:
+      derived_from: tosca.datatypes.Root
+      properties:
+        description:
+          type: string
+          required: true
+        vdu_levels:
+          type: map # key: vduId
+          required: true
+          entry_schema:
+            type: tosca.datatypes.nfv.VduLevel
+        scale_info:
+          type: map # key: aspectId
+          required: false
+          entry_schema:
+            type: tosca.datatypes.nfv.ScaleInfo
+  
+  tosca.datatypes.nfv.VduLevel:
+      derived_from: tosca.datatypes.Root
+      properties:
+        number_of_instances:
+          type: integer
+          required: true
+  
+  tosca.datatypes.nfv.VnfLcmOperationsConfiguration: 
+    derived_from: tosca.datatypes.Root 
+    properties: 
+      instantiate: 
+        type: tosca.datatypes.nfv.VnfInstantiateOperationConfiguration 
+      scale:
+        type: tosca.datatypes.nfv.VnfScaleOperationConfiguration 
+      scale_to_level: 
+        type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration 
+      heal: 
+        type: tosca.datatypes.nfv.VnfHealOperationConfiguration
+      terminate:
+        type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration
+      operate: 
+        type: tosca.datatypes.nfv.VnfOperateOperationConfiguration
+  
+  tosca.datatypes.nfv.VnfInstantiateOperationConfiguration:
+      derived_from: tosca.datatypes.Root
+      #properties:
+        #parameters:
+            #modeled as part of operation parameter list
+  
+  tosca.datatypes.nfv.VnfScaleOperationConfiguration:
+      derived_from: tosca.datatypes.Root
+      properties:
+        #parameters:
+           #modeled as part of the operation parameter list
+        scaling_by_more_than_one_step_supported:
+           type: boolean
+  
+  tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration:
+      derived_from: tosca.datatypes.Root
+      properties:
+        #parameters:
+           #modeled as part of the operation parameter list
+        arbitrary_target_levels_supported:
+           type: boolean
+  
+  tosca.datatypes.nfv.VnfHealOperationConfiguration:
+      derived_from: tosca.datatypes.Root
+      properties:
+        #parameters:
+           #modeled as part of the operation parameter list
+        causes:
+           type: list
+           entry_schema:
+             type: string
+  
+  tosca.datatypes.nfv.VnfTerminateOperationConfiguration:
+      derived_from: tosca.datatypes.Root
+      properties:
+        min_graceful_termination_timeout:
+           type: integer
+        max_recommended_graceful_termination_timeout:
+           type: integer
+  
+  tosca.datatypes.nfv.VnfOperateOperationConfiguration:
+    derived_from: tosca.datatypes.Root
+    properties:
+      min_graceful_termination_timeout:
+           type: integer
+      max_recommended_graceful_termination_timeout:
+           type: integer
+  
+  tosca.datatypes.nfv.ScaleInfo:
+    derived_from: tosca.datatypes.Root
+    properties:
+      scaleLevel:
+           type: integer
+           required: true
+  
+  tosca.datatypes.nfv.ScaleAspect:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+         type: string
+         required: true
+      description:
+         type: string
+         required: true
+      associated_group:
+         type: string #Identifier
+         required: false
+      max_scale_level:
+         type: integer #PositiveInteger
+         required: true
+  
+  tosca.datatypes.nfv.LinkBitRateRequirements:
+    derived_from: tosca.datatypes.Root
+    properties:
+      root:
+         type: integer
+         required: true
+      leaf:
+         type: integer
+         required: true
+  
+  tosca.datatypes.nfv.Qos:
+    derived_from: tosca.datatypes.Root
+    properties:
+      latency:
+         type: integer #Number [ms]
+         required: true
+      packet_delay_variation:
+         type: integer #Number [ms]
+         required: true
+      packet_loss_ratio:
+         type: float
+         constraints:
+           - in_range: [ 0.0, 1.0 ]
+         required: false
+  
+  tosca.datatypes.nfv.CpProtocolData:
+    derived_from: tosca.datatypes.Root
+    properties:
+      asscociated_layer_protocol:
+        type: string
+        constraints:
+          - valid_values: [ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire ]
+        required: true
+      address_data:
+        type: tosca.datatypes.nfv.AddressData
+        required: false
+  
+  tosca.datatypes.nfv.VnfConfigurableProperties:
+    derived_from: tosca.datatypes.Root
+    properties:
+      is_autoscale_enabled:
+        type: boolean
+        required: false
+      is_autoheal_enabled:
+        type: boolean
+        required: false
+      additional_configurable_properties:
+        type: tosca.datatypes.nfv.VnfAdditionalConfigurableProperties
+        required: false
+  
+  tosca.datatypes.nfv.VnfAdditionalConfigurableProperties:
+    derived_from: tosca.datatypes.Root
+  
+  tosca.datatypes.nfv.VnfInfoModifiableAttributes:
+    derived_from: tosca.datatypes.Root
+    properties:
+      extensions:
+        type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions
+        required: false
+      metadata:
+        type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata
+        required: false
+  
+  tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions:
+    derived_from: tosca.datatypes.Root
+  
+  tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata:
+    derived_from: tosca.datatypes.Root
+  
+  tosca.datatypes.nfv.LogicalNodeData:
+    derived_from: tosca.datatypes.Root
+    properties:
+      #TODO HPA
+      logical_node_requirements:
+        type: map # not defined in SOL001 v.6.0
+        entry_schema:
+          type: string
+        required: false
+
+#Interface Types
+#Based on R2 Design-time Resource DM clean version v10
+interface_types:
+  tosca.interfaces.nfv.vnf.lifecycle.Nfv:
+    derived_from: tosca.interfaces.Root
+    instantiate:
+      description: Invoked upon receipt of an Instantiate VNF request
+    instantiate_start:
+      description: Invoked before instantiate
+    instantiate_end:
+      description: Invoked after instantiate
+    terminate:
+      description: Invoked upon receipt Terminate VNF request
+    terminate_start:
+      description: Invoked before terminate
+    terminate_end:
+      description: Invoked after terminate
+    modify_information:
+      description: Invoked upon receipt of a Modify VNF Information request
+    modify_information_start:
+      description: Invoked before modify_information
+    modify_information_end:
+      description: Invoked after modify_information
+    change_flavour:
+      description: Invoked upon receipt of a Change VNF Flavour request
+    change_flavour_start:
+      description: Invoked before change_flavour
+    change_flavour_end:
+      description: Invoked after change_flavour
+    change_external_connectivity:
+      description: Invoked upon receipt of a Change External VNF Connectivity request
+    change_external_connectivity_start:
+      description: Invoked before change_external_connectivity
+    change_external_connectivity_end:
+      description: Invoked after change_external_connectivity
+    operate:
+      description: Invoked upon receipt of an Operate VNF request
+    operate_start:
+      description: Invoked before operate
+    operate_end:
+      description: Invoked after operate
+    heal:
+      description: Invoked upon receipt of a Heal VNF request
+    heal_start:
+      description: Invoked before heal
+    heal_end:
+      description: Invoked after heal
+    scale:
+      description: Invoked upon receipt of a Scale VNF request
+    scale_start:
+      description: Invoked before scale
+    scale_end:
+      description: Invoked after scale 
+    scale_to_level:
+      description: Invoked upon receipt of a Scale VNF to Level request
+    scale_to_level_start:
+      description: Invoked before scale_to_level
+    scale_to_level_end:
+      description: Invoked after scale_to_level
+  #  indicator_changed:
+  #    description: On receiving a VNF indicator value change notification
+
+#Node Types
+#Based on R2 Design-time Resource DM clean version v36
+node_types:
+  tosca.nodes.nfv.Vdu.Compute:
+    derived_from: tosca.nodes.Root
+    properties:
+      name:
+        type: string
+        required: true
+      description:
+        type: string
+        required: true
+      boot_order:
+        type: list # explicit index (boot index) not necessary, contrary to IFA011
+        entry_schema:
+          type: string
+        required: false
+      nfvi_constraints:
+        type: list
+        entry_schema:
+          type: string
+        required: false
+      configurable_properties:
+        type: map
+        entry_schema:
+           type: tosca.datatypes.nfv.VnfcConfigurableProperties
+        required: true 
+      vdu_profile:
+        type: tosca.datatypes.nfv.VduProfile
+        required: true
+      inject_files: #Aligned with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v0.6.0
+        #type: list
+        #entry_schema:
+        #TODO workaround of SDC bug
+        type: tosca.datatypes.nfv.injectFile
+        required: false
+      meta_data: #metadata attached to the VM or container
+        type: map
+        entry_schema:
+          type: string
+        required: false
+      user_data: #cloudinit userdata script support
+        type: string
+        required: false
+    #attributes: NOT DEFINED IN ONAP IM and SOL001
+      #private_address:
+      #  status: deprecated
+      #public_address:
+      #  status: deprecated
+      #networks:
+      #  status: deprecated
+      #ports:
+      #  status: deprecated
+    capabilities:
+      virtual_compute:
+        type: tosca.capabilities.nfv.VirtualCompute
+      virtual_binding:
+        type: tosca.capabilities.nfv.VirtualBindable
+        occurrences: [1, UNBOUNDED]
+      monitoring_parameter:
+        type: tosca.capabilities.nfv.Metric
+        occurrences: [0, UNBOUNDED]
+    requirements:
+      - virtual_storage:
+          capability: tosca.capabilities.nfv.VirtualStorage
+          relationship: tosca.relationships.nfv.Vdu.AttachedTo
+          node: tosca.nodes.nfv.Vdu.VirtualStorage
+          occurrences: [ 0, UNBOUNDED ]
+    #artifacts:
+    #  - sw_image:
+    #      file:
+    #      type: tosca.artifacts.nfv.SwImage
+  
+  tosca.nodes.nfv.Vdu.VirtualStorage:
+    derived_from: tosca.nodes.Root
+    properties:
+      #id:
+        # node name
+      type_of_storage:
+        type: string
+        constraints:
+          - valid_values: [volume, object, root, block]
+        required: true
+      size_of_storage:
+        type: scalar-unit.size
+        required: true
+      #TODO HPA
+      vdu_storage_requirements:
+        type: map
+        entry_schema:
+          type: string
+        required: false
+      rdma_enabled:
+        type: boolean
+        required: false
+    capabilities:
+      virtual_storage:
+        type: tosca.capabilities.nfv.VirtualStorage
+    #artifacts:
+    #  - sw_image:
+    #     file:
+    #     type: tosca.artifacts.Deployment.Image
+  
+  tosca.nodes.nfv.Cp:
+    derived_from: tosca.nodes.Root
+    properties:
+      layer_protocol:
+        type: list
+        entry_schema:
+          constraints:
+            - valid_values: [ethernet, mpls, odu2, ipv4, ipv6, pseudo_wire ]
+          type: string
+        required: true
+      role: #Name in ETSI NFV IFA011 v0.7.3 cpRole
+        type: string
+        constraints:
+          - valid_values: [ root, leaf ]
+        required: false
+      description:
+        type: string
+        required: false
+      protocol_data:
+        type: list
+        entry_schema:
+          type: tosca.datatypes.nfv.CpProtocolData
+        required: true
+      trunk_mode:
+        type: boolean
+        required: true
+      allowedAddressData: # Aligned with ONAP R2 Im.not defined in IFA011 v2.4.1 and SOL001 v0.6.0
+        type: tosca.datatypes.nfv.AddressData
+        required: false
+  
+  tosca.nodes.nfv.VduCp:
+    derived_from: tosca.nodes.nfv.Cp
+    properties:
+      bitrate_requirement:
+        type: integer
+        required: false
+      vnic_name: #  Aligned with ONAP R2 Im.not defined in IFA011 v2.4.1 and SOL001 v0.6.0
+        type: string
+        required: false
+      vnic_order: # Aligned with ONAP R2 Im. not defined in IFA011 v2.4.1 and SOL001 v0.6.0
+        type: integer
+        required: false
+      vnic_type: # Aligned with ONAP R2 Im. not defined in IFA011 v2.4.1 and SOL001 v0.6.0
+        type: string
+        constraints:
+            - valid_values: [normal, macvtap, direct, baremetal, direct-physical, virtio-forwarder]
+        required: false
+      virtual_network_interface_requirements:
+        type: list
+        entry_schema:
+          type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements
+        required: false
+      #order:
+      #  type: integer
+      #  required: false
+      #  constraints:
+      #    - greater_or_equal: 0
+    requirements:
+      - virtual_link:
+          capability: tosca.capabilities.nfv.VirtualLinkable
+          relationship: tosca.relationships.nfv.VirtualLinksTo
+          node: tosca.nodes.nfv.VnfVirtualLink   
+      - virtual_binding:
+          capability: tosca.capabilities.nfv.VirtualBindable
+          relationship: tosca.relationships.nfv.VirtualBindsTo
+          node: tosca.nodes.nfv.Vdu.Compute
+  
+  tosca.nodes.nfv.VnfVirtualLink:
+    derived_from: tosca.nodes.Root
+    properties:
+      connectivity_type:
+        type: tosca.datatypes.nfv.ConnectivityType
+        required: true
+      description:
+        type: string
+        required: false
+      test_access:
+        type: list
+        entry_schema:
+          type: string
+        required: false
+      vl_profile:
+        type: tosca.datatypes.nfv.VlProfile
+        required: true
+    capabilities:
+      monitoring_parameter:
+        type: tosca.capabilities.nfv.Metric
+        occurrences: [0, UNBOUNDED]
+      virtual_linkable:
+        type: tosca.capabilities.nfv.VirtualLinkable
+  
+  tosca.nodes.nfv.VNF:
+    derived_from: tosca.nodes.Root
+    properties:
+      descriptor_id: # instead of vnfd_id
+        type: string # GUID
+        required: true
+      descriptor_version: # instead of vnfd_version
+        type: string
+        required: true
+      provider: # instead of vnf_provider
+        type: string
+        required: true
+      product_name: # instead of vnf_product_name
+        type: string
+        required: true
+      software_version: # instead of vnf_software_version
+        type: string
+        required: true
+      product_info_name: # instead of vnf_product_info_name
+        type: string
+        required: false
+      product_info_description: # instead of vnf_product_info_description
+        type: string
+        required: false
+      vnfm_info:
+        type: list
+        entry_schema:
+          type: string
+        required: true
+      localization_languages:
+        type: list
+        entry_schema:
+          type: string
+        required: false
+      default_localization_language:
+        type: string
+        required: false
+      configurable_properties:
+        type: tosca.datatypes.nfv.VnfConfigurableProperties
+        required: false
+      modifiable_attributes:
+        type: tosca.datatypes.nfv.VnfInfoModifiableAttributes
+        required: false  # true in IFA011, but all of members are false
+      flavour_id:
+        type: string
+        required: true
+      flavour_description:
+        type: string
+        required: true
+    #capabilities:
+      # monitoring_parameter:
+        # modelled as ad hoc capabilities in the VNF node template
+    requirements:
+      - virtual_link:
+          capability: tosca.capabilities.nfv.VirtualLinkable
+          relationship: tosca.relationships.nfv.VirtualLinksTo
+          node: tosca.nodes.nfv.VnfVirtualLink
+          occurrences: [ 0, UNBOUNDED ]
+    interfaces:
+      Nfv:
+        type: tosca.interfaces.nfv.vnf.lifecycle.Nfv
+
+#Relationship Types
+#Based on R2 Design-time Resource DM clean version v4
+relationship_types:
+  tosca.relationships.nfv.VirtualBindsTo:
+    derived_from: tosca.relationships.DependsOn
+    valid_target_types: [ tosca.capabilities.nfv.VirtualBindable]
+  
+  tosca.relationships.nfv.VirtualLinksTo:
+    derived_from: tosca.relationships.DependsOn
+    valid_target_types: [ tosca.capabilities.nfv.VirtualLinkable]
+
+  tosca.relationships.nfv.Vdu.AttachedTo:
+    derived_from: tosca.relationships.DependsOn
+    valid_target_types: [ tosca.capabilities.nfv.VirtualStorage]
diff --git a/tosca/vCPE/README.md b/tosca/vCPE/README.md
new file mode 100644 (file)
index 0000000..f4f7e9c
--- /dev/null
@@ -0,0 +1,15 @@
+# vCPE_tosca
+
+5 VNFs are here for the ONAP vCPE use case. These VNFD are transformed manually from vCPE heat template. 
+
+Please run ./generate_csar.sh to create the csar package files for these 5 VNFS. CSAR package file is just a zip formatted file.
+
+## pending issues to DM
+Please search for "TODO" in the corresponding VNFD to find the pending things.
+- HPA detailed format
+- Need to remove all the VirtualLink definition. Those VirtualLink(network) should be created in SDC during service design time and have them connected to the VduCp(port).
+- Update to the latest heat template.
+
+## References:
+- [vCPE use case](https://wiki.onap.org/pages/viewpage.action?pageId=3246168)
+- [vCPE usage tutorial for A release](https://wiki.onap.org/display/DW/vCPE+Use+Case+Tutorial%3A+Design+and+Deploy+based+on+ONAP+Amsterdam+Release) Based on heat.
diff --git a/tosca/vCPE/TOSCA-Metadata/TOSCA.meta b/tosca/vCPE/TOSCA-Metadata/TOSCA.meta
new file mode 100644 (file)
index 0000000..4eaf193
--- /dev/null
@@ -0,0 +1,4 @@
+TOSCA-Meta-File-Version: 1.0
+CSAR-Version: 1.1
+Created-By: ONAP
+Entry-Definitions: Definitions/MainServiceTemplate.yaml
diff --git a/tosca/vCPE/generate_csar.sh b/tosca/vCPE/generate_csar.sh
new file mode 100755 (executable)
index 0000000..21ba3a6
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+#*******************************************************************************
+# Copyright (c) 2018 Intel Corp and/or its affiliates.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#*******************************************************************************
+
+
+ROOT_DIR=`dirname $(readlink -f $0)`
+DEST=`pwd`
+PREFIX="vcpe_"
+
+DIRS="infra vbrgemu vbng vgmux vgw"
+
+for dir in $DIRS; do
+
+    # prepare temporary csar build subdirectory
+    cd $ROOT_DIR/$dir
+    mkdir $ROOT_DIR/$dir/tmp
+    cp MainServiceTemplate.mf MainServiceTemplate.yaml tmp/
+    cp -r $ROOT_DIR/Artifacts tmp/
+    cp -r $ROOT_DIR/Definitions tmp/
+    cp -r $ROOT_DIR/TOSCA-Metadata tmp/
+    cp MainServiceTemplate.yaml tmp/Definitions
+    cd $ROOT_DIR/$dir/tmp
+
+    # create the csar file
+    zip -r $ROOT_DIR/$dir/$dir.csar Artifacts/ TOSCA-Metadata/ Definitions/ MainServiceTemplate.mf MainServiceTemplate.yaml
+    rm -f $DEST/$dir.csar
+    mv $ROOT_DIR/$dir/$dir.csar $DEST/
+
+    # clean up temporary csar build subdirectory
+    cd $ROOT_DIR/$dir
+    rm -r $ROOT_DIR/$dir/tmp
+done
diff --git a/tosca/vCPE/infra/MainServiceTemplate.mf b/tosca/vCPE/infra/MainServiceTemplate.mf
new file mode 100644 (file)
index 0000000..affc460
--- /dev/null
@@ -0,0 +1,8 @@
+metadata:
+    vnf_product_name: vcpe_infra
+    vnf_provider_id: ONAP
+    vnf_package_version: 1.0
+    vnf_release_data_time: 2018.05.06T13:00+08:00
+
+source: MainServiceTemplate.yaml
+
diff --git a/tosca/vCPE/infra/MainServiceTemplate.yaml b/tosca/vCPE/infra/MainServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..22c3ad9
--- /dev/null
@@ -0,0 +1,759 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+  template_name: vCPE_infra
+  template_version: "1.0"
+  template_author: onap
+description: vCPE_infra
+
+imports:
+  - onap_dm.yaml
+
+node_types:
+  onap.vcpe_infra:
+    derived_from: tosca.nodes.nfv.VNF
+    properties:
+      descriptor_id:
+        type: string
+        constraints: [ valid_values: [ b1bb0ce7-1111-4fa7-95ed-4840d70a1177 ] ]
+        default: b1bb0ce7-1111-4fa7-95ed-4840d70a1177
+      provider:
+        type: string
+        constraints: [ valid_values: [ onap ] ]
+        default: onap
+      product_name:
+        type: string
+        constraints: [ valid_values: [ vcpe_infra ] ]
+        default: vcpe_infra
+      software_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      descriptor_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      flavour_id:
+        type: string
+        constraints: [ valid_values: [ simple ] ]  #only one and only allowed one DF in this example
+        default: simple
+      flavour_description:
+        type: string
+        default: simple
+      vnfm_info:
+        type: list
+        entry_schema:
+          type: string
+        default: ['gvnfm']
+
+topology_template:
+#  substitution_mappings:
+#    node_type: onap.vcpe_infra
+#    requirements:
+#      virtual_link: [ Cp_vaaa_public, virtual_link ] # expose as external CP
+#      virtual_link: [ Cp_vaaa_onap_private, virtual_link ] # expose as external CP
+#      virtual_link: [ Cp_vdns_public, virtual_link ]
+#      virtual_link: [ Cp_vdns_onap_private, virtual_link ]
+#      virtual_link: [ Cp_vdhcp_public, virtual_link ]
+#      virtual_link: [ Cp_vdhcp_onap_private, virtual_link ]
+#      virtual_link: [ Cp_vweb_public, virtual_link ]
+#      virtual_link: [ Cp_vweb_onap_private, virtual_link ]
+
+  inputs:
+    vcpe_image_name:
+      type: string
+      description: image name for vcpe in openstack glance
+      default: ubuntu_16.04
+    public_net_id:
+      type: string
+      description: public network id used during onap installation
+      default: external
+    onap_private_net_id:
+      type: string
+      description: onap OAM network id
+      default: oam_onap
+    onap_private_net_cidr:
+      type: string
+      description: oanp OAM network cidr
+      default: 10.0.0.0/16
+    mr_ip_addr:
+      type: string
+      description: message router ip that for vDHCP configuration 
+      default: 10.0.11.1
+    dcae_collector_ip:
+      type: string
+      description: dcae collector ip
+      default: 10.0.4.102
+    dcae_collector_port:
+      type: integer
+      description: dcae collector port
+      default: 8080
+    nexus_artifact_repo:
+      type: string
+      description: Root URL for the Nexus repository for Maven artifacts
+      default: https://nexus.onap.org
+    demo_artifacts_version:
+      type: string
+      description: artifacts version used in demo vnfs
+      default: 1.2.0
+    install_script_version:
+      type: string
+      description: install script version number
+      default: 1.2.0-SNAPSHOT
+    cloud_env:
+      type: string
+      description: cloud environment(openstack or rackspace)
+      default: openstack
+    pub_key:
+      type: string
+      description: ssh public key
+      default: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
+    cpe_signal_net_id:
+      type: string
+      description: cpe signal net name
+      default: zdfw1cpe01_private
+    cpe_signal_net_cidr:
+      type: string
+      description: cpe signal net cidr
+      default: 10.4.0.0/24
+    cpe_public_net_id:
+      type: string
+      description: cpe public net name
+      default: zdfw1cpe01_public
+    cpe_public_net_cidr:
+      type: string
+      description: cpe public net cidr
+      default: 10.2.0.0/24
+    vdhcp_name_0:
+      type: string
+      description: vdu vdhcp_0 name
+      default: zdcpe1cpe01dhcp01
+    vdhcp_private_ip_0:
+      type: string
+      description: ip of vdhcp port to cpe signal net
+      default: 10.4.0.1
+    vdhcp_private_ip_1:
+      type: string
+      description: ip of vdhcp port to onap oam net
+      default: 10.0.101.1
+    vaaa_name_0:
+      type: string
+      description: vdu vaaa_0 name
+      default: zdcpe1cpe01aaa01
+    vaaa_private_ip_0:
+      type: string
+      description: ip of vaaa port to cpe signal net
+      default: 10.4.0.4
+    vaaa_private_ip_1:
+      type: string
+      description: ip of vaaa port to onap oam net
+      default: 10.0.101.2
+    vdns_name_0:
+      type: string
+      description: vdu vdns_0 name
+      default: zdcpe1cpe01dns01
+    vdns_private_ip_0:
+      type: string
+      description: ip of vdns port to cpe public net
+      default: 10.2.0.1
+    vdns_private_ip_1:
+      type: string
+      description: ip of vdns port to onap oam net
+      default: 10.0.101.3
+    vweb_name_0:
+      type: string
+      description: vdu vweb_0 name
+      default: zdcpe1cpe01web01
+    vweb_private_ip_0:
+      type: string
+      description: ip of vweb port to cpe public net
+      default: 10.2.0.10
+    vweb_private_ip_1:
+      type: string
+      description: ip of vweb port to onap oam net
+      default: 10.0.101.40
+    vnf_id:
+      type: string
+      description: The VNF ID is provided by ONAP
+      default: vCPE_Infrastructure_demo_app
+    vf_module_id:
+      type: string
+      description: The vCPE Module ID is provided by ONAP
+      default: vCPE_Intrastructure
+
+  node_templates:
+    #onap public net
+#    VL_public:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: public_net_id }
+#
+#    #onap oam net
+#    VL_onap_private:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: onap_private_net_id }
+#          cidr: { get_input: onap_private_net_cidr }
+
+    #cpe signal network
+    VL_cpe_signal:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: cpe_signal_net_id}
+          cidr: { get_input: cpe_signal_net_cidr }
+          dhcpEnabled: false
+
+    #cpe public network
+    VL_cpe_public:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: cpe_public_net_id}
+          cidr: { get_input: cpe_public_net_cidr }
+          dhcpEnabled: false
+
+    # vaaa related
+    Cp_vaaa_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vaaa_0
+#        - virtual_link: VL_public
+
+    Cp_vaaa_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vaaa_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vaaa_0
+#        - virtual_link: VL_onap_private
+
+    Cp_vaaa_cpe_signal:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vaaa_private_ip_0 }
+      requirements:
+        - virtual_binding: VDU_vaaa_0
+        - virtual_link: VL_cpe_signal
+
+    VirtualStorage_root_all:
+      # this indicate the VDU root storage size
+      type: tosca.nodes.nfv.Vdu.VirtualStorage
+      properties:
+        type_of_storage: root
+        size_of_storage: 40 GB
+
+    VDU_vaaa_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vaaa_name_0 }
+        description: vaaa
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: #TODO SDC Bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          dcae_collector_ip: { get_input: dcae_collector_ip }
+          dcae_collector_port: { get_input: dcae_collector_port }
+          cpe_signal_net_ipaddr: { get_input: vaaa_private_ip_0 }
+          oam_ipaddr: { get_input: vaaa_private_ip_1 }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          cpe_signal_net_cidr: { get_input: cpe_signal_net_cidr }
+          demo_artifacts_version: { get_input: demo_artifacts_version }
+          install_script_version: { get_input: install_script_version }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata dcae_collector_ip)" > /opt/config/dcae_collector_ip.txt
+          echo "$(get_metadata dcae_collector_port)" > /opt/config/dcae_collector_port.txt
+          echo "$(get_metadata cpe_signal_net_ipaddr)" > /opt/config/cpe_signal_net_ipaddr.txt
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata oam_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata cpe_signal_net_cidr)" > /opt/config/cpe_signal_net_cidr.txt
+          echo "$(get_metadata demo_artifacts_version)" > /opt/config/demo_artifacts_version.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_aaa_install.sh
+          cd /opt
+          chmod +x v_aaa_install.sh
+          ./v_aaa_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            #TODO add local disk size
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+            virtual_cpu:
+              num_virtual_cpu: 2
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
+
+    # vdns related
+    Cp_vdns_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vdns_0
+#        - virtual_link: VL_public
+
+    Cp_vdns_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vdns_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vdns_0
+        #- virtual_link: VL_onap_private
+
+    Cp_vdns_cpe_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vdns_private_ip_0 }
+      requirements:
+        - virtual_binding: VDU_vdns_0
+        - virtual_link: VL_cpe_public
+
+    VDU_vdns_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vdns_name_0 }
+        description: vdns
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: # TODO SDC Bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          oam_ipaddr: { get_input: vdns_private_ip_1 }
+          cpe_public_net_ipaddr: { get_input: vdns_private_ip_0 }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          cpe_public_net_cidr: { get_input: cpe_public_net_cidr }
+          demo_artifacts_version: { get_input: demo_artifacts_version }
+          install_script_version: { get_input: install_script_version }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata cpe_public_net_ipaddr)" > /opt/config/cpe_public_net_ipaddr.txt
+          echo "$(get_metadata onap_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata cpe_public_net_cidr)" > /opt/config/cpe_public_net_cidr.txt
+          echo "$(get_metadata demo_artifacts_version)" > /opt/config/demo_artifacts_version.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_dns_install.sh
+          cd /opt
+          chmod +x v_dns_install.sh
+          ./v_dns_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            #TODO add local disk size
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+            virtual_cpu:
+              num_virtual_cpu: 2
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
+
+    # vdhcp related
+    Cp_vdhcp_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vdhcp_0
+#        - virtual_link: VL_public
+
+    Cp_vdhcp_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vdhcp_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vdhcp_0
+#        - virtual_link: VL_onap_private
+
+    Cp_vdhcp_cpe_signal:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vdhcp_private_ip_0 }
+      requirements:
+        - virtual_binding: VDU_vdhcp_0
+        - virtual_link: VL_cpe_signal
+
+    VDU_vdhcp_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vdhcp_name_0 }
+        description: vdhcp
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: #SDC Bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          oam_ipaddr: { get_input: vdhcp_private_ip_1 }
+          cpe_signal_ipaddr: { get_input: vdhcp_private_ip_0 }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          cpe_signal_net_cidr: { get_input: cpe_signal_net_cidr }
+          mr_ip_addr: { get_input: mr_ip_addr }
+          mr_ip_port: { get_input: mr_ip_port }
+          demo_artifacts_version: { get_input: demo_artifacts_version }
+          install_script_version: { get_input: install_script_version }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata cpe_signal_ipaddr)" > /opt/config/cpe_signal_ipaddr.txt
+          echo "$(get_metadata onap_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata cpe_signal_net_cidr)" > /opt/config/cpe_signal_net_cidr.txt
+          echo "$(get_metadata mr_ip_addr)" > /opt/config/mr_ip_addr.txt
+          echo "$(get_metadata mr_ip_port)" > /opt/config/mr_ip_port.txt
+          echo "$(get_metadata demo_artifacts_version)" > /opt/config/demo_artifacts_version.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_dhcp_install.sh
+          cd /opt
+          chmod +x v_dhcp_install.sh
+          ./v_dhcp_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            #TODO add local disk size
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+            virtual_cpu:
+              num_virtual_cpu: 2
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
+
+    # vweb related
+    Cp_vweb_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vweb_0
+#        - virtual_link: VL_public
+
+    Cp_vweb_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vweb_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vweb_0
+#        - virtual_link: VL_onap_private
+
+    Cp_vweb_cpe_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vweb_private_ip_0 }
+      requirements:
+        - virtual_binding: VDU_vweb_0
+        - virtual_link: VL_cpe_public
+
+    VDU_vweb_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vweb_name_0 }
+        description: vweb
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: # TODO SDC bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          oam_ipaddr: { get_input: vweb_private_ip_1 }
+          cpe_public_ipaddr: { get_input: vweb_private_ip_0 }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          cpe_public_net_cidr: { get_input: cpe_public_net_cidr }
+          demo_artifacts_version: { get_input: demo_artifacts_version }
+          install_script_version: { get_input: install_script_version }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata cpe_public_ipaddr)" > /opt/config/cpe_public_ipaddr.txt
+          echo "$(get_metadata onap_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata cpe_public_net_cidr)" > /opt/config/cpe_public_net_cidr.txt
+          echo "$(get_metadata demo_artifacts_version)" > /opt/config/demo_artifacts_version.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_web_install.sh
+          cd /opt
+          chmod +x v_web_install.sh
+          ./v_web_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            #TODO add local disk size
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+            virtual_cpu:
+              num_virtual_cpu: 2
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
+
diff --git a/tosca/vCPE/vbng/MainServiceTemplate.mf b/tosca/vCPE/vbng/MainServiceTemplate.mf
new file mode 100644 (file)
index 0000000..d2e31ef
--- /dev/null
@@ -0,0 +1,8 @@
+metadata:
+    vnf_product_name: vcpe_vbng
+    vnf_provider_id: ONAP
+    vnf_package_version: 1.0
+    vnf_release_data_time: 2018.05.06T13:00+08:00
+
+source: MainServiceTemplate.yaml
+
diff --git a/tosca/vCPE/vbng/MainServiceTemplate.yaml b/tosca/vCPE/vbng/MainServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..b192bd6
--- /dev/null
@@ -0,0 +1,438 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+  template_name: vCPE_vbng
+  template_version: "1.0"
+  template_author: onap
+description: vCPE_vbng
+
+imports:
+  - onap_dm.yaml
+
+node_types:
+  onap.vcpe_vbng:
+    derived_from: tosca.nodes.nfv.VNF
+    properties:
+      descriptor_id:
+        type: string
+        constraints: [ valid_values: [ b1bb0ce7-5555-4fa7-95ed-4840d70a1177 ] ]
+        default: b1bb0ce7-5555-4fa7-95ed-4840d70a1177
+      provider:
+        type: string
+        constraints: [ valid_values: [ onap ] ]
+        default: onap
+      product_name:
+        type: string
+        constraints: [ valid_values: [ vcpe_vbng ] ]
+        default: vcpe_vbng
+      software_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      descriptor_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      flavour_id:
+        type: string
+        constraints: [ valid_values: [ simple ] ]  #only one and only allowed one DF in this example
+        default: simple
+      flavour_description:
+        type: string
+        default: simple
+      vnfm_info:
+        type: list
+        entry_schema:
+          type: string
+        default: ['gvnfm']
+
+topology_template:
+#  substitution_mappings:
+#    node_type: onap.vcpe_vbng
+#    requirements:
+#      virtual_link: [ Cp_vbng_public, virtual_link ] # expose as external CP
+#      virtual_link: [ Cp_vbng_onap_private, virtual_link ] # expose as external CP
+
+  inputs:
+    vcpe_image_name:
+      type: string
+      description: image name for vcpe in openstack glance
+      default: ubuntu_16.04
+    public_net_id:
+      type: string
+      description: public network id used during onap installation
+      default: external
+    onap_private_net_id:
+      type: string
+      description: onap OAM network id
+      default: oam_onap
+    onap_private_net_cidr:
+      type: string
+      description: oanp OAM network cidr
+      default: 10.0.0.0/16
+    brgemu_bng_private_net_id:
+      type: string
+      description: Private network that connects vBRG to vBNG
+      default: zdfw1bngin01_private
+    brgemu_bng_private_net_cidr:
+      type: string
+      description: The CIDR of the input side of vBNG private network
+      default: 10.3.0.0/24
+    bng_gmux_private_net_id:
+      type: string
+      description: Private network that connects vBNG to vGMUX
+      default: zdfw1bngmux01_private
+    bng_gmux_private_net_cidr:
+      type: string
+      description: The CIDR of the input side of vGMUX private network
+      default: 10.1.0.0/24
+    cpe_signal_net_id:
+      type: string
+      description: Private network that connects vCPE elements with vCPE infrastructure elements
+      default: zdfw1cpe01_private
+    cpe_signal_private_net_cidr:
+      type: string
+      description: The CIDR of the vAAA private network
+      default: 10.4.0.0/24
+    vbng_private_ip_0:
+      type: string
+      description: Private IP address that is assigned to the vBNG IN
+      default: 10.3.0.1
+    vbng_private_ip_1:
+      type: string
+      description: Private IP address that is assigned to the vBNG to communicate with ONAP components
+      default: 10.0.101.10
+    vbng_private_ip_2:
+      type: string
+      description: Private IP address that is assigned to the vBNG in the CPE_SIGNAL network
+      default: 10.4.0.3
+    vbng_private_ip_3:
+      type: string
+      description: Private IP address that is assigned to the vBNG to vGMUX port
+      default: 10.1.0.10
+    vbng_name_0:
+      type: string
+      description: Name of the vBNG
+      default: zdcpe1cpe01bng01
+    vnf_id:
+      type: string
+      description: The VNF ID is provided by ONAP
+      default: vCPE_Infrastructure_Metro_vBNG_demo_app
+    vf_module_id:
+      type: string
+      description: The vCPE Module ID is provided by ONAP
+      default: vCPE_Intrastructure_Metro_vBNG
+    dcae_collector_ip:
+      type: string
+      description: dcae collector ip
+      default: 10.0.4.102
+    dcae_collector_port:
+      type: integer
+      description: dcae collector port
+      default: 8080
+    pub_key:
+      type: string
+      description: ssh public key
+      default: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
+    nexus_artifact_repo:
+      type: string
+      description: Root URL for the Nexus repository for Maven artifacts
+      default: https://nexus.onap.org
+    demo_artifacts_version:
+      type: string
+      description: artifacts version used in demo vnfs
+      default: 1.2.0
+    install_script_version:
+      type: string
+      description: install script version number
+      default: 1.2.0-SNAPSHOT
+    cloud_env:
+      type: string
+      description: cloud environment(openstack or rackspace)
+      default: openstack
+    sdnc_ip_addr:
+      type: string
+      description: IP address of the SDNC
+      default: 10.0.7.1
+
+  node_templates:
+    #onap public net
+#    VL_public:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: public_net_id }
+#
+#    #onap oam net
+#    VL_onap_private:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: onap_private_net_id }
+#          cidr: { get_input: onap_private_net_cidr }
+
+    #Private network that connects vBRG to vBNG
+    VL_brgemu_bng_private_net:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: brgemu_bng_private_net_id}
+          cidr: { get_input: brgemu_bng_private_net_cidr }
+          dhcpEnabled: false
+
+    #cpe signal network
+    VL_cpe_signal:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: cpe_signal_net_id}
+          cidr: { get_input: cpe_signal_private_net_cidr }
+          dhcpEnabled: false
+
+    #Private network that connects vBNG to vGMUX
+    VL_bng_gmux_private_net:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: bng_gmux_private_net_id}
+          cidr: { get_input: bng_gmux_private_net_cidr }
+          dhcpEnabled: false
+
+    # vbng related
+    Cp_vbng_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vbng_0
+        #- virtual_link: VL_public
+
+    Cp_vbng_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vbng_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vbng_0
+        #- virtual_link: VL_onap_private
+
+    Cp_vbng_brgemu_bng_private_net:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vbng_private_ip_0 }
+        virtual_network_interface_requirements:
+          - name: dpdk support
+            support_mandatory: true
+            # TODO HPA
+            network_interface_requirements:
+              #dataProcessingAccelerationLibrary: dpdk_2.2
+              interfaceType: virtio
+      requirements:
+        - virtual_binding: VDU_vbng_0
+        - virtual_link: VL_brgemu_bng_private_net
+
+    Cp_vbng_cpe_signal:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vbng_private_ip_2 }
+      requirements:
+        - virtual_binding: VDU_vbng_0
+        - virtual_link: VL_cpe_signal
+
+    Cp_vbng_bng_gmux_private_net:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vbng_private_ip_3 }
+        virtual_network_interface_requirements:
+          - name: dpdk support
+            support_mandatory: true
+            # TODO HPA
+            network_interface_requirements:
+              #dataProcessingAccelerationLibrary: dpdk_2.2
+              interfaceType: virtio
+      requirements:
+        - virtual_binding: VDU_vbng_0
+        - virtual_link: VL_bng_gmux_private_net
+
+    VirtualStorage_root_all:
+      # this indicate the VDU root storage size
+      type: tosca.nodes.nfv.Vdu.VirtualStorage
+      properties:
+        type_of_storage: root
+        size_of_storage: 40 GB
+
+    VDU_vbng_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vbng_name_0 }
+        description: vbng
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: #TODO SDC bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+
+          brgemu_bng_net_ipaddr: { get_input: vbng_private_ip_0 }
+          cpe_signal_net_ipaddr: { get_input: vbng_private_ip_2 }
+          bng_gmux_net_ipaddr: { get_input: vbng_private_ip_3 }
+          oam_ipaddr: { get_input: vbng_private_ip_1 }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          bng_gmux_cidr: { get_input: bng_gmux_private_net_cidr }
+          cpe_signal_cidr: { get_input: cpe_signal_private_net_cidr }
+          brgemu_bng_cidr: { get_input: brgemu_bng_private_net_cidr }
+          dcae_collector_ip: { get_input: dcae_collector_ip }
+          dcae_collector_port: { get_input: dcae_collector_port }
+          demo_artifacts_version: { get_input: demo_artifacts_version }
+          install_script_version: { get_input: install_script_version }
+          sdnc_ip: { get_input: sdnc_ip }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata brgemu_bng_net_ipaddr)" > /opt/config/brgemu_bng_net_ipaddr.txt
+          echo "$(get_metadata cpe_signal_net_ipaddr)" > /opt/config/cpe_signal_net_ipaddr.txt
+          echo "$(get_metadata bng_gmux_net_ipaddr)" > /opt/config/bng_gmux_net_ipaddr.txt
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata oam_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata bng_gmux_cidr)" > /opt/config/bng_gmux_net_cidr.txt
+          echo "$(get_metadata cpe_signal_cidr)" > /opt/config/cpe_signal_net_cidr.txt
+          echo "$(get_metadata brgemu_bng_cidr)" > /opt/config/brgemu_bng_net_cidr.txt
+          echo "$(get_metadata dcae_collector_ip)" > /opt/config/dcae_collector_ip.txt
+          echo "$(get_metadata dcae_collector_port)" > /opt/config/dcae_collector_port.txt
+          echo "$(get_metadata demo_artifacts_version)" > /opt/config/demo_artifacts_version.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata sdnc_ip)" > /opt/config/sdnc_ip.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_bng_install.sh
+          cd /opt
+          chmod +x v_bng_install.sh
+          ./v_bng_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+              # HPA requirements
+              vdu_memory_requirements:
+                memoryPageSize: '{"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true, "configuration-value": "2 MB"}'
+                numberOfPages: '{"schema-version": "0","schema-location": "","platform-id": "generic","mandatory": true,"configuration-value": 1024}'
+            virtual_cpu:
+              num_virtual_cpu: 2
+              cpu_architecture: generic
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
diff --git a/tosca/vCPE/vbrgemu/MainServiceTemplate.mf b/tosca/vCPE/vbrgemu/MainServiceTemplate.mf
new file mode 100644 (file)
index 0000000..22f13e9
--- /dev/null
@@ -0,0 +1,8 @@
+metadata:
+    vnf_product_name: vcpe_vbrgemu
+    vnf_provider_id: ONAP
+    vnf_package_version: 1.0
+    vnf_release_data_time: 2018.05.06T13:00+08:00
+
+source: MainServiceTemplate.yaml
+
diff --git a/tosca/vCPE/vbrgemu/MainServiceTemplate.yaml b/tosca/vCPE/vbrgemu/MainServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..a895b57
--- /dev/null
@@ -0,0 +1,291 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+  template_name: vCPE_vbrgemu
+  template_version: "1.0"
+  template_author: onap
+description: vCPE_vbrgemu
+
+imports:
+  - onap_dm.yaml
+
+node_types:
+  onap.vcpe_vbrgemu:
+    derived_from: tosca.nodes.nfv.VNF
+    properties:
+      descriptor_id:
+        type: string
+        constraints: [ valid_values: [ b1bb0ce7-4444-4fa7-95ed-4840d70a1177 ] ]
+        default: b1bb0ce7-4444-4fa7-95ed-4840d70a1177
+      provider:
+        type: string
+        constraints: [ valid_values: [ onap ] ]
+        default: onap
+      product_name:
+        type: string
+        constraints: [ valid_values: [ vcpe_vbrgemu ] ]
+        default: vcpe_vbrgemu
+      software_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      descriptor_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      flavour_id:
+        type: string
+        constraints: [ valid_values: [ simple ] ]  #only one and only allowed one DF in this example
+        default: simple
+      flavour_description:
+        type: string
+        default: simple
+      vnfm_info:
+        type: list
+        entry_schema:
+          type: string
+        default: ['gvnfm']
+
+topology_template:
+#  substitution_mappings:
+#    node_type: onap.vcpe_vbrgemu
+#    requirements:
+#      virtual_link: [ Cp_vbrgemu_public, virtual_link ] # expose as external CP
+
+  inputs:
+    vcpe_image_name:
+      type: string
+      description: image name for vcpe in openstack glance
+      default: ubuntu_16.04
+    public_net_id:
+      type: string
+      description: public network id used during onap installation
+      default: external
+    onap_private_net_id:
+      type: string
+      description: onap OAM network id
+      default: oam_onap
+    onap_private_net_cidr:
+      type: string
+      description: oanp OAM network cidr
+      default: 10.0.0.0/16
+    vbrgemu_bng_private_net_id:
+      type: string
+      description: Private network that connects vBRGEMU to vBNG
+      default: zdfw1bngin01_private
+    vbrgemu_bng_private_net_cidr:
+      type: string
+      description: The CIDR of the input side of vBNG private network
+      default: 10.3.0.0/24
+    vbrgemu_private_ip_0:
+      type: string
+      description: Private IP address towards the BRGEMU-BNG network
+      default: 10.3.0.4
+    vbrgemu_name_0:
+      type: string
+      description: Name of the vBRGEMU
+      default: zdcpe1cpe01brgemu01
+    vnf_id:
+      type: string
+      description: The VNF ID is provided by ONAP
+      default: vCPE_Infrastructure_BGREMU_demo_app
+    vf_module_id:
+      type: string
+      description: The vCPE Module ID is provided by ONAP
+      default: vCPE_Customer_BRGEMU
+    pub_key:
+      type: string
+      description: ssh public key
+      default: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
+    install_script_version:
+      type: string
+      description: install script version number
+      default: 1.2.0-SNAPSHOT
+    nexus_artifact_repo:
+      type: string
+      description: Root URL for the Nexus repository for Maven artifacts
+      default: https://nexus.onap.org
+    demo_artifacts_version:
+      type: string
+      description: artifacts version used in demo vnfs
+      default: 1.2.0
+    cloud_env:
+      type: string
+      description: cloud environment(openstack or rackspace)
+      default: openstack
+    sdnc_ip:
+      type: string
+      description: SDNC ip address used to set NAT
+      default: 10.0.7.1
+    compile_state:
+      type: string
+      description: State to compile code or not (done, auto or build)
+      default: auto
+
+  node_templates:
+    #onap public net
+#    VL_public:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: public_net_id }
+#
+#    #onap oam net
+#    VL_onap_private:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: onap_private_net_id }
+#          cidr: { get_input: onap_private_net_cidr }
+
+    #Private network that connects vBRGEMU to vBNG
+    VL_vbrgemu_bng_private_net:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: vbrgemu_bng_private_net_id}
+          cidr: { get_input: vbrgemu_bng_private_net_cidr }
+          dhcpEnabled: false
+
+    # vbrgemu related
+    Cp_vbrgemu_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vbrgemu_0
+        #- virtual_link: VL_public
+
+    Cp_vbrgemu_vbrgemu_bng_private_net:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vbrgemu_private_ip_0 }
+        virtual_network_interface_requirements:
+          - name: dpdk support
+            support_mandatory: true
+            # TODO HPA
+            network_interface_requirements:
+              #dataProcessingAccelerationLibrary: dpdk_2.2
+              interfaceType: virtio
+      requirements:
+        - virtual_binding: VDU_vbrgemu_0
+        - virtual_link: VL_vbrgemu_bng_private_net
+
+    VirtualStorage_root_all:
+      # this indicate the VDU root storage size
+      type: tosca.nodes.nfv.Vdu.VirtualStorage
+      properties:
+        type_of_storage: root
+        size_of_storage: 40 GB
+
+    VDU_vbrgemu_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vbrgemu_name_0 }
+        description: vbrgemu
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: #TODO SDC bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          vbrgemu_bng_private_net_cidr: { get_input: vbrgemu_bng_private_net_cidr }
+          demo_artifacts_version: { get_input: demo_artifacts_version }
+          install_script_version: { get_input: install_script_version }
+          sdnc_ip: { get_input: sdnc_ip }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata vbrgemu_bng_private_net_cidr)" > /opt/config/brgemu_bng_private_net_cidr.txt
+          echo "$(get_metadata demo_artifacts_version)" > /opt/config/demo_artifacts_version.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata sdnc_ip)" > /opt/config/sdnc_ip.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_brgemu_install.sh
+          cd /opt
+          chmod +x v_brgemu_install.sh
+          ./v_brgemu_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+              # HPA requirements
+              vdu_memory_requirements:
+                memoryPageSize: '{"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true, "configuration-value": "2 MB"}'
+                numberOfPages: '{"schema-version": "0","schema-location": "","platform-id": "generic","mandatory": true,"configuration-value": 1024}'
+            virtual_cpu:
+              num_virtual_cpu: 2
+              cpu_architecture: generic
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
diff --git a/tosca/vCPE/vgmux/MainServiceTemplate.mf b/tosca/vCPE/vgmux/MainServiceTemplate.mf
new file mode 100644 (file)
index 0000000..4feca01
--- /dev/null
@@ -0,0 +1,8 @@
+metadata:
+    vnf_product_name: vcpe_vgmux
+    vnf_provider_id: ONAP
+    vnf_package_version: 1.0
+    vnf_release_data_time: 2018.05.06T13:00+08:00
+
+source: MainServiceTemplate.yaml
+
diff --git a/tosca/vCPE/vgmux/MainServiceTemplate.yaml b/tosca/vCPE/vgmux/MainServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..b651587
--- /dev/null
@@ -0,0 +1,383 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+  template_name: vCPE_vgmux
+  template_version: "1.0"
+  template_author: onap
+description: vCPE_vgmux
+
+imports:
+  - onap_dm.yaml
+
+node_types:
+  onap.vcpe_vgmux:
+    derived_from: tosca.nodes.nfv.VNF
+    properties:
+      descriptor_id:
+        type: string
+        constraints: [ valid_values: [ b1bb0ce7-3333-4fa7-95ed-4840d70a1177 ] ]
+        default: b1bb0ce7-3333-4fa7-95ed-4840d70a1177
+      provider:
+        type: string
+        constraints: [ valid_values: [ onap ] ]
+        default: onap
+      product_name:
+        type: string
+        constraints: [ valid_values: [ vcpe_vgmux ] ]
+        default: vcpe_vgmux
+      software_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      descriptor_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      flavour_id:
+        type: string
+        constraints: [ valid_values: [ simple ] ]  #only one and only allowed one DF in this example
+        default: simple
+      flavour_description:
+        type: string
+        default: simple
+      vnfm_info:
+        type: list
+        entry_schema:
+          type: string
+        default: ['gvnfm']
+
+topology_template:
+#  substitution_mappings:
+#    node_type: onap.vcpe_vgmux
+#    requirements:
+#      virtual_link: [ Cp_vgmux_public, virtual_link ] # expose as external CP
+#      virtual_link: [ Cp_vgmux_onap_private, virtual_link ] # expose as external CP
+
+  inputs:
+    vcpe_image_name:
+      type: string
+      description: image name for vcpe in openstack glance
+      default: ubuntu_16.04
+    public_net_id:
+      type: string
+      description: public network id used during onap installation
+      default: external
+    onap_private_net_id:
+      type: string
+      description: onap OAM network id
+      default: oam_onap
+    onap_private_net_cidr:
+      type: string
+      description: oanp OAM network cidr
+      default: 10.0.0.0/16
+    bng_gmux_private_net_id:
+      type: string
+      description: Private network that connects vBNG to vGMUX
+      default: zdfw1bngmux01_private
+    bng_gmux_private_net_cidr:
+      type: string
+      description: The CIDR of the vBNG-vGMUX private network
+      default: 10.1.0.0/24
+    mux_gw_private_net_id:
+      type: string
+      description: Private network that connects vGMUX to vGWs
+      default: zdfw1muxgw01_private
+    mux_gw_private_net_cidr:
+      type: string
+      description: The CIDR of the vGMUX private network
+      default: 10.5.0.0/24
+    brgemu_bng_private_net_cidr:
+      type: string
+      description: The CIDR of the vBRG-vBNG private network
+      default: 10.3.0.0/24
+    vgmux_private_ip_0:
+      type: string
+      description: Private IP address that is assigned to the vGMUX to communicate with the vBNG
+      default: 10.1.0.20
+    vgmux_private_ip_1:
+      type: string
+      description: Private IP address that is assigned to the vGMUX to communicate with ONAP components
+      default: 10.0.101.20
+    vgmux_private_ip_2:
+      type: string
+      description: Private IP address that is assigned to the vGMUX to communicate with vGWs
+      default: 10.5.0.20
+    vgmux_name_0:
+      type: string
+      description: Name of the vGMUX
+      default: zdcpe1cpe01mux01
+    vnf_id:
+      type: string
+      description: The VNF ID is provided by ONAP
+      default: vCPE_Infrastructure_vGMUX_demo_app
+    vf_module_id:
+      type: string
+      description: The vCPE Module ID is provided by ONAP
+      default: vCPE_Intrastructure_Metro_vGMUX
+    bng_gmux_private_ip:
+      type: string
+      description: Private IP address that is assigned to the vBNG to communicate with the vGMUX
+      default: 10.1.0.10
+    dcae_collector_ip:
+      type: string
+      description: dcae collector ip
+      default: 10.0.4.102
+    dcae_collector_port:
+      type: integer
+      description: dcae collector port
+      default: 8080
+    pub_key:
+      type: string
+      description: ssh public key
+      default: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
+    install_script_version:
+      type: string
+      description: install script version number
+      default: 1.2.0-SNAPSHOT
+    nexus_artifact_repo:
+      type: string
+      description: Root URL for the Nexus repository for Maven artifacts
+      default: https://nexus.onap.org
+    cloud_env:
+      type: string
+      description: cloud environment(openstack or rackspace)
+      default: openstack
+
+  node_templates:
+    #onap public net
+#    VL_public:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: public_net_id }
+#
+#    #onap oam net
+#    VL_onap_private:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: onap_private_net_id }
+#          cidr: { get_input: onap_private_net_cidr }
+
+    #Private network that connects vBNG to vGMUX
+    VL_bng_gmux_private_net:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: bng_gmux_private_net_id}
+          cidr: { get_input: bng_gmux_private_net_cidr }
+          dhcpEnabled: false
+
+    #Private network that connects vGMUX to vGWs
+    VL_mux_gw_private_net:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: mux_gw_private_net_id}
+          cidr: { get_input: mux_gw_private_net_cidr }
+          dhcpEnabled: false
+
+    # vgmux related
+    Cp_vgmux_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vgmux_0
+        #- virtual_link: VL_public
+
+    Cp_vgmux_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vgmux_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vgmux_0
+        #- virtual_link: VL_onap_private
+
+    Cp_vgmux_bng_gmux_private_net:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vgmux_private_ip_0 }
+        virtual_network_interface_requirements:
+          - name: dpdk support
+            support_mandatory: true
+            #TODO HPA
+            network_interface_requirements:
+              #dataProcessingAccelerationLibrary: dpdk_2.2
+              interfaceType: virtio
+      requirements:
+        - virtual_binding: VDU_vgmux_0
+        - virtual_link: VL_bng_gmux_private_net
+
+    Cp_vgmux_mux_gw_private_net:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vgmux_private_ip_2 }
+        virtual_network_interface_requirements:
+          - name: dpdk support
+            support_mandatory: true
+            #TODO HPA
+            network_interface_requirements:
+              #dataProcessingAccelerationLibrary: dpdk_2.2
+              interfaceType: virtio
+      requirements:
+        - virtual_binding: VDU_vgmux_0
+        - virtual_link: VL_mux_gw_private_net
+
+    VirtualStorage_root_all:
+      # this indicate the VDU root storage size
+      type: tosca.nodes.nfv.Vdu.VirtualStorage
+      properties:
+        type_of_storage: root
+        size_of_storage: 40 GB
+
+    VDU_vgmux_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vgmux_name_0 }
+        description: vgmux
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: #TODO SDC bug
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          mux_to_bng_net_ipaddr: { get_input: vgmux_private_ip_0 }
+          oam_ipaddr: { get_input: vgmux_private_ip_1 }
+          mux_gw_net_ipaddr: { get_input: vgmux_private_ip_2 }
+          bng_to_mux_net_ipaddr: { get_input: bng_gmux_private_ip }
+          bng_mux_net_cidr: { get_input: bng_gmux_private_net_cidr }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          mux_gw_net_cidr: { get_input: mux_gw_private_net_cidr }
+          brg_bng_net_cidr: { get_input: brgemu_bng_private_net_cidr }
+          install_script_version: { get_input: install_script_version }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata mux_to_bng_net_ipaddr)" > /opt/config/mux_to_bng_net_ipaddr.txt
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata mux_gw_net_ipaddr)" > /opt/config/mux_gw_net_ipaddr.txt
+          echo "$(get_metadata bng_to_mux_net_ipaddr)" > /opt/config/bng_to_mux_net_ipaddr.txt
+          echo "$(get_metadata bng_mux_net_cidr)" > /opt/config/bng_mux_net_cidr.txt
+          echo "$(get_metadata oam_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata mux_gw_net_cidr)" > /opt/config/mux_gw_net_cidr.txt
+          echo "$(get_metadata brg_bng_net_cidr)" > /opt/config/brg_bng_net_cidr.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_gmux_install.sh
+          cd /opt
+          chmod +x v_gmux_install.sh
+          ./v_gmux_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+              # HPA requirements
+              vdu_memory_requirements:
+                memoryPageSize: '{"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true, "configuration-value": "2 MB"}'
+                numberOfPages: '{"schema-version": "0","schema-location": "","platform-id": "generic","mandatory": true,"configuration-value": 1024}'
+            virtual_cpu:
+              num_virtual_cpu: 2
+              cpu_architecture: generic
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage
+
diff --git a/tosca/vCPE/vgw/MainServiceTemplate.mf b/tosca/vCPE/vgw/MainServiceTemplate.mf
new file mode 100644 (file)
index 0000000..fc41919
--- /dev/null
@@ -0,0 +1,8 @@
+metadata:
+    vnf_product_name: vcpe_vgw
+    vnf_provider_id: ONAP
+    vnf_package_version: 1.0
+    vnf_release_data_time: 2018.05.06T13:00+08:00
+
+source: MainServiceTemplate.yaml
+
diff --git a/tosca/vCPE/vgw/MainServiceTemplate.yaml b/tosca/vCPE/vgw/MainServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..420dc93
--- /dev/null
@@ -0,0 +1,378 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+  template_name: vCPE_vgw
+  template_version: "1.0"
+  template_author: onap
+description: vCPE_vgw
+
+imports:
+  - onap_dm.yaml
+
+node_types:
+  onap.vcpe_vgw:
+    derived_from: tosca.nodes.nfv.VNF
+    properties:
+      descriptor_id:
+        type: string
+        constraints: [ valid_values: [ b1bb0ce7-2222-4fa7-95ed-4840d70a1177 ] ]
+        default: b1bb0ce7-2222-4fa7-95ed-4840d70a1177
+      provider:
+        type: string
+        constraints: [ valid_values: [ onap ] ]
+        default: onap
+      product_name:
+        type: string
+        constraints: [ valid_values: [ vcpe_vgw ] ]
+        default: vcpe_vgw
+      software_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      descriptor_version:
+        type: string
+        constraints: [ valid_values: [ '1.0' ] ]
+        default: '1.0'
+      flavour_id:
+        type: string
+        constraints: [ valid_values: [ simple ] ]  #only one and only allowed one DF in this example
+        default: simple
+      flavour_description:
+        type: string
+        default: simple
+      vnfm_info:
+        type: list
+        entry_schema:
+          type: string
+        default: ['gvnfm']
+
+topology_template:
+  #substitution_mappings:
+  #  node_type: onap.vcpe_vgw
+  #  requirements:
+  #    virtual_link: [ Cp_vgw_public, virtual_link ] # expose as external CP
+  #    virtual_link: [ Cp_vgw_onap_private, virtual_link ] # expose as external CP
+
+  inputs:
+    vcpe_image_name:
+      type: string
+      description: image name for vcpe in openstack glance
+      default: ubuntu_16.04
+    public_net_id:
+      type: string
+      description: public network id used during onap installation
+      default: external
+    onap_private_net_id:
+      type: string
+      description: onap OAM network id
+      default: oam_onap
+    onap_private_net_cidr:
+      type: string
+      description: oanp OAM network cidr
+      default: 10.0.0.0/16
+    mux_gw_private_net_id:
+      type: string
+      description: Private network that connects vGMUX to vGWs
+      default: zdfw1muxgw01_private
+    mux_gw_private_net_cidr:
+      type: string
+      description: he CIDR of the vGMUX private network
+      default: 10.5.0.0/24
+    cpe_public_net_id:
+      type: string
+      description: cpe public net name
+      default: zdfw1cpe01_public
+    cpe_public_net_cidr:
+      type: string
+      description: cpe public net cidr
+      default: 10.2.0.0/24
+    vgw_private_ip_0:
+      type: string
+      description: Private IP address that is assigned to the vGW to communicate with vGMUX
+      default: 10.5.0.21
+    vgw_private_ip_1:
+      type: string
+      description: Private IP address that is assigned to the vGW to communicate with ONAP components
+      default: 10.0.101.30
+    vgw_private_ip_2:
+      type: string
+      description: Private IP address that is assigned to the vGW to communicate with vCPE public network
+      default: 10.2.0.3
+    vgw_name_0:
+      type: string
+      description: Name of the vGW
+      default: zdcpe1cpe01gw01
+    dcae_collector_ip:
+      type: string
+      description: dcae collector ip
+      default: 10.0.4.102
+    dcae_collector_port:
+      type: integer
+      description: dcae collector port
+      default: 8080
+    pub_key:
+      type: string
+      description: ssh public key
+      default: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/
+    nexus_artifact_repo:
+      type: string
+      description: Root URL for the Nexus repository for Maven artifacts
+      default: https://nexus.onap.org
+    demo_artifacts_version:
+      type: string
+      description: artifacts version used in demo vnfs
+      default: 1.2.0
+    install_script_version:
+      type: string
+      description: install script version number
+      default: 1.2.0-SNAPSHOT
+    cloud_env:
+      type: string
+      description: cloud environment(openstack or rackspace)
+      default: openstack
+    mux_ip_addr:
+      type: string
+      description: IP address of vGMUX
+      default: 10.5.0.20
+    vg_vgmux_tunnel_vni:
+      type: integer
+      description: vni value of vG-vGMUX vxlan tunnel
+      default: 100
+    vnf_id:
+      type: string
+      description: The VNF ID is provided by ONAP
+      default: vCPE_Infrastructure_GW_demo_app
+    vf_module_id:
+      type: string
+      description: The vCPE Module ID is provided by ONAP
+      default: vCPE_Customer_GW
+
+  node_templates:
+    #onap public net
+#    VL_public:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: public_net_id }
+#
+#    #onap oam net
+#    VL_onap_private:
+#      type: tosca.nodes.nfv.VnfVirtualLink
+#      properties:
+#        connectivity_type:
+#          layer_protocol: ipv4
+#        vl_profile:
+#          max_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          min_bit_rate_requirements:
+#            root: 10000000
+#            leaf: 10000000
+#          networkName: { get_input: onap_private_net_id }
+#          cidr: { get_input: onap_private_net_cidr }
+
+    #Private network that connects vGMUX to vGWs
+    VL_mux_gw_private_net:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: mux_gw_private_net_id}
+          cidr: { get_input: mux_gw_private_net_cidr }
+          dhcpEnabled: false
+
+    #cpe public network
+    VL_cpe_public:
+      type: tosca.nodes.nfv.VnfVirtualLink
+      properties:
+        connectivity_type:
+          layer_protocol: ipv4
+        vl_profile:
+          max_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          min_bit_rate_requirements:
+            root: 10000000
+            leaf: 10000000
+          networkName: { get_input: cpe_public_net_id}
+          cidr: { get_input: cpe_public_net_cidr }
+          dhcpEnabled: false
+
+    # vgw related
+    Cp_vgw_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+      requirements:
+        - virtual_binding: VDU_vgw_0
+        #- virtual_link: VL_public
+
+    Cp_vgw_onap_private:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vgw_private_ip_1 }
+      requirements:
+        - virtual_binding: VDU_vgw_0
+        #- virtual_link: VL_onap_private
+
+    Cp_vgw_mux_gw_private_net:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vgw_private_ip_0 }
+        virtual_network_interface_requirements:
+          - name: dpdk support
+            support_mandatory: true
+            #TODO HPA
+            network_interface_requirements:
+              #dataProcessingAccelerationLibrary: dpdk_2.2
+              interfaceType: virtio
+      requirements:
+        - virtual_binding: VDU_vgw_0
+        - virtual_link: VL_mux_gw_private_net
+
+    Cp_vgw_cpe_public:
+      type: tosca.nodes.nfv.VduCp
+      properties:
+        layer_protocol: [ipv4]
+        trunk_mode: false
+        protocol_data:
+          - asscociated_layer_protocol: ipv4
+            address_data:
+              address_type: ip_address
+              l3_address_data:
+                ip_address_assignment: false
+                floating_ip_activated: false
+                fixed_ip_address:
+                  - { get_input: vgw_private_ip_2 }
+      requirements:
+        - virtual_binding: VDU_vgw_0
+        - virtual_link: VL_cpe_public
+
+    VirtualStorage_root_all:
+      # this indicate the VDU root storage size
+      type: tosca.nodes.nfv.Vdu.VirtualStorage
+      properties:
+        type_of_storage: root
+        size_of_storage: 40 GB
+
+    VDU_vgw_0:
+      type: tosca.nodes.nfv.Vdu.Compute
+      properties:
+        name: { get_input: vgw_name_0 }
+        description: vgw
+        configurable_properties:
+          additional_vnfc_configurable_properties: {}
+        vdu_profile:
+          min_number_of_instances: 1
+          max_number_of_instances: 1
+          watchdog: none
+        inject_files: # TODO SDC BUG
+          source_path: ../Artifacts/keys/authorized_keys #SSH authorized_keys
+          dest_path: /home/ubuntu/.ssh/authorized_keys
+        meta_data:
+          vnf_id: { get_input: vnf_id }
+          vf_module_id: { get_input: vf_module_id }
+          mux_gw_private_net_ipaddr: { get_input: vgw_private_ip_0 }
+          oam_ipaddr: { get_input: vgw_private_ip_1 }
+          oam_cidr: { get_input: oam_private_net_cidr }
+          cpe_public_net_cidr: { get_input: cpe_public_net_cidr }
+          mux_gw_private_net_cidr: { get_input: mux_gw_private_net_cidr }
+          mux_ip_addr: { get_input: mux_ip_addr }
+          vg_vgmux_tunnel_vni: { get_input: vg_vgmux_tunnel_vni }
+          install_script_version: { get_input: install_script_version }
+          cloud_env: { get_input: cloud_env }
+          nexus_artifact_repo: { get_input: nexus_artifact_repo }
+        user_data: |
+          #!/bin/bash
+          METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+          apt-get -y install jq
+
+          get_metadata () {
+            echo $METADATA | jq -r ".meta.$1"
+          }
+
+          # Create configuration files
+          mkdir /opt/config
+          echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+          echo "$(get_metadata oam_cidr)" > /opt/config/oam_cidr.txt
+          echo "$(get_metadata cpe_public_net_cidr)" > /opt/config/cpe_public_net_cidr.txt
+          echo "$(get_metadata mux_gw_private_net_ipaddr)" > /opt/config/mux_gw_private_net_ipaddr.txt
+          echo "$(get_metadata mux_gw_private_net_cidr)" > /opt/config/mux_gw_private_net_cidr.txt
+          echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+          echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+          echo "$(get_metadata mux_ip_addr)" > /opt/config/mux_ip_addr.txt
+          echo "$(get_metadata vg_vgmux_tunnel_vni)" > /opt/config/vg_vgmux_tunnel_vni.txt
+          echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+          # Download and run install script
+          apt-get -y install unzip
+          INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+          NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+          if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+          curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+          unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_gw_install.sh
+          cd /opt
+          chmod +x v_gw_install.sh
+          ./v_gw_install.sh
+      capabilities:
+        virtual_compute:
+          properties:
+            #TODO add local disk size
+            virtual_memory:
+              virtual_mem_size: 4096 MB
+              # HPA requirements
+              vdu_memory_requirements:
+                memoryPageSize: '{"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true, "configuration-value": "2 MB"}'
+                numberOfPages: '{"schema-version": "0","schema-location": "","platform-id": "generic","mandatory": true,"configuration-value": 1024}'
+            virtual_cpu:
+              num_virtual_cpu: 2
+              cpu_architecture: generic
+      requirements:
+        - virtual_storage: VirtualStorage_root_all
+      artifacts:
+        sw_image: #TODO need to put glance image name here
+          #file: { get_input: vcpe_image_name }
+          file: ../Artifacts/images/ubuntu_16.04
+          type: tosca.artifacts.nfv.SwImage