From 2227cc7c562f2a3ca613a0296caff724cd3bc0b3 Mon Sep 17 00:00:00 2001 From: lishitao Date: Tue, 29 Aug 2017 09:31:20 +0800 Subject: add reference specification from open-o Issue-ID: MODELING-8 Change-Id: Icecc195bc6961f4fb74cadd5a35720c5e8e4e5f9 Signed-off-by: lishitao --- refspec/open-o/e2e-service/e2e-service-dm.yaml | 132 +++ refspec/open-o/e2e-service/e2e-service-im.docx | Bin 0 -> 32238 bytes refspec/open-o/e2e-service/e2e-service-im.pdf | Bin 0 -> 563693 bytes refspec/open-o/nfv-nsd/README.md | 28 + .../nfv-nsd/TOSCA_definition_nfv_ns_1_0.yaml | 176 +++ .../nfv-nsd/TOSCA_definition_ns_ext_1_0.yaml | 232 ++++ refspec/open-o/nfv-nsd/nfv-nsd-dm-sample.rst | 15 + refspec/open-o/nfv-nsd/nfv-nsd-im-sample.rst | 15 + .../open-o/sdn-nsd/VoLTE_underlayVPN_template.yaml | 181 +++ .../sdn-nsd/VoLTE_underlayVPN_type_definition.yaml | 756 ++++++++++++ refspec/open-o/sdn-nsd/enterprise2DC_template.yaml | 252 ++++ .../sdn-nsd/enterprise2DC_type_definition.yaml | 1226 ++++++++++++++++++++ refspec/open-o/sdn-nsd/sdn-nsd-dm-sample.rst | 15 + refspec/open-o/sdn-nsd/sdn-nsd-im-sample.rst | 15 + refspec/open-o/sdn-nsd/sdno_type_definition.yaml | 540 +++++++++ .../NS&VNF Package Specification-v0.4.pdf | Bin 0 -> 646545 bytes refspec/open-o/vnf-package/vnf-package-sample.rst | 15 + refspec/open-o/vnfd/README.md | 27 + refspec/open-o/vnfd/tosca-simple-nfv-1.1.yaml | 429 +++++++ refspec/open-o/vnfd/tosca_definition_1.0.yaml | 892 ++++++++++++++ refspec/open-o/vnfd/vNAT.yaml | 140 +++ refspec/open-o/vnfd/vnf-dm-sample.rst | 15 + refspec/open-o/vnfd/vnf-im-sample.rst | 15 + 23 files changed, 5116 insertions(+) create mode 100755 refspec/open-o/e2e-service/e2e-service-dm.yaml create mode 100755 refspec/open-o/e2e-service/e2e-service-im.docx create mode 100755 refspec/open-o/e2e-service/e2e-service-im.pdf create mode 100755 refspec/open-o/nfv-nsd/README.md create mode 100755 refspec/open-o/nfv-nsd/TOSCA_definition_nfv_ns_1_0.yaml create mode 100644 refspec/open-o/nfv-nsd/TOSCA_definition_ns_ext_1_0.yaml create mode 100755 refspec/open-o/nfv-nsd/nfv-nsd-dm-sample.rst create mode 100755 refspec/open-o/nfv-nsd/nfv-nsd-im-sample.rst create mode 100644 refspec/open-o/sdn-nsd/VoLTE_underlayVPN_template.yaml create mode 100644 refspec/open-o/sdn-nsd/VoLTE_underlayVPN_type_definition.yaml create mode 100644 refspec/open-o/sdn-nsd/enterprise2DC_template.yaml create mode 100644 refspec/open-o/sdn-nsd/enterprise2DC_type_definition.yaml create mode 100755 refspec/open-o/sdn-nsd/sdn-nsd-dm-sample.rst create mode 100755 refspec/open-o/sdn-nsd/sdn-nsd-im-sample.rst create mode 100644 refspec/open-o/sdn-nsd/sdno_type_definition.yaml create mode 100644 refspec/open-o/vnf-package/NS&VNF Package Specification-v0.4.pdf create mode 100755 refspec/open-o/vnf-package/vnf-package-sample.rst create mode 100755 refspec/open-o/vnfd/README.md create mode 100644 refspec/open-o/vnfd/tosca-simple-nfv-1.1.yaml create mode 100644 refspec/open-o/vnfd/tosca_definition_1.0.yaml create mode 100644 refspec/open-o/vnfd/vNAT.yaml create mode 100755 refspec/open-o/vnfd/vnf-dm-sample.rst create mode 100755 refspec/open-o/vnfd/vnf-im-sample.rst (limited to 'refspec/open-o') diff --git a/refspec/open-o/e2e-service/e2e-service-dm.yaml b/refspec/open-o/e2e-service/e2e-service-dm.yaml new file mode 100755 index 0000000..013991f --- /dev/null +++ b/refspec/open-o/e2e-service/e2e-service-dm.yaml @@ -0,0 +1,132 @@ +======================================================================== +Copyright 2017 OPEN-O Corporation. + +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. +========================================================================= +tosca_definitions_version: tosca_simple_yaml_1_0 + +# ***************************************************************************** +# Global Service type definitions +# ***************************************************************************** +description: Global Service information model type definitions + +metadata: + version: 0.1 + vendor: gso + template_author: Huawei + +# ***************************************************************************** +# macros definitions +# ***************************************************************************** +dsl_definitions: + +# ***************************************************************************** +# data types +# ***************************************************************************** +data_types: + gso.datatypes.service.basicInfo: + derived_from: tosca.datatypes.Root + properties: + createTime: + type: string + description: The creation time of the service + updateTime: + type: string + description: The update time of the service + creatorId: + type: string + description: The identification of the creator + location: + type: string + description: Location of the single domain + +# ***************************************************************************** +# interface_types +# ***************************************************************************** +interface_types: + gso.interfaces.lifecycle.Standard: + derived_from: tosca.interfaces.Root + create: + description: Standard lifecycle create operation. + update: + description: Standard lifecycle configure and update operation. + instantiate: + description: Standard lifecycle instantiate operation. + terminate: + description: Standard lifecycle terminate operation. + delete: + description: Standard lifecycle delete operation. + query: + description: Standard lifecycle query operation. + scalingIn: + description: Standard lifecycle scalingIn operation. + scalingOut: + description: Standard lifecycle query operation. +# ***************************************************************************** +# capability types +# ***************************************************************************** +capability_types: + gso.capability.SingleDomainNs: + derived_from: tosca.capabilities.Root + +# ***************************************************************************** +# relationship types +# ***************************************************************************** +relationship_types: + gso.relationship.DependOn: + derived_from: tosca.relationships.Root + description: + valid_target_types: [gso.capability.SingleDomainNs] + +# ***************************************************************************** +# node types +# ***************************************************************************** +node_types: + gso.node.Root: + derived_from: tosca.nodes.Root + description: gso root type + properties: + id: + type: string + name: + type: string + description: + type: string + required: false + gso.node.NetworkService: + derived_from: gso.node.Root + description: basic network service + properties: + baseServiceInfo: + type:gso.datatypes.service.basicInfo + templateId: + type: string + serviceDefId: + type: string + interfaces: + standard: + type: gso.interfaces.lifecycle.Standard + + gso.node.SingleDomainNetworkService: + derived_from: gso.node.NetworkService + description: single domain network service + + gso.node.CrossDomainNetworkService: + derived_from: gso.node.NetworkService + description: cross domain network service + requirements: + - realizes: + node: gso.node.SingleDomainNetworkService + capability: gso.capability.SingleDomainNs + relationship: gso.relationship.DependOn + occurrences: [2, UNBOUNDED] \ No newline at end of file diff --git a/refspec/open-o/e2e-service/e2e-service-im.docx b/refspec/open-o/e2e-service/e2e-service-im.docx new file mode 100755 index 0000000..fca61dd Binary files /dev/null and b/refspec/open-o/e2e-service/e2e-service-im.docx differ diff --git a/refspec/open-o/e2e-service/e2e-service-im.pdf b/refspec/open-o/e2e-service/e2e-service-im.pdf new file mode 100755 index 0000000..4e28204 Binary files /dev/null and b/refspec/open-o/e2e-service/e2e-service-im.pdf differ diff --git a/refspec/open-o/nfv-nsd/README.md b/refspec/open-o/nfv-nsd/README.md new file mode 100755 index 0000000..1eda1fe --- /dev/null +++ b/refspec/open-o/nfv-nsd/README.md @@ -0,0 +1,28 @@ +# +# Copyright 2017 ZTE Corporation. +# +# 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. +# + +1.nfv-nsd type definiton include three layer profile definitions. + + A.simple tosca profle : tosca_definition_1.0.yaml + refer:http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.0/os/TOSCA-Simple-Profile-YAML-v1.0-os.docx + + B.tosca nfv profile : TOSCA_definition_nfv_ns_1_0.yaml + refer:http://docs.oasis-open.org/tosca/tosca-nfv/v1.0/csd03/tosca-nfv-v1.0-csd03.doc + + C.openo extension profile: TOSCA_definition_ns_ext_1_0.yaml + refer:Open-O definition + +2.nfv-nsd service template should import the profiles above. \ No newline at end of file diff --git a/refspec/open-o/nfv-nsd/TOSCA_definition_nfv_ns_1_0.yaml b/refspec/open-o/nfv-nsd/TOSCA_definition_nfv_ns_1_0.yaml new file mode 100755 index 0000000..23f2f93 --- /dev/null +++ b/refspec/open-o/nfv-nsd/TOSCA_definition_nfv_ns_1_0.yaml @@ -0,0 +1,176 @@ +# +# Copyright 2017 ZTE Corporation. +# +# 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. +# + +tosca_definitions_version: tosca_simple_yaml_1_0 + +description: Definitions file for all type of tosca-nfv specification. + +node_types: + tosca.nodes.nfv.VNF: + derived_from: tosca.nodes.Root + properties: + id: + type: string + description: ID of this VNF + required: true + constraints: + - min_length: 1 + vendor: + type: string + description: name of the vendor who generate this VNF + required: true + version: + type: version + description: version of the software for this VNF + required: true + requirements: + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + node: tosca.nodes.nfv.VL + relationship: tosca.relationships.nfv.VirtualLinksTo + + tosca.nodes.nfv.CP: + derived_from: tosca.nodes.network.Port + properties: + type: + type: string + description: > + This may be, for example, a virtual port, a virtual NIC address, a physical port, + a physical NIC address or the endpoint of an IP VPN enabling network connectivity. + required: false + anti_spoof_protection: + type: boolean + description: > + Indicates of whether anti-spoofing rule need to be enabled for this vNIC. This is applicable only + when CP type is virtual NIC (vPort). + required: false + attributes: + address: + type: string + description: The actual virtual NIC address that is been assigned when instantiating the connection point. + requirements: + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + node: tosca.nodes.nfv.VL + relationship: tosca.relationships.nfv.VirtualLinksTo + - virtualbinding: + capability: tosca.capabilities.nfv.VirtualBindable + node: tosca.nodes.nfv.VDU + relationship: tosca.relationships.nfv.VirtualBindsTo + + tosca.nodes.nfv.VL: + derived_from: tosca.nodes.network.Network + properties: + vendor: + type: string + description: name of the vendor who generate this VL + required: false + capabilities: + virtual_linkable: + type: tosca.capabilities.nfv.VirtualLinkable + + tosca.nodes.nfv.VL.ELine: + derived_from: tosca.nodes.nfv.VL + #capabilities: + # virtual_linkable: + # type: tosca.capabilities.nfv.VirtualLinkable + # occurrences: [ 2, 2 ] + + tosca.nodes.nfv.VL.ELAN: + derived_from: tosca.nodes.nfv.VL + + tosca.nodes.nfv.VL.ETree: + derived_from: tosca.nodes.nfv.VL + + tosca.nodes.nfv.FP: + derived_from: tosca.nodes.Root + properties: + policy: + type: string + required: false + description: A policy or rule to apply to the NFP + requirements: + - forwarder: + capability: tosca.capabilities.nfv.Forwarder + node: tosca.nodes.nfv.CP + relationship: tosca.relationships.nfv.ForwardsTo + +capability_types: + + tosca.capabilities.nfv.VirtualLinkable: + derived_from: tosca.capabilities.Root + + tosca.capabilities.nfv.VirtualBindable: + derived_from: tosca.capabilities.Root + + tosca.capabilities.nfv.Metric: + derived_from: tosca.capabilities.Endpoint + + tosca.capabilities.nfv.Forwarder: + derived_from: tosca.capabilities.Root + +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.Monitor: + derived_from: tosca.relationships.ConnectsTo + valid_target_types: [ tosca.capabilities.nfv.Metric ] + + tosca.relationships.nfv.ForwardsTo: + derived_from: tosca.relationships.Root + valid_target_types: [ tosca.capabilities.nfv.Forwarder ] + +group_types: + tosca.groups.nfv.VNFFG: + derived_from: tosca.groups.Root + properties: + vendor: + type: string + required: true + description: name of the vendor who generate this VNFFG + version: + type: string + required: true + description: version of this VNFFG + number_of_endpoints: + type: integer + required: true + description: count of the external endpoints included in this VNFFG + dependent_virtual_link: + type: list + entry_schema: + type: string + required: true + description: Reference to a VLD used in this Forwarding Graph + connection_point: + type: list + entry_schema: + type: string + required: true + description: Reference to Connection Points forming the VNFFG + constituent_vnfs: + type: list + entry_schema: + type: string + required: true + description: Reference to a list of VNFD used in this VNF Forwarding Graph + members: [ tosca.nodes.nfv.FP ] diff --git a/refspec/open-o/nfv-nsd/TOSCA_definition_ns_ext_1_0.yaml b/refspec/open-o/nfv-nsd/TOSCA_definition_ns_ext_1_0.yaml new file mode 100644 index 0000000..4028b87 --- /dev/null +++ b/refspec/open-o/nfv-nsd/TOSCA_definition_ns_ext_1_0.yaml @@ -0,0 +1,232 @@ +# +# Copyright 2017 ZTE Corporation. +# +# 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. +# + +tosca_definitions_version: tosca_simple_yaml_1_0 + +description: Extend types definitions file for tosca-nfv. + +data_types: + tosca.datatypes.nfv.ext.FPPolicyCriteria: + derived_from: tosca.datatypes.Root + properties: + dest_port_range: + type: range + required: false + constraints: + - in_range: [ 1, 65535 ] + source_port_range: + type: range + required: false + constraints: + - in_range: [ 1, 65535 ] + ip_protocol: + type: string + required: false + default: tcp + constraints: + - valid_values: [ udp, tcp ] + dest_ip_range: + type: list + required: false + description: The format is startip1-endip1,startip2-endip2 + entry_schema: + type: string + source_ip_range: + type: list + required: false + description: The format is startip1-endip1,startip2-endip2 + entry_schema: + type: string + dscp: + type: integer + required: false + + tosca.datatypes.nfv.ext.FPPolicy: + derived_from: tosca.datatypes.Root + properties: + type: + type: string + required: false + default: ACL + constraints: + - valid_values: [ ACL ] + criteria: + type: tosca.datatypes.nfv.ext.FPPolicyCriteria + required: true + + +node_types: + tosca.nodes.nfv.ext.VNF: + derived_from: tosca.nodes.nfv.VNF + properties: + vnf_type: + type: string + required: false + description: Type of this VNF. For example MME,USPP,xGW etc. + request_reclassification: + type: boolean + required: false + default: false + description: Determines whether VNF can request reclassification by the VNF forwarder + nsh_aware: + type: boolean + required: false + default: true + description: Whether this VNF can process NSH headers + vnfm_type: + type: string + required: true + description: Type of this VNFM, Such as ZTE,HW,JUJU,... + requirements: + - virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + occurrences: [0, UNBOUNDED] + + tosca.nodes.nfv.ext.CP: + derived_from: tosca.nodes.nfv.CP + properties: + sfc_encapsulation: + type: string + required: false + description: The encapsulateion used to carry NSH packages + constraints: + - valid_values: [ mac, vxlan-gpe, gre, mpls ] + direction: + type: string + required: false + constraints: + - valid_values: [ input, output, bidirectional ] + interface_name: + type: string + required: false + description: Physical interface name of CP for PNF. + requirements: + - link: + capability: tosca.capabilities.network.Linkable + relationship: tosca.relationships.network.LinksTo + occurrences: [ 0, 1 ] + - binding: + capability: tosca.capabilities.network.Bindable + relationship: tosca.relationships.network.BindsTo + occurrences: [ 0, 1 ] + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + occurrences: [ 0, 1 ] + - virtualbinding: + capability: tosca.capabilities.nfv.VirtualBindable + relationship: tosca.relationships.nfv.VirtualBindsTo + occurrences: [ 0, 1 ] + capabilities: + forwarder: + type: tosca.capabilities.nfv.Forwarder + + tosca.nodes.nfv.ext.NS: + derived_from: tosca.nodes.Root + properties: + id: + type: string + description: ID of this NSD + required: true + constraints: + - min_length: 1 + designer: + type: string + description: Designer of this NSD + required: true + version: + type: version + description: version of this NSD + required: true + name: + type: string + description: name of this NSD + required: true + type: + type: string + description: Type of this NSD,include:SSAR,NSAR,GSAR + required: true + requirements: + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + node: tosca.nodes.nfv.VL + relationship: tosca.relationships.nfv.VirtualLinksTo + + tosca.nodes.nfv.ext.PNF: + derived_from: tosca.nodes.Root + properties: + id: + type: string + description: ID of this PNF + required: true + constraints: + - min_length: 1 + vendor: + type: string + description: name of the vendor who provide this PNF + required: true + version: + type: version + description: version of the software for this PNF + required: true + pnf_type: + type: string + description: type of PNF + required: false + request_reclassification: + type: boolean + required: false + default: false + description: Determines whether VNF can request reclassification by the VNF forwarder + nsh_aware: + type: boolean + required: false + default: true + description: Whether this VNF can process NSH headers + management_address: + type: string + description: Management port address of this PNF. + required: true + capabilities: + virtualBinding: + type: tosca.capabilities.nfv.VirtualBindable + + tosca.nodes.nfv.ext.FP: + derived_from: tosca.nodes.Root + properties: + policy: + type: tosca.datatypes.nfv.ext.FPPolicy + required: false + symmetric: + type: boolean + required: false + description: If the chain is symmetric, SDN Controller will create two service paths, one ingress and another egress. + requirements: + - forwarder: + capability: tosca.capabilities.nfv.Forwarder + occurrences: [0, UNBOUNDED] + +group_types: + tosca.groups.nfv.ext.VNFFG: + derived_from: tosca.groups.nfv.VNFFG + properties: + constituent_pnfs: + type: list + entry_schema: + type: string + required: false + description: Reference to a list of PNF'ID used in this VNF Forwarding Graph diff --git a/refspec/open-o/nfv-nsd/nfv-nsd-dm-sample.rst b/refspec/open-o/nfv-nsd/nfv-nsd-dm-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/nfv-nsd/nfv-nsd-dm-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file diff --git a/refspec/open-o/nfv-nsd/nfv-nsd-im-sample.rst b/refspec/open-o/nfv-nsd/nfv-nsd-im-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/nfv-nsd/nfv-nsd-im-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/VoLTE_underlayVPN_template.yaml b/refspec/open-o/sdn-nsd/VoLTE_underlayVPN_template.yaml new file mode 100644 index 0000000..a7d5e42 --- /dev/null +++ b/refspec/open-o/sdn-nsd/VoLTE_underlayVPN_template.yaml @@ -0,0 +1,181 @@ +# Copyright 2017 Huawei Technologies Co., Ltd. +# +# 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. + +############################################################################### +##### L3 VPN Underlay Connection #### +############################################################################### +tosca_definitions_version: tosca_simple_yaml_1_0 +description: creates underlay vpn connection, l3 vpn template +imports: + - Definitions/underlayVPN_type_definition.yaml + +############################################################################### + +metadata: + id: vpnUnderlayL3 + template_name: underlayvpn + version: 0.1 + vendor: sdno + template_author: Huawei + + +####################################### TOPOLOGY ############################## +topology_template: + inputs: + name: + type: string + description: Name of underlayervpn + description: + type: string + description: description of underlayvpn + serviceType: + type: string + description: serviceType of underlayvpn + default: 'l3vpn' + topology: + type: string + description: topology of underlayvpn + default: 'full-mesh' + technology: + type: string + description: technology of underlayvpn + default: 'mpls' + pe1_ip: + type: string + description: mgrip of pe1 + ac1_port: + type: string + description: ac1 port + ac1_svlan: + type: integer + description: ac1 svlan + ac1_ip: + type: string + description: ip of ac1, only for layer3 vpn + ac1_peer_ip: + type: string + description: ip of ac1 peer CE tp, only for layer3 vpn + ac1_route: + type: string + description: route configure of ac1, only for layer3 vpn + pe2_ip: + type: string + description: mgrip of pe2 + ac2_port: + type: string + description: ac2 port + ac2_svlan: + type: integer + description: ac2 svlan + ac2_ip: + type: string + description: ip of ac2, only for layer3 vpn + ac2_peer_ip: + type: string + description: ip of ac2 peer CE tp, only for layer3 vpn + ac2_route: + type: string + description: route configure of ac2, only for layer3 vpn + + +# ***************************************************************************** +# node templates +# ***************************************************************************** + + node_templates: + + # Network Nodes, to be retrieved from the resource inventory + pe1: + type: sdno.node.Node + properties: + ipAddress: {get_input: pe1_ip} + + pe2: + type: sdno.node.Node + properties: + ipAddress: {get_input: pe2_ip} + + + # Connectivity Service and Service Endpoints + + vpnService: + type: sdno.node.ConnectivityService.UnderlayVpn + properties: + name: {get_input: name} + requirements: + - endPoint: ac1 + - endPoint: ac2 + - realizes: vpnConnection + + ac1: + type: sdno.node.ServiceEndPoint.AC + properties: + port: {get_input: ac1_port} + ip: {get_input: ac1_ip} + svlan: {get_input: ac1_svlan} + route: {get_input: ac1_route} + peerIp: {get_input: ac1_peer_ip} + requirements: + - node: pe1 + + ac2: + type: sdno.node.ServiceEndPoint.AC + properties: + port: {get_input: ac2_port} + ip: {get_input: ac2_ip} + svlan: {get_input: ac2_svlan} + route: {get_input: ac2_route} + peerIp: {get_input: ac2_peer_ip} + requirements: + - node: pe2 + + + # Connection and Connection Endpoints + + vpnConnection: + type: sdno.node.Connection.UnderlayVpn + properties: + name: {get_input: name} + description: {get_input: description} + vpnBasicInfo: + serviceType: {get_input: serviceType} + topology: {get_input: topology} + technology: {get_input: technology} + requirements: + - endPoint: tp1 + - endPoint: tp2 + + interfaces: + standard: + create: + #implementation: 'POST /openoapi/sdnol3vpn/v1/l3vpns' + delete: + implementation: 'DELETE /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + get: + implementation: 'GET /openoapi/sdnol3vpn/v1/l3vpns' + deploy: + implementation: 'POST /openoapi/sdnol3vpn/v1/l3vpns' + undeploy: + implementation: 'DELETE /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + update: + implementation: 'PUT /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + + + tp1: + type: sdno.node.ConnectionEndPoint.Tp + + tp2: + type: sdno.node.ConnectionEndPoint.Tp + substitution_mappings: + node_type: tosca.nodes.sdno.NS.underlayvpn \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/VoLTE_underlayVPN_type_definition.yaml b/refspec/open-o/sdn-nsd/VoLTE_underlayVPN_type_definition.yaml new file mode 100644 index 0000000..e0ce37d --- /dev/null +++ b/refspec/open-o/sdn-nsd/VoLTE_underlayVPN_type_definition.yaml @@ -0,0 +1,756 @@ +# Copyright 2017 Huawei Technologies Co., Ltd. +# +# 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. + +tosca_definitions_version: tosca_simple_yaml_1_0 +description: undelay vpn type definitions + +# ***************************************************************************** +# underlay vpn type definitions, used for both L3vpn and l2vpn +# ***************************************************************************** + +metadata: + version: 0.1 + vendor: sdno + template_author: Huawei + +imports: + - sdno_type_definition.yaml + +# ***************************************************************************** +# DSL definitions +# ***************************************************************************** +dsl_definitions: + +# ***************************************************************************** +# data types +# ***************************************************************************** +data_types: + + + # Base SDNO Type for Specs - used in Underlay VPN only for now, check reuse and move to common if needed. May need to move iot from type to node + sdno.datatypes.Spec: + derived_from: tosca.datatypes.Root + properties: + uuid: + type: string + description: unique id, format maxLength36 + required: true + default: 'none' + additionalInfo: + type: list + #max size = 1000 + entry_schema: + type: AdditionalInfoRow + required: false + + # PW Schema Type + + PWSchema: + derived_from: sdno.datatypes.Spec + properties: + pwTech: + type: string + description: PW Technology + required: true + default: 'none' + + # Tunnel Schema Type + + TunnelSchema: + derived_from: sdno.datatypes.Spec + properties: + tunnelTech: + type: string + description: Technology used for the tunnel + constraints: + - valid_values: ['NOP','LDP','RSVP-TE','SR-TE','MPLS-TP','TE-ANY','TE','GRE'] + required: true + default: 'RSVP-TE' + pwTech: + type: PWSpec + description: Technology used for the pseudowire + required: true + tunnelLatency: + type: integer + description: this is integer, format int32, minimum 0 and maximum 60000000 + required: true + default: 0 + tunnelSelectMode: + type: string + description: Tunnel selection mode + constraints: + - valid_values: ['AutoCreate','AutoSelect','ManualSelect','NOP'] + required: true + default: 'AutoSelect' + tunnelCreatePolicy: + type: MplsTESpec + description: Policy for creating the tunnel + required: false + tunnelAutoSelectPolicy: + type: SelectTunnelPolicy + description: Policy for selecting the tunnel + required: false + + PWSpec: + derived_from: sdno.datatypes.Spec + properties: + controlWord: + type: boolean + description: enable control + required: true + default: false + pwVlanAction: + type: string + description: VLAN action on the pseudowire + constraints: + - valid_values: ['Raw','tagged'] + required: true + default: 'Raw' + + + MplsTESpec: + derived_from: sdno.datatypes.Spec + properties: + bestEffort: + type: string + description: max length 200 + required: true + default: 'true' + shareMode: + type: string + description: Tunnel sharing mode + constraints: + - valid_values: ['delegate','1:1','N:1'] + required: true + default: 'N:1' + coRoute: + type: boolean + description: max length 200 + required: true + default: false + bfdEnable: + type: boolean + description: max length 200 + required: true + default: true + pathConstraint: + type: TunnelPathConstraint + description: + required: false + tunnelProtectPolicy: + type: ProtectionSchema + description: + required: false + + TunnelPathConstraint: + derived_from: sdno.datatypes.Spec + properties: + setupPriority: + type: integer + description: format int32, min 0 max 7 + required: true + default: 5 + holdupPriority: + type: integer + description: format int32, min 0 max 7 + required: true + default: 5 + + ProtectionSchema: + derived_from: sdno.datatypes.Spec + properties: + layerRate: + type: string + description: Layer Rate + constraints: + - valid_values: ['LR_Ethernet','LR_IP','LR_Vxlan','LR_PW','LR_NOP','LR_MPLS_TE'] + required: true + default: 'LR_IP' + protectType: + type: string + description: type of protection + constraints: + - valid_values: ['nop','1:1','1+1','hot-standby'] + required: true + default: '1:1' + protectDetailType: + type: string + description: more detailed protection info + required: false + reversionMode: + type: string + description: Reversion Mode + constraints: + - valid_values: ['RM_UNKNOWN','RM_NON_REVERTIVE','RM_REVERTIVE'] + required: true + default: 'RM_REVERTIVE' + wtr: + type: integer + description: format int32 minimum 0, maximum 2592000 + required: true + default: 1 + + SelectTunnelPolicy: + derived_from: sdno.datatypes.Spec + properties: + loadBalanceNum: + type: integer + description: format int32, minimum 1 maximum 64 + required: true + default: 1 + selectTunnels: + type: list + entry_schema: + type: SelectTunnel + description: Tunnel Selection Policy + required: true + + SelectTunnel: + derived_from: sdno.datatypes.Spec + properties: + priority: + type: integer + description: Tunnel priority to be selected, format int32, minimum 1 maximum 3 + required: true + default: 1 + tunnelTech: + type: string + description: tunnel technology to be selected + constraints: + - valid_values: ['NOP','LDP','RSVP-TE','SR-TE','MPLS-TP','TE-ANY','TE','GRE'] + required: true + default: RSVP-TE + + # Path Constraints Type + PathConstraints: + derived_from: sdno.datatypes.Spec + properties: + tunnelConstraints: + type: list + entry_schema: + type: TunnelSpecificPathConstraint + pwConstraints: + type: list + entry_schema: + type: PWSpecPathConstraint + + TunnelSpecificPathConstraint: + derived_from: sdno.datatypes.Spec + properties: + pathConnection: + type: PathConnection + tunnelWorkMode: + type: string + constraints: + - valid_values: ['AutoCreate','AutoSelect','ManualSelect','NOP'] + required: true + tunnelTech: + type: string + constraints: + - valid_values: ['NOP','LDP','RSVP-TE','SR-TE','MPLS-TP','TE-ANY','TE','GRE'] + required: true + bodMode: + type: string + constraints: + - valid_values: ['realBod','renewBod'] + required: true + bandwidth: + type: integer + description: bandwidth int64, minimum 0 and max 4000000000 + required: true + latency: + type: integer + description: bandwidth int64, minimum 0 and max 60000000 + required: true + bindingTunnels: + type: list + entry_schema: + type: string + + PathConnection: + derived_from: sdno.datatypes.Spec + properties: + aObject: + type: ObjectIdentifier + required: true + zObject: + type: ObjectIdentifier + required: true + direction: + type: string + constraints: + - valid_values: ['CD_UNI','CD_BI'] + required: true + +# Object Identifier is currently only used in L3 VPN, should be moved to the common and re-used + ObjectIdentifier: + derived_from: tosca.datatypes.Root + properties: + uuid: + type: string + required: true + # format: maxLen36 + objectId: + type: string + required: true + # format: maxLen36 + roleLabel: + type: string + required: true + objectType: + type: string + constraints: + - valid_values: ['Nop','SEG-VPN','TP','TPL','BUSINESSTYPE','COMPOSED-VPN', 'RESOURCE-POOL', 'SUBNETWORK', 'TUNNEL-LSP'] + required: true + + PWSpecPathConstraint: + derived_from: sdno.datatypes.Spec + properties: + role: + type: string + constraints: + - valid_values: ['master','backup'] + required: true + tunnelWorkMode: + type: string + constraints: + - valid_values: ['AutoCreate','AutoSelect','ManualSelect','NOP'] + required: true + tunnelTech: + type: string + constraints: + - valid_values: ['NOP','LDP','RSVP-TE','SR-TE','MPLS-TP','TE-ANY','TE','GRE'] + required: true + + + # VPN TYPES + + DiffService: + derived_from: sdno.datatypes.Spec + properties: + diffServMode: + type: string + description: mode of diffservice + constraints: + - valid_values: ['Uniform','Pipe','ShortPipe'] + required: true + default: 'Uniform' + serviceClass: + type: string + description: class of service + constraints: + - valid_values: ['BE','AF1','AF2','AF3','AF4','EF','CS6','CS7'] + required: true + default: 'BE' + serviceColor: + type: string + description: Service Color + constraints: + - valid_values: ['Green','Yellow','Red'] + required: true + default: 'Green' + + IpVpnSpec: + derived_from: sdno.datatypes.Spec + properties: + labelMode: + type: string + description: label mode type + constraints: + - valid_values: ['PerInstance','PerRoute'] + required: true + default: 'PerInstance' + frrEnable: + type: boolean + description: frr enable + required: true + default: false + diffServ: + type: DiffService + description: diff service type + required: true + + VpnBasicInfo: + derived_from: sdno.datatypes.Spec + properties: + topology: + type: string + description: type of VPN topology + constraints: + - valid_values: ['full-mesh','point_to_multipoint','point_to_point','singlePoint','hubspoke','hubspoke_via_hubce','hubspoke_disjoint','ADD_DROP_Z'] + required: true + default: 'full-mesh' + serviceType: + type: string + description: type of VPN service + constraints: + - valid_values: ['l3vpn','l2vpn','other'] + required: true + default: 'l3vpn' + + technology: + type: string + description: type of VPN technology + constraints: + - valid_values: ['mpls','rosen multivpn','vxlan overlay l3vpn','eth over sdh','vlan'] + required: true + default: 'mpls' + ipMtu: + type: integer + description: IP MTU, format is int32, minimum 46 and maximum 9600 + required: true + default: 9600 + ipVpnSpec: + type: IpVpnSpec + description: IP VPN Spec + required: false + + # VPN TYPES + + TpTypeSpec: + derived_from: sdno.datatypes.Spec + properties: + layerRate: + type: string + description: Layer Rate + constraints: + - valid_values: ['LR_Ethernet','LR_IP','LR_Vxlan','LR_PW','LR_NOP','LR_MPLS_TE'] + required: true + default: 'LR_IP' + ethernetTpSpec: + required: false + type: EthernetTpSpec + ipTpSpec: + required: false + type: IpTpSpec + + + EthernetTpSpec: + derived_from: sdno.datatypes.Spec + properties: + accessType: + type: string + constraints: + - valid_values: ['dot1q','qinq','untag','default'] + required: true + default: 'default' + vlanAction: + type: string + constraints: + - valid_values: ['nop','untag','pass','pvlan','swap','stacking'] + required: true + default: 'pass' + actionValue: + type: string + required: true + default: 'none' + qinqCvlanList: + type: string + required: true + default: 'none' + qinqSvalList: + type: string + required: true + default: 'none' + dot1qVlanList: + type: string + required: true + default: 'none' + + IpTpSpec: + derived_from: sdno.datatypes.Spec + properties: + masterIp: + type: string + required: true + default: '0.0.0.0' + + CeTp: + derived_from: sdno.datatypes.Spec + properties: + todo: + type: string + required: true + default: 'none' + + + RouteProtocolSpec: + derived_from: sdno.datatypes.Spec + properties: + todo: + type: string + required: true + default: 'none' + + +# ***************************************************************************** +# node types +# ***************************************************************************** + +node_types: + + # ***************************************************************************** + # Underlay VPN Service Endpoints + # ***************************************************************************** + sdno.node.ServiceEndPoint.AC: + description: Attach Circuit + derived_from: sdno.node.ServiceEndPoint + properties: + port: + type: string + required: true + default: '0' + ip: + type: string + required: true + default: '0.0.0.0' + svlan: + type: integer + required: true + default: 0 + route: + type: string + required: true + default: 'none' + peerIp: + type: string + required: true + default: '0.0.0.0' + + # ***************************************************************************** + # Underlay VPN Connectivity Service + # ***************************************************************************** + + sdno.node.ConnectivityService.UnderlayVpn: + derived_from: sdno.node.ConnectivityService + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + deploy: + description: "Deploy VPN" + implementation: + # primary: + dependencies: + - sdno.node.Connection.UnderlayVpn/deploy + + requirements: + - endPoint: + node: sdno.node.ServiceEndPoint.AC + capability: sdno.capability.ServiceEndPoint + relationship: sdno.relationship.ServiceEndPoint + occurrences: [2, UNBOUNDED] + - realizes: + node: sdno.node.Connection.UnderlayVpn + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + + # ***************************************************************************** + # Underlay VPN Connection Endpoints + # ***************************************************************************** + sdno.node.ConnectionEndPoint.Tp: + description: Attach Circuit + derived_from: sdno.node.ConnectionEndPoint + properties: + neId: + type: string + required: false + edgePointRole: + type: string + description: Role of the edge point + constraints: + - valid_values: [ASBR,nop] + required: false + hubSpoke: + type: string + description: Is the endpoint hub or spoke + constraints: + - valid_values: ['hub','spoke','spokeBridge','other'] + required: true + default: 'spoke' + type: + type: string + description: Type of the TP + constraints: + - valid_values: ['PTP','CTP','TRUNK','LoopBack','NetworkVNode','TPPool','nop'] + required: true + default: 'CTP' + workingLayer: + type: string + description: Working Layer Rate + constraints: + - valid_values: ['LR_Ethernet','LR_IP','LR_Vxlan','LR_PW','LR_NOP','LR_MPLS_TE'] + required: true + default: 'LR_IP' + typeSpecList: + type: list + #max size = 1000 + entry_schema: + type: TpTypeSpec + required: false + peerCpTp: + type: CeTp + required: false + qosProfileId: + type: string + required: false + inboundQosPolicyId: + type: string + required: false + outboundQosPolicyId: + type: string + required: false + inboundQueueProfileId: + type: string + required: false + outboundQueueProfileId: + type: string + required: false + containedMainTP: + type: string + required: false + routeProtocolSpecs: + type: list + #max size = 1000 + entry_schema: + type: RouteProtocolSpec + required: false + direction: + type: string + constraints: + - valid_values: ['IN','OUT','BI_DIRECTION'] + required: true + default: 'BI_DIRECTION' + tpRole: + type: string + constraints: + - valid_values: ['UNI','NNI'] + required: true + default: 'UNI' + + + + # ***************************************************************************** + # VPN Node Types + # ***************************************************************************** + sdno.node.Connection.UnderlayVpn: + derived_from: sdno.node.Connection + properties: + pwSchema: + type: PWSchema + required: false + tunnelSchema: + type: TunnelSchema + required: false + pathConstraints: + type: PathConstraints + required: false + vpnBasicInfo: + type: VpnBasicInfo + required: false + + requirements: + - endPoint: + node: sdno.node.ConnectionEndPoint.Tp + capability: sdno.capability.ConnectionEndPoint + relationship: sdno.relationship.ConnectionEndPoint + occurrences: [2, UNBOUNDED] + + + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnol3vpn/v1/l3vpns' + delete: + implementation: 'DELETE /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + get: + implementation: 'GET /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + deploy: + implementation: 'POST /openoapi/sdnol3vpn/v1/l3vpns' + undeploy: + implementation: 'DELETE /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + update: + #implementation: 'PUT /openoapi/sdnol3vpn/v1/l3vpns/{uuid}' + + # ***************************************************************************** + # Underlayvpn Node Types + # ***************************************************************************** + tosca.nodes.sdno.NS.underlayvpn: + properties: + id: + type: string + required: false + template_name: + type: string + required: false + version: + type: string + required: false + vendor: + type: string + required: false + template_author: + type: string + required: false + name: + type: string + required: false + description: + type: string + required: false + serviceType: + type: string + required: false + topology: + type: string + required: false + technology: + type: string + required: false + pe1_ip: + type: string + required: false + ac1_port: + type: string + required: false + ac1_svlan: + type: integer + required: false + ac1_ip: + type: string + required: false + ac1_peer_ip: + type: string + required: false + ac1_route: + type: string + required: false + pe2_ip: + type: string + required: false + ac2_port: + type: string + required: false + ac2_svlan: + type: integer + required: false + ac2_ip: + type: string + required: false + ac2_peer_ip: + type: string + required: false + ac2_route: + type: string + required: false \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/enterprise2DC_template.yaml b/refspec/open-o/sdn-nsd/enterprise2DC_template.yaml new file mode 100644 index 0000000..c5d8714 --- /dev/null +++ b/refspec/open-o/sdn-nsd/enterprise2DC_template.yaml @@ -0,0 +1,252 @@ +# Copyright 2017 Huawei Technologies Co., Ltd. +# +# 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. + +############################################################################### +##### overlay_enterprise to dc #### +############################################################################### +tosca_definitions_version: tosca_simple_yaml_1_0 +description: creates overlay connection from Enterprise to DC +imports: + - Definitions/enterprise2DC_type_definition.yaml + +############################################################################### + +metadata: + id: enterprise2Dc + template_name: enterprise2DC + version: 0.1 + vendor: sdno + template_author: Huawei + + +####################################### TOPOLOGY ############################## +topology_template: + inputs: + vpnName: + type: string + description: Name of Overlayvpn + vpnDescription: + type: string + description: description of Overlayvpn + siteName: + type: string + description: Name of Site + siteCidr: + type: string + description: enterprise site cidr + subnetVlan: + type: integer + description: Vlan value of Subnet + siteVni: + type: integer + description: VxLAN ID connect site to vCPE + vpcName: + type: string + description: in format of domain/project/router, should keep consistent with NFVO + vpcSubnetName: + type: string + description: name of subnet in VPC, should keep consistent with NFVO + vpcSubnetCidr: + type: string + description: vpc cidr + vpcVni: + type: integer + description: vpc subnet vxlanID, should keep consistent with NFVO + vpnType: + type: string + description: vpn connection type between vCPE and vpc. + constraints: + - valid_values: ['IpSec','VxLAN','MPLS_VPN'] + default: IpSec + dcGwIp: + type: string + description: mgrIp of dcGW + dcFwIp: + type: string + description: mgrIp of dc Firewall + dcLbIp: + type: string + description: mgrIp of dc Load Balancer + +# ***************************************************************************** +# node templates +# ***************************************************************************** + + node_templates: + + # Nodes + thinCpe: + type: sdno.node.Node + properties: + siteName: {get_input: siteName} + id: '0' + + vCpe: + type: sdno.node.Node + properties: + siteName: {get_input: siteName} + id: '0' + + dcFw: + type: sdno.node.Node + properties: + ipAddress: {get_input: dcFwIp} + id: '0' + + dcLb: + type: sdno.node.Node + properties: + ipAddress: {get_input: dcLbIp} + id: '0' + + dcGw: + type: sdno.node.Node + properties: + ipAddress: {get_input: dcGwIp} + id: '0' + + # do we need another node for dc endpoint? original template had vpc as node as well + + # Connectivity Service + + enterprise2Dc: + type: sdno.node.ConnectivityService.Enterprise2Dc + requirements: + - endPoint: thinCpeServiceEndpoint + - endPoint: dcServiceEndpoint + - realizes: siteSubnet + - realizes: vpn + - realizes: vpcSubnet + - realizes: sfc + + thinCpeServiceEndpoint: + type: sdno.node.ServiceEndPoint.ThinCpe + requirements: + - node: thinCpe + dcServiceEndpoint: + type: sdno.node.ServiceEndPoint.DcEndpoint + requirements: + #- node: vpc or something else + - node: dcGw + + # ***************************************************************************** + # VPC Node Templates (VpcSubnet and Vpc) + # ***************************************************************************** + + vpcSubnet: + type: sdno.node.Connection.VpcSubnet + properties: + cidr: {get_input: vpcSubnetCidr} + name: {get_input: vpcSubnetName} + vni: {get_input: vpcVni} + requirements: + - realizes: vpc + + vpc: + type: sdno.node.Connection.Vpc + properties: + name: {get_input: vpcName} + + # ***************************************************************************** + # Site Node Templates (Subnet, Vlan, Site with thinCPE and cCPE) + # ***************************************************************************** + + siteSubnet: + type: sdno.node.Connection.SiteSubnet + properties: + vni: {get_input: siteVni} + cidrBlock: {get_input: siteCidr} + name: {concat: ['siteSubnet_' , {get_input: vpcName}]} + requirements: + - realizes: vlan + + vlan: + type: sdno.node.Connection.Vlan + properties: + vlanId: {get_input: subnetVlan} + name: {concat: ['vlan_' , {get_input: vpcName}]} + requirements: + - realizes: site + + thinCpeConnectionEndPoint: + type: sdno.node.ConnectionEndPoint.ThinCpe + requirements: + - realizes: site + - node: thinCpe + + vCpeConnectionEndPoint: + type: sdno.node.ConnectionEndPoint.VCpe + requirements: + - realizes: site + - node: vCpe + + site: + type: sdno.node.Connection.Site + properties: + name: {get_input: siteName} + siteDescriptor: {get_input: vpnType} + requirements: + - endPoint: vCpeConnectionEndPoint + - endPoint: thinCpeConnectionEndPoint + + + # ***************************************************************************** + # VPN Node Templates (Vpn, VpnConnection with siteGW and vpcGW) + # Order of requests: vpn, siteGW, vpcGW, vpnConnection + # ***************************************************************************** + + vpn: + type: sdno.node.Connection.Vpn + properties: + name: {get_input: vpnName} + description: {get_input: vpnDescription} + vpnDescriptor: {get_input: vpnType} + requirements: + - realizes: vpnConnection + + + siteGateway: + type: sdno.node.ConnectionEndPoint.SiteGateway + properties: + name: {concat: ['siteGateway_' , {get_input: vpcName}]} + + vpcGateway: + type: sdno.node.ConnectionEndPoint.VpcGateway + properties: + name: {concat: ['vpcGateway_' , {get_input: vpcName}]} + + vpnConnection: + type: sdno.node.Connection.VpnConnection + properties: + name: {concat: ['vpnConnection_' , {get_input: vpcName}]} + requirements: + - endPoint: siteGateway + - endPoint: vpcGateway + + + # ***************************************************************************** + # SFC Node Template + # ***************************************************************************** + + sfc: + type: sdno.node.Connection.Sfc + properties: + servicePathHops: + - {hopNumber: 1, sfiId: {get_attribute: [dcFw, id] }, sfgId: "", name: 'dcFw'} + - {hopNumber: 2, sfiId: {get_attribute: [dcLb, id] }, sfgId: "", name: 'dcLb'} + scfNeId: {get_attribute: [dcGw, id]} + name: {concat: ['sfc_' , {get_input: vpcName}]} + + substitution_mappings: + node_type: tosca.nodes.sdno.NS.overlayvpn \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/enterprise2DC_type_definition.yaml b/refspec/open-o/sdn-nsd/enterprise2DC_type_definition.yaml new file mode 100644 index 0000000..84a8b39 --- /dev/null +++ b/refspec/open-o/sdn-nsd/enterprise2DC_type_definition.yaml @@ -0,0 +1,1226 @@ +# Copyright 2017 Huawei Technologies Co., Ltd. +# +# 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. +tosca_definitions_version: tosca_simple_yaml_1_0 +description: enteprise to DC type definitions + +# ***************************************************************************** +# enteprise to DC type definitions +# ***************************************************************************** + +metadata: + version: 0.1 + vendor: sdno + template_author: Huawei + +imports: + - sdno_type_definition.yaml + +# ***************************************************************************** +# DSL definitions +# ***************************************************************************** +dsl_definitions: + Vlan: &Vlan + siteId: + type: string + description: site id + required: false + vlanId: + type: integer + # format: int32 + description: vlan id + required: false + ports: + type: list + entry_schema: + type: string + description: ports list + required: false + portNames: + type: list + entry_schema: + type: string + description: port name list + required: false + description: + type: string + default: 'Vlan Service' + + SiteSubnet: &SiteSubnet + siteId: + type: string + description: site id + required: false + cidrBlock: + type: string + description: cidr block + required: false + cidrBlockSize: + type: integer + # format: int32 + description: cidr block size 8~32 + required: false + gatewayIp: + type: string + description: gateway ip + required: false + vlanId: + type: string + description: vlan id + required: false + vni: + type: string + description: vni + required: false + ports: + type: list + entry_schema: + type: string + description: ports list + required: false + portNames: + type: list + entry_schema: + type: string + description: port name list + required: false + ipv6Address: + type: string + description: ipv6 address + required: false + prefixLength: + type: string + description: length of prifix + required: false + dhcp6Enable: + type: string + description: whether enable dhcp6 + required: false + dhcp6Mode: + type: string + description: dhcp mode scope ="serverrelay" + required: false + enableDhcp: + type: string + description: whether enable dhcp + required: false + gatewayInterface: + type: string + description: >- + BDIF interface name, when vni is not null and need to read from AC, pass this parameter to lower layer + required: false + description: + type: string + default: 'SiteSubnet Service' + + Gateway: &Gateway + vpnId: + type: string + required: false + siteId: + type: string + required: false + vpcId: + type: string + required: false + deployPosition: + type: string + required: false + upstreamBandwidth: + type: string + required: false + downstreamBandwidth: + type: string + required: false + vlans: + type: string + required: false + ports: + type: list + entry_schema: + type: string + description: ports list + required: false + portNames: + type: list + entry_schema: + type: string + description: port name list + required: false + regionId: + type: string + required: false + description: + type: string + default: 'Vpn Gateway' + +# ***************************************************************************** +# data types +# ***************************************************************************** +data_types: + + VlanType: + derived_from: tosca.datatypes.Root + properties: *Vlan + + SiteSubnetType: + derived_from: tosca.datatypes.Root + properties: *SiteSubnet + + GatewayType: + derived_from: tosca.datatypes.Root + properties: *Gateway + + SubnetAttributes: + derived_from: tosca.datatypes.Root + properties: + id: + type: string + required: false + parentId: + type: string + required: false + networkId: + type: string + required: false + subnetId: + type: string + required: false + + UnderlayResourcesType: + derived_from: tosca.datatypes.Root + properties: + id: + type: string + required: false + parentId: + type: string + required: false + projectId: + type: string + required: false + routerId: + type: string + required: false + + + ReliabilityType: + derived_from: string + constraints: + - valid_values: ['singleFixedNetwork', + 'dualFixedNetwork', + 'fixedAndWirelessNetwork', + 'EthernetNetwork', + 'VDSLNetwork', + 'GSHDSLNetwork', + 'EthernetAndLTENetwork', + 'EthernetAndEthernetNetwork', + 'EthernetAndVDSLNetwork', + 'VDSLAndLTENetwork'] + + NvStringType: + derived_from: tosca.datatypes.Root + properties: + id: + type: string + required: false + name: + type: string + description: name + required: false + value: + type: string + description: value + required: false + firstParentUuid: + type: string + description: uuid + required: false + + ServicePathHopType: + derived_from: tosca.datatypes.Root + properties: + name: + type: string + description: "SFC name" + default: 'none' + hopNumber: + type: integer + description: Hop Number of the SFC. Starting from 1. + sfiId: + type: string + description: The identity of service function instance + sfgId: + type: string + description: Reserved.The identity of service function group instance + + ServiceClassiferType: + derived_from: tosca.datatypes.Root + properties: + interfaceName: + type: string + description: The name of interface. + zone: + type: string + description: trust zone or untrust zone + rules: + type: list + entry_schema: + type: RuleType + + RuleType: + derived_from: tosca.datatypes.Root + properties: + protocol: + type: string + description: The protocol type of the rule. + policy: + type: string + description: The policy name of the rule + srcPort: + type: string + description: The srcPort name + destPort: + type: string + description: The destPort name. + srcIp: + type: string + description: The src IP address + srcMask: + type: string + description: The src IP mask address + destIp: + type: string + description: The dest IP address + destMask: + type: string + description: The dest IP mask address + + RouteEntryInfoType: + derived_from: tosca.datatypes.Root + properties: + siteId: + type: string + description: site id. + subnetId: + type: string + description: subnet id + cidr: + type: string + description: cidr + vpnGatewayId: + type: string + description: vpn gateway id. + internetGatewayId: + type: string + description: internet gateway id + nextHop: + type: string + description: next hop + precendence: + type: string + description: precendence + routeType: + type: string + description: static-routing for now + + NeMoType: + derived_from: tosca.datatypes.Root +# properties: *BaseServiceInfo + properties: + version: + type: string + description: version. + logicId: + type: string + description: logic id of NE. + phyNeId: + type: string + description: physical id of NE. + managementDomainId: + type: list + entry_schema: + type: string + description: management Domain Id. + controllerId: + type: list + entry_schema: + type: string + description: Controller Id list. + siteId: + type: list + entry_schema: + type: string + description: site Id list + productName: + type: string + description: product name + isVirtual: + type: string + description: whether is a virtual ne + ipAddress: + type: string + description: ip Address + source: + type: string + description: (scope=network_me,os,network_ems,user) + owner: + type: string + description: owner + serialNumber: + type: string + description: serial Number + manufacturer: + type: string + description: manufacturer + manufactureDate: + type: string + description: manufacture Date + nativeId: + type: string + description: native id + accessIpVersion: + type: string + description: (scope=ipv4,ipv6,ipv4/ipv6) + neRole: + type: string + description: ne role + + + +# ***************************************************************************** +# node types +# ***************************************************************************** + +node_types: + + # ***************************************************************************** + # Enterprise2Dc Service Endpoints + # ***************************************************************************** + sdno.node.ServiceEndPoint.ThinCpe: + derived_from: sdno.node.ServiceEndPoint + + # define more specific Dc service endpoint (DC VAS or VNF ?) + sdno.node.ServiceEndPoint.DcEndpoint: + derived_from: sdno.node.ServiceEndPoint + + # ***************************************************************************** + # Enterprise2DC + # ***************************************************************************** + + sdno.node.ConnectivityService.Enterprise2Dc: + derived_from: sdno.node.ConnectivityService + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + deploy: + description: "Deploy Enterprise2Dc" + implementation: + # primary: + dependencies: + - sdno.node.Connection.VpcSubnet/deploy + - sdno.node.Connection.SiteSubnet/deploy + - sdno.node.Connection.Vpn/deploy + - sdno.node.Connection.Sfc/deploy + undeploy: + description: "Deploy Enterprise2Dc" + implementation: + # primary: + dependencies: + - sdno.node.Connection.VpcSubnet/undeploy + - sdno.node.Connection.SiteSubnet/undeploy + - sdno.node.Connection.Vpn/undeploy + - sdno.node.Connection.Sfc/undeploy + +# MUST FIND ANOTHER WAY TO RESTRICT THE SPECIFIC NETWORK HIERARCHY FOR THE SERVICE AT THE SERVICE DEFINITION LAYER +# CURRENTLY ENFORCED IN THE TEMPLATE +# +# requirements: +# - endPoint: +# node: sdno.node.ServiceEndPoint.ThinCpe +# capability: sdno.capability.ServiceEndPoint +# relationship: sdno.relationship.ServiceEndPoint +# - endPoint: +# node: sdno.node.ServiceEndPoint.DcEndpoint +# capability: sdno.capability.ServiceEndPoint +# relationship: sdno.relationship.ServiceEndPoint +# - realizes: +# node: sdno.node.Connection.SiteSubnet +# capability: sdno.capability.Realizes +# relationship: sdno.relationship.RealizedBy +# - realizes: +# node: sdno.node.Connection.Vpn +# capability: sdno.capability.Realizes +# relationship: sdno.relationship.RealizedBy +# - realizes: +# node: sdno.node.Connection.VpcSubnet +# capability: sdno.capability.Realizes +# relationship: sdno.relationship.RealizedBy +# - realizes: +# node: sdno.node.Connection.Sfc +# capability: sdno.capability.Realizes +# relationship: sdno.relationship.RealizedBy + + + # ***************************************************************************** + # VPC Node Types (VpcSubnet and Vpc) + # ***************************************************************************** + + sdno.node.Connection.VpcSubnet: + derived_from: sdno.node.Connection + properties: + cidr: + type: string + description: VPC subnet IP network, should be in format CIDR format. + required: false + vni: + type: integer + #format: int32 + description: The Vxlan id + required: false + vpcId: + type: string + description: VPC owns the subnet. + required: false + gatewayIp: + type: string + description: Gateway Ip addressed used for this subnet. ipv4 supported. VPC service set this property when Subnet is created. + required: false + attributes: + type: SubnetAttributes + required: false + description: + type: string + default: "VpcSubnet Service" + requirements: + - realizes: + node: sdno.node.Connection.Vpc + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + artifacts: + swagger: + file: swagger/vpc.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/vpc.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnovpc/v1/subnets' + delete: + #implementation: 'DELETE /openoapi/sdnovpc/v1/subnets/{subnetId}' + get: + implementation: 'GET /openoapi/sdnovpc/v1/subnets/{subnetId}' + deploy: + implementation: + primary: 'POST /openoapi/sdnovpc/v1/subnets' + dependencies: + - sdno.node.Connection.Vpc/deploy + - sdno.node.Connection.VpcSubnet/deploy + undeploy: + implementation: + primary: 'DELETE /openoapi/sdnovpc/v1/subnets/{subnetId}' + dependencies: + - sdno.node.Connection.VpcSubnet/undeploy + - sdno.node.Connection.Vpc/undeploy + update: + #implementation: 'PUT /openoapi/sdnovpc/v1/subnet/{subnetId}' + + + + + sdno.node.Connection.Vpc: + derived_from: sdno.node.Connection + properties: + externalIp: + type: string + description: External IP assigned to the VPC. ipv4 supported. Used by SNAT and IPSec VPN Service. VPC service set this property after VPC is created. + required: false + attributes: + type: UnderlayResourcesType + required: false + description: + type: string + default: "Vpc Service" + artifacts: + swagger: + file: swagger/vpc.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/vpc.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnovpc/v1/vpcs' + delete: + #implementation: 'DELETE /openoapi/sdnovpc/v1/vpcs/{vpcId}' + get: + implementation: 'GET /openoapi/sdnovpc/v1/vpcs/{vpcId}' + deploy: + implementation: 'POST /openoapi/sdnovpc/v1/vpcs' + undeploy: + implementation: 'DELETE /openoapi/sdnovpc/v1/vpcs/{vpcId}' + update: + #implementation: 'PUT /openoapi/sdnovpc/v1/vpsc/{vpcId}' + + # ***************************************************************************** + # Site Node Types (Subnet, Vlan, Site with thinCPE and cCPE) + # ***************************************************************************** + + sdno.node.Connection.SiteSubnet: + derived_from: sdno.node.Connection + properties: *SiteSubnet + requirements: + - realizes: + node: sdno.node.Connection.Vlan + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + artifacts: + swagger: + file: swagger/site.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/site.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnolocalsite/v1/subnets' + delete: + #implementation: 'DELETE /openoapi/sdnolocalsite/v1/subnets/{uuid}' + get: + implementation: 'GET /openoapi/sdnolocalsite/v1/subnets' + deploy: + implementation: + primary: 'POST /openoapi/sdnolocalsite/v1/subnets' + dependencies: + - sdno.node.Connection.Vlan/deploy + - sdno.node.Connection.SiteSubnet/deploy + undeploy: + implementation: + primary: 'DELETE /openoapi/sdnolocalsite/v1/subnets/{uuid}' + dependencies: + - sdno.node.Connection.SiteSubnet/undeploy + - sdno.node.Connection.Vlan/undeploy + - sdno.node.ConnectionEndPoint.ThinCpe/undeploy + - sdno.node.ConnectionEndPoint.VCpe/undeploy + - sdno.node.ConnectionEndPoint.Site/undeploy + update: + implementation: 'PUT /openoapi/sdnolocalsite/v1/subnets/{uuid}' + + sdno.node.Connection.Vlan: + derived_from: sdno.node.Connection + properties: *Vlan + requirements: + - realizes: + node: sdno.node.Connection.Site + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + artifacts: + swagger: + file: swagger/site.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/site.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnolocalsite/v1/vlans' + delete: + #implementation: 'DELETE /openoapi/sdnolocalsite/v1/vlans/{uuid}' + get: + implementation: 'GET /openoapi/sdnolocalsite/v1/vlans' + deploy: + implementation: + primary: 'POST /openoapi/sdnolocalsite/v1/vlans' + dependencies: + - sdno.node.Connection.Site/deploy + - sdno.node.Connection.Vlan/deploy + undeploy: + implementation: 'DELETE /openoapi/sdnolocalsite/v1/vlans/{uuid}' + update: + implementation: 'PUT /openoapi/sdnolocalsite/v1/vlans/{uuid}' + + sdno.node.ConnectionEndPoint.ThinCpe: + derived_from: sdno.node.ConnectionEndPoint + properties: + siteId: + type: string + description: site id + required: false + esn: + type: string + description: esn + required: false + oldEsn: + type: string + description: old esn + required: false + localCpeType: + type: string + description: local cpe type + required: false + description: + type: string + default: 'ThinCpe' + requirements: + - realizes: + node: sdno.node.Connection.Site + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + artifacts: + swagger: + file: swagger/site.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/site.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + implementation: 'POST /openoapi/sdnolocalsite/v1/local-cpes' + delete: + #implementation: 'DELETE /openoapi/sdnolocalsite/v1/local-cpes/{uuid}' + get: + implementation: 'GET /openoapi/sdnolocalsite/v1/local-cpes' + deploy: + implementation: 'POST /openoapi/sdnolocalsite/v1/local-cpes' + undeploy: + implementation: 'DELETE /openoapi/sdnolocalsite/v1/local-cpes/{uuid}' + update: + #implementation: 'PUT /openoapi/sdnolocalsite/v1/local-cpes/{uuid}' + + sdno.node.ConnectionEndPoint.VCpe: + derived_from: sdno.node.ConnectionEndPoint + properties: + siteId: + type: string + description: site id + required: false + popId: + type: string + description: pop id + required: false + esn: + type: string + description: esn + required: false + mgrIp: + type: string + description: mgr ip + required: false + mgrMask: + type: string + description: mask of mgr ip + required: false + mgrGateway: + type: string + description: mgr gateway ip + required: false + controllerIp: + type: string + description: controller ip + required: false + controllerMask: + type: string + description: controller mask + required: false + vendor: + type: string + description: vendor + required: false + type: + type: string + description: type + required: false + vnfdVersion: + type: string + description: vnfd Version + required: false + vnfdId: + type: string + description: vnfd id + required: false + callbackUrl: + type: string + description: callback Url + required: false + vnfmId: + type: string + description: vnfm id + required: false + dcLocation: + type: string + description: dc location + required: false + rangeId: + type: string + description: range id + required: false + referenceCount: + type: integer + #format: int32 + description: reference count + required: false + template: + type: string + description: template + required: false + description: + type: string + default: 'vCpe' + requirements: + - realizes: + node: sdno.node.Connection.Site + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + artifacts: + swagger: + file: swagger/site.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/site.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnolocalsite/v1/cloud-cpes' + delete: + #implementation: 'DELETE /openoapi/sdnolocalsite/v1/cloud-cpes/{uuid}' + get: + implementation: 'GET /openoapi/sdnolocalsite/v1/cloud-cpes' + deploy: + implementation: 'POST /openoapi/sdnolocalsite/v1/cloud-cpes' + undeploy: + implementation: 'DELETE /openoapi/sdnolocalsite/v1/cloud-cpes/{uuid}' + update: + implementation: 'PUT /openoapi/sdnolocalsite/v1/cloud-cpes/{uuid}' + + + sdno.node.Connection.Site: + derived_from: sdno.node.Connection + properties: + deployCloudCpeByDeafult: + type: string + description: + default: 'true' + required: false + popId: + type: string + description: pop id + required: false + localCpeType: + type: string + description: local cpe type + required: false + siteDescriptor: + type: string + description: site Descriptor + required: false + reliability: + type: ReliabilityType + description: + required: false + isEncrypt: + type: string + description: is encrypt + required: false + vpnUpstreamBandwidth: + type: integer + #format: int64 + description: vpn Upstream Bandwidth default=-2L + required: false + vpnDownstreamBandwidth: + type: integer + # format: int64 + description: vpn Downstream Bandwidth default=-2L + required: false + totalDownstreamBandwidth: + type: string + description: total Downstream Bandwidth + required: false + totalUpstreamBandwidth: + type: string + description: total Upstream Bandwidth + required: false + # localCpes: + # type: list + # entry_schema: + # type: NeMoType + # required: false + # cloudCpes: + # type: list + # entry_schema: + # type: NeMoType + # required: false + # subnets: + # type: list + # entry_schema: + # type: SiteSubnetType + # required: false + # #revisit the type + # vlans: + # type: list + # entry_schema: + # type: VlanType + # required: false + #revisit the type + routes: + type: list + entry_schema: + type: RouteEntryInfoType + required: false + internetGateway: + type: list + entry_schema: + type: GatewayType + required: false + description: + type: string + default: 'Site Service' +# MUST FIND ANOTHER WAY TO RESTRICT THE SPECIFIC NETWORK HIERARCHY FOR THE SERVICE AT THE SERVICE DEFINITION LAYER +# CURRENTLY ENFORCED IN THE TEMPLATE +# + # requirements: + # - endPoint: + # node: sdno.node.ConnectionEndPoint.ThinCpe + # capability: sdno.capability.ConnectionEndPoint + # - endPoint: + # node: sdno.node.ConnectionEndPoint.VCpe + # capability: sdno.capability.ConnectionEndPoint + artifacts: + swagger: + file: swagger/site.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/site.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnolocalsite/v1/sites' + delete: + #implementation: 'DELETE /openoapi/sdnolocalsite/v1/sites/{uuid}' + get: + implementation: 'GET /openoapi/sdnolocalsite/v1/sites' + deploy: + implementation: + primary: 'POST /openoapi/sdnolocalsite/v1/sites' + dependencies: + - sdno.node.Connection.Site/deploy + - sdno.node.ConnectionEndPoint.ThinCpe/deploy + - sdno.node.ConnectionEndPoint.VCpe/deploy + undeploy: + implementation: 'DELETE /openoapi/sdnolocalsite/v1/sites/{uuid}' + update: + implementation: 'PUT /openoapi/sdnolocalsite/v1/sites/{uuid}' + + # ***************************************************************************** + # VPN Node Types (Vpn, VpnConnection with siteGW and vpcGW) + # Order of requests: vpn, siteGW, vpcGW, vpnConnection + # ***************************************************************************** + + sdno.node.Connection.Vpn: + derived_from: sdno.node.Connection + properties: + vpnDescriptor: + type: string + description: vpn template name + required: false + requirements: + - realizes: + node: sdno.node.Connection.VpnConnection + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + artifacts: + swagger: + file: swagger/overlay.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/overlay.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + implementation: 'POST /openoapi/sdnooverlay/v1/vpns' + delete: + implementation: 'DELETE /openoapi/sdnooverlay/v1/vpns/{uuid}' + get: + implementation: 'GET /openoapi/sdnooverlay/v1/vpns' + deploy: + implementation: + primary: 'POST /openoapi/sdnooverlay/v1/vpns/action/deploy' + dependencies: + - sdno.node.Connection.Vpn/deploy + - sdno.node.Connection.VpnConnection/deploy + undeploy: + implementation: + primary: 'DELETE /openoapi/sdnooverlay/v1/vpns/action/undeploy' + dependencies: + - sdno.node.Connection.VpnConnection/undeploy + - sdno.node.ConnectionEndPoint.SiteGateway/undeploy + - sdno.node.ConnectionEndPoint.VpcGateway/undeploy + - sdno.node.Connection.Vpn/undeploy + update: + implementation: 'PUT /openoapi/sdnooverlay/v1/vpns/{uuid}' + + sdno.node.ConnectionEndPoint.SiteGateway: + derived_from: sdno.node.ConnectionEndPoint + properties: *Gateway + artifacts: + swagger: + file: swagger/overlay.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/overlay.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnooverlay/v1/vpn-gateways' + delete: + #implementation: 'DELETE /openoapi/sdnooverlay/v1/vpn-gateways' + get: + implementation: 'GET /openoapi/sdnooverlay/v1/vpn-gateways' + deploy: + implementation: 'POST /openoapi/sdnooverlay/v1/vpn-gateways' + undeploy: + implementation: 'DELETE /openoapi/sdnooverlay/v1/vpn-gateways/{uuid}' + update: + implementation: 'PUT /openoapi/sdnooverlay/v1/vpn-gateways/{uuid}' + + sdno.node.ConnectionEndPoint.VpcGateway: + derived_from: sdno.node.ConnectionEndPoint + properties: *Gateway + artifacts: + swagger: + file: swagger/overlay.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/overlay.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnooverlay/v1/vpn-gateways' + delete: + #implementation: 'DELETE /openoapi/sdnooverlay/v1/vpn-gateways' + get: + implementation: 'GET /openoapi/sdnooverlay/v1/vpn-gateways' + deploy: + implementation: 'POST /openoapi/sdnooverlay/v1/vpn-gateways' + undeploy: + implementation: 'DELETE /openoapi/sdnooverlay/v1/vpn-gateways/{uuid}' + update: + implementation: 'PUT /openoapi/sdnooverlay/v1/vpn-gateways/{uuid}' + + sdno.node.Connection.VpnConnection: + derived_from: sdno.node.Connection + properties: + vpnId: + type: string + required: false + aEndVpnGatewayId: + type: string + required: false + zEndVpnGatewayId: + type: string + required: false + vni: + type: string + required: false + description: + type: string + default: 'vpn connection' +# MUST FIND ANOTHER WAY TO RESTRICT THE SPECIFIC NETWORK HIERARCHY FOR THE SERVICE AT THE SERVICE DEFINITION LAYER +# CURRENTLY ENFORCED IN THE TEMPLATE +# +# requirements: +# - endPoint: +# node: sdno.node.ConnectionEndPoint.SiteGateway +# capability: sdno.capability.ConnectionEndPoint +# - endPoint: +# node: sdno.node.ConnectionEndPoint.VpcGateway +# capability: sdno.capability.ConnectionEndPoint + artifacts: + swagger: + file: swagger/overlay.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/overlay.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + implementation: 'POST /openoapi/sdnooverlay/v1/vpn-connections' + delete: + implementation: 'DELETE /openoapi/sdnooverlay/v1/vpn-connections/{uuid}' + get: + implementation: 'GET /openoapi/sdnooverlay/v1/vpn-connections' + deploy: + implementation: + primary: 'POST /openoapi/sdnooverlay/v1/vpn-connections/action/deploy' + dependencies: + - sdno.node.ConnectionEndPoint.SiteGateway/deploy + - sdno.node.ConnectionEndPoint.VpcGateway/deploy + - sdno.node.Connection.VpnConnection/deploy + undeploy: + implementation: 'POST /openoapi/sdnooverlay/v1/vpn-connections/action/undeploy' + update: + implementation: 'PUT /openoapi/sdnooverlay/v1/vpn-connections/{uuid}' + + # ***************************************************************************** + # SFC Node Types + # ***************************************************************************** + + sdno.node.Connection.Sfc: + derived_from: sdno.node.Connection + properties: + sfcName: + type: string + description: The name of service function chain template + required: false + sfcId: + type: string + description: The id of service function chain template + required: false + popId: + type: string + description: The id of pop + required: false + scfNeId: + type: string + description: The id of scf NE + required: false + symmetric: + type: boolean + description: Whetehr symmetric + required: false + transportType: + type: string + description: The type of the transport + required: false + servicePathHops: + type: list + entry_schema: + type: ServicePathHopType + description: Hop Number of the SFC + required: false + classifiers: + type: list + entry_schema: + type: ServiceClassiferType + description: The list of sfc + required: false + description: + type: string + default: 'Service Function Chain Service' + artifacts: + swagger: + file: swagger/sfc.jaml + type: sdno.artifacts.Implementation.Swagger + mapper: + file: mapper/sfc.tsmap + type: sdno.artifacts.Implementation.ToscaSwaggerMapper + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + #implementation: 'POST /openoapi/sdnoservicechain/v1/paths' + delete: + #implementation: 'DELETE /openoapi/sdnoservicechain/v1/paths/{uuid}' + get: + #implementation: 'GET /openoapi/sdnoservicechain/v1/paths' + deploy: + implementation: 'POST /openoapi/sdnoservicechain/v1/paths' + undeploy: + implementation: 'DELETE /openoapi/sdnoservicechain/v1/paths/{uuid}' + update: + #implementation: 'PUT /openoapi/sdnoservicechain/v1/paths/{uuid}' + + # ***************************************************************************** + # Onderlayvpn Node Types + # ***************************************************************************** + tosca.nodes.sdno.NS.overlayvpn: + properties: + id: + type: string + required: false + template_name: + type: string + required: false + version: + type: string + required: false + vendor: + type: string + required: false + template_author: + type: string + required: false + vpnName: + type: string + required: false + vpnDescription: + type: string + required: false + siteName: + type: string + required: false + siteCidr: + type: string + required: false + subnetVlan: + type: integer + required: false + siteVni: + type: integer + required: false + vpcName: + type: string + required: false + vpcSubnetName: + type: string + required: false + vpcSubnetCidr: + type: string + required: false + vpcVni: + type: integer + required: false + vpnType: + type: string + required: false + dcGwIp: + type: string + required: false + dcFwIp: + type: string + required: false + dcLbIp: + type: string + required: false \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/sdn-nsd-dm-sample.rst b/refspec/open-o/sdn-nsd/sdn-nsd-dm-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/sdn-nsd/sdn-nsd-dm-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/sdn-nsd-im-sample.rst b/refspec/open-o/sdn-nsd/sdn-nsd-im-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/sdn-nsd/sdn-nsd-im-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file diff --git a/refspec/open-o/sdn-nsd/sdno_type_definition.yaml b/refspec/open-o/sdn-nsd/sdno_type_definition.yaml new file mode 100644 index 0000000..5b63750 --- /dev/null +++ b/refspec/open-o/sdn-nsd/sdno_type_definition.yaml @@ -0,0 +1,540 @@ +# Copyright 2017 Huawei Technologies Co., Ltd. +# +# 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. +tosca_definitions_version: tosca_simple_yaml_1_0 +description: sdno basic types + + +metadata: + version: 0.1 + vendor: sdno + template_author: Huawei + +# ***************************************************************************** +# macros +# **************************************************************************** +dsl_definitions: + + BaseServiceInfo: &BaseServiceInfo + adminStatus: + type: AdministrationStateType + description: Used to administratively activate or deactivate already deployed service object + default: 'none' + operStatus: + type: OperationalStateType + description: Used to indicate if the service entity is operational. + default: 'none' + syncStatus: + type: SyncStateType + description: Used to indicate of the service entity is in sync or out of sync with the network + default: 'none' + actionState: + type: ActionStateType + description: Stores the result of the last action on the service object. + default: 'none' + statusReason: + type: string + description: In case of ERROR actionState, it will have the reason for the error. + Otherwise its empty. It is required to make create process to be asynchronous. + default: 'none' + createTime: + type: string + description: create time + default: 'none' + updateTime: + type: string + description: update time + default: 'none' + ownerID: + type: string + description: ID of the owner of the object, can contain controllerID + default: 'sdno' + tenantID: + type: string + description: ID of the tenant + default: 'none' + location: + type: string + description: Location if on single location + default: 'none' + additionalInfo: + type: list + #max size = 1000 + entry_schema: + type: AdditionalInfoRow + required: false + +# ***************************************************************************** +# data types +# ***************************************************************************** +data_types: + + ActionType: + derived_from: string + description: >- + Generic API operations for Connectivity Service lifecycle management. The specific REST requests would be mapped to + these generic ones. + constraints: + - valid_values: ['create','deploy','get','update','undeploy','delete'] + + ActionStateType: + derived_from: string + description: State and/or result of the generic API operations. In the case of the exception, additional information may be present in the statusReason property. + constraints: + - valid_values: ['none', 'normal', 'creating', 'deleting', 'updating', 'create_exception', 'update_exception','delete_exception','deploying', 'deploy_exception', 'undeploying', 'undeploy_exception', 'checking', 'check_exception'] + + LifecycleStateType: + derived_from: string + description: >- + Currently supported lifecycle states for connectivity service. Connectivity Service can either be created + in the inventory or deployed on the network. + constraints: + - valid_values: ['none','created','deployed'] + + AdministrationStateType: + derived_from: string + description: >- + Administrative State that indicates if already deployed connectivity service object or its component is activated or not. + constraints: + - valid_values: ['none', 'active', 'inactive', 'partially_inactive'] + + OperationalStateType: + derived_from: string + description: >- + Operational State that indicates if already deployed and activated connectivity service object or its component is operational or not. + constraints: + - valid_values: ['none','up','down', 'partially_down'] + + + SyncStateType: + derived_from: string + description: >- + Sync State that indicates if already deployed and activated connectivity service object is in sync or out of sync with the network. + constraints: + - valid_values: ['none', 'sync', 'out-sync'] + + DirectionalityType: + derived_from: string + description: Directionality of the connectivity service flow in the endpoint or port. + constraints: + - valid_values: ['input','output','bidirectional'] + + AdditionalInfoRow: + derived_from: tosca.datatypes.Root + description: Row in the additional info list + properties: + id: + type: string + default: 'none' + name: + type: string + default: 'none' + value: + type: string + default: 'none' + firstParentUuid: + type: string + default: 'none' + + StateMachineRow: + derived_from: tosca.datatypes.Root + description: Row in the state transition table + properties: + apiOperation: + type: ActionType + currentState: + type: LifecycleStateType + transitionWorkflow: + type: string + newState: + type: LifecycleStateType + + StateMachineType: + derived_from: tosca.datatypes.Root + description: Connectivity Service State Engine + properties: + rows: + type: list + entry_schema: + type: StateMachineRow + + +# ***************************************************************************** +# capability types +# ***************************************************************************** + +capability_types: + # ConnectionEndPoint can be derived from tosca.capabilities.Endpoint ? + sdno.capability.ConnectionEndPoint: + derived_from: tosca.capabilities.Root + + # ServiceEndPoint can be derived from tosca.capabilities.Endpoint ? + sdno.capability.ServiceEndPoint: + derived_from: tosca.capabilities.Root + + sdno.capability.Realizes: + derived_from: tosca.capabilities.Root + + sdno.capability.Host: + derived_from: tosca.capabilities.Node + + sdno.capability.Bindable: + derived_from: tosca.capabilities.Node + +# ***************************************************************************** +# interface_types +# ***************************************************************************** +interface_types: + + sdno.interfaces.lifecycle.Standard: + create: + description: Standard lifecycle create operation. + update: + description: Standard lifecycle configure and update operation. + deploy: + description: Standard lifecycle deploy operation. + undeploy: + description: Standard lifecycle undeploy operation. + delete: + description: Standard lifecycle delete operation. + get: + description: Standard lifecycle get operation. + + +# ***************************************************************************** +# relationship types +# ***************************************************************************** +relationship_types: + + sdno.relationship.ServiceEndPoint: + description: >- + The relationship specifies which ServiceEndPoints are terminating the ConnectivityService. + The association of the ConnectivityService to ServiceEndPoints is made via the Ports of the ConnectivityService, + where each Port of the ConnectivityService has a role and directionality in the context of the ConnectivityService. + derived_from: tosca.relationships.Root + properties: + # This is initial simple ConnectivityServicePort model, this may be enhanced later via separate Nodes and/or Types + connectivityServicePort: + type: string + required: false + role: + type: string + required: false + directionality: + type: DirectionalityType + required: false + valid_target_types: [sdno.capability.ServiceEndPoint] + + sdno.relationship.ConnectionEndPoint: + description: >- + The relationship specifies which ConnectionEndPonts are terminating the Connection. + The association of the Connection to ConnectionEndPoints is made via the Ports of the Connection, + where each Port of the Connection has a role and directionality in the context of the Connection. + derived_from: tosca.relationships.Root + properties: + # This is initial simple ConnectionPort model, this may be enhanced later via separate Nodes and/or Types + connectionPort: + type: string + required: false + role: + type: string + required: false + directionality: + type: DirectionalityType + required: false + valid_target_types: [sdno.capability.ConnectionEndPoint] + + sdno.relationship.RealizedBy: + description: >- + The relationship specifies what Connenctions are Connectivity Services or Connections realized from. + derived_from: tosca.relationships.Root + valid_target_types: [sdno.capability.Realizes] + + sdno.relationship.HostedOn: + description: >- + The relationship specifies what Node the Endpoint is hosted on. + derived_from: tosca.relationships.Root + valid_target_types: [sdno.capability.Host] + + sdno.relationship.BindsTo: + description: >- + The relationship represents a network association relationship between NodeEdgePoint and Network Node types + derived_from: tosca.relationships.DependsOn + valid_target_types: [sdno.capability.Bindable] + + +# ***************************************************************************** +# artifact types +# ***************************************************************************** +artifact_types: + sdno.artifacts.Implementation.Swagger: + derived_from: tosca.artifacts.Implementation + description: swagger API document + mime_type: application/x-jaml + file_ext: [jaml] + + sdno.artifacts.Implementation.ToscaSwaggerMapper: + derived_from: tosca.artifacts.Implementation + description: mapping between property of TOSCA node instance and data model used by swagger API + mime_type: application/x-tsmap + file_ext: [tsmap] + + +# ***************************************************************************** +# node types +# ***************************************************************************** +node_types: + + sdno.node.Root: + derived_from: tosca.nodes.Root + description: The SDNO Node Type all other SDNO base Node Types derive from + properties: + id: + type: string + required: true + default: 'none' + name: + type: string + required: true + default: 'none' + description: + type: string + required: true + default: 'none' + version: + type: string + required: true + default: '1.0' + + sdno.node.Node: + derived_from: sdno.node.Root + description: >- + It represents a network element which can be managed remotely (through controller or not). Sometimes called managed element. + properties: + ipAddress: + type: string + default: 0.0.0.0 + logicID: + type: string + default: 'none' + phyNeID: + type: string + default: 'none' + nativeID: + type: string + default: 'none' + controllerID: + type: string + default: 'none' + siteName: + type: string + default: 'none' + capabilities: + host: + type: sdno.capability.Host + binding: + type: sdno.capability.Bindable + + sdno.node.NodeEdgePoint: + derived_from: sdno.node.Root + description: >- + It represents the inward network-facing aspects of the edge-port functions that access the forwarding capabilities provided by the Node. + properties: + mgrIP: + type: string + default: 0.0.0.0 + requirements: + - binding: + node: sdno.node.Node + capability: sdno.capability.Bindable + relationship: sdno.relationship.BindsTo + + sdno.node.ServiceEndPoint: + derived_from: sdno.node.Root + description: >- + It represents the outward customer-facing aspects of the edge-port functions that access the forwarding capabilities provided by the Node. + Hence it provides a limited, simplified view of interest to external clients, + that enable the clients to request connectivity without the need to understand the provider network internals. + properties: *BaseServiceInfo + capabilities: + endPoint: + type: sdno.capability.ServiceEndPoint + requirements: + - node: + node: sdno.node.Node + capability: sdno.capability.Host + relationship: sdno.relationship.HostedOn + occurrences: [0, UNBOUNDED] + + sdno.node.ConnectivityService: + derived_from: sdno.node.Root + description: >- + It represents an “intent-like” request for connectivity between two or more ServiceEndPoints. + As such, ConnectivityService is a container for connectivity request details and is distinct + from the Connection that realizes the request + # properties: *BaseServiceInfo + properties: + adminStatus: + type: AdministrationStateType + description: Used to administratively activate or deactivate already deployed service object + default: 'none' + operStatus: + type: OperationalStateType + description: Used to indicate if the service entity is operational. + default: 'none' + syncStatus: + type: SyncStateType + description: Used to indicate of the service entity is in sync or out of sync with the network + default: 'none' + actionState: + type: ActionStateType + description: Stores the result of the last action on the service object. + default: 'none' + statusReason: + type: string + description: In case of ERROR actionState, it will have the reason for the error. + Otherwise its empty. It is required to make create process to be asynchronous. + default: 'none' + createTime: + type: string + description: create time + default: 'none' + updateTime: + type: string + description: update time + default: 'none' + ownerID: + type: string + description: ID of the owner of the object, can contain controllerID + default: 'sdno' + tenantID: + type: string + description: ID of the tenant + default: 'none' + location: + type: string + description: Location if on single location + default: 'none' + additionalInfo: + type: list + #max size = 1000 + entry_schema: + type: AdditionalInfoRow + required: false + templateId: + type: string + default: 'none' + lifecycleState: + type: LifecycleStateType + default: 'none' + state_machine: + type: StateMachineType + default: + rows: + - {apiOperation: create, currentState: none, transitionWorkflow: create, newState: created} + - {apiOperation: create, currentState: created, transitionWorkflow: error, newState: created} + - {apiOperation: create, currentState: deployed, transitionWorkflow: error, newState: deployed} + - {apiOperation: deploy, currentState: none, transitionWorkflow: deploy, newState: deployed} + - {apiOperation: deploy, currentState: created, transitionWorkflow: deployCreated, newState: deployed} + - {apiOperation: deploy, currentState: deployed, transitionWorkflow: ERR, newState: deployed} + - {apiOperation: get, currentState: none, transitionWorkflow: ERR, newState: none} + - {apiOperation: get, currentState: created, transitionWorkflow: get, newState: created} + - {apiOperation: get, currentState: deployed, transitionWorkflow: get, newState: deployed} + - {apiOperation: update, currentState: none, transitionWorkflow: ERR, newState: none} + - {apiOperation: update, currentState: created, transitionWorkflow: updatecreated, newState: created} + - {apiOperation: update, currentState: deployed, transitionWorkflow: updateDeployed, newState: deployed} + - {apiOperation: undeploy, currentState: none, transitionWorkflow: ERR, newState: none} + - {apiOperation: undeploy, currentState: created, transitionWorkflow: ERR, newState: created} + - {apiOperation: undeploy, currentState: deployed, transitionWorkflow: undeploy, newState: created} + - {apiOperation: delete, currentState: none, transitionWorkflow: ERR, newState: none} + - {apiOperation: delete, currentState: created, transitionWorkflow: deleteCreated, newState: none} + - {apiOperation: delete, currentState: deployed, transitionWorkflow: deleteDeployed, newState: none} + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + create: + implementation: + primary: 'POST /openoapi/sdnonslcm/v1/ns' + delete: + implementation: + primary: 'DELETE /openoapi/sdnonslcm/v1/ns/{instanceid}' + get: + implementation: + primary: 'GET /openoapi/sdnonslcm/v1/ns/{instanceid}' + deploy: + implementation: + primary: 'POST /openoapi/sdnonslcm/v1/ns/{instanceid}/instantiate' + undeploy: + implementation: + primary: 'POST /openoapi/sdnonslcm/v1/ns/{instanceid}/terminate' + update: + implementation: + primary: 'PUT /openoapi/sdnonslcm/v1/ns/{instanceid}' + requirements: + - endPoint: + node: sdno.node.ServiceEndPoint + capability: sdno.capability.ServiceEndPoint + relationship: sdno.relationship.ServiceEndPoint + # check aria processing for the min=2 + occurrences: [2, UNBOUNDED] + - realizes: + node: sdno.node.Connection + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + occurrences: [1, UNBOUNDED] + + + sdno.node.ConnectionEndPoint: + derived_from: sdno.node.Root + properties: + *BaseServiceInfo + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + description: >- + It represents the ingress/egress port aspects that access the forwarding function provided + by the Connection. + capabilities: + endPoint: + type: sdno.capability.ConnectionEndPoint + requirements: + - node: + node: sdno.node.Node + capability: sdno.capability.Host + relationship: sdno.relationship.HostedOn + occurrences: [0, UNBOUNDED] + + sdno.node.Connection: + derived_from: sdno.node.Root + properties: + *BaseServiceInfo + interfaces: + standard: + type: sdno.interfaces.lifecycle.Standard + description: >- + The Connection represents an enabled potential for forwarding between two or more connectionEndPoints + capabilities: + realizes: + type: sdno.capability.Realizes + requirements: + - endPoint: + node: sdno.node.ConnectionEndPoint + capability: sdno.capability.ConnectionEndPoint + relationship: sdno.relationship.ConnectionEndPoint + # check aria processing for the min=2 + occurrences: [0, UNBOUNDED] + - realizes: + node: sdno.node.Connection + capability: sdno.capability.Realizes + relationship: sdno.relationship.RealizedBy + occurrences: [0, UNBOUNDED] \ No newline at end of file diff --git a/refspec/open-o/vnf-package/NS&VNF Package Specification-v0.4.pdf b/refspec/open-o/vnf-package/NS&VNF Package Specification-v0.4.pdf new file mode 100644 index 0000000..97dad9a Binary files /dev/null and b/refspec/open-o/vnf-package/NS&VNF Package Specification-v0.4.pdf differ diff --git a/refspec/open-o/vnf-package/vnf-package-sample.rst b/refspec/open-o/vnf-package/vnf-package-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/vnf-package/vnf-package-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file diff --git a/refspec/open-o/vnfd/README.md b/refspec/open-o/vnfd/README.md new file mode 100755 index 0000000..c3b60c8 --- /dev/null +++ b/refspec/open-o/vnfd/README.md @@ -0,0 +1,27 @@ +# +# Copyright 2017 ZTE Corporation. +# +# 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. +# + +1.nfv vnfd type definiton include three layer profile definitions. + + A.simple tosca profle : tosca_definition_1.0.yaml + refer:http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.0/os/TOSCA-Simple-Profile-YAML-v1.0-os.docx + + B.tosca nfv profile : tosca-simple-nfv-1.1.yaml + refer: draft-tosca-nfv-v1.0-wd04-rev06.doc + + C.openo extension profile: In the future + +2.nfv vnfd service template should import the profiles above. \ No newline at end of file diff --git a/refspec/open-o/vnfd/tosca-simple-nfv-1.1.yaml b/refspec/open-o/vnfd/tosca-simple-nfv-1.1.yaml new file mode 100644 index 0000000..679b917 --- /dev/null +++ b/refspec/open-o/vnfd/tosca-simple-nfv-1.1.yaml @@ -0,0 +1,429 @@ +# +# Copyright (c) 2017 ZTE All rights reserved. +# +# 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. +# + +data_types: + + 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 + + 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 + requirement: + type: map # not specified + required: true + entry_schema: + type: string + + tosca.datatypes.nfv.ConnectivityType: + derived_from: tosca.datatypes.Root + properties: + layer_protocol: + type: string + required: yes + constraints: + - valid_values: [ethernet, mpls, odu2, ipv4, ipv6, pseudo_wire ] + flow_pattern: + type: string + required: false + #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 + 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 + 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 + +node_types: + tosca.nodes.nfv.VDU.Compute: + derived_from: tosca.nodes.Compute + 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 + #attributes: + # 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 + #monitoring_parameter: + # modeled as ad hoc (named) capabilities in VDU node template + # for example: + #capabilities: + # cpu_load: tosca.capabilities.nfv.Metric + # memory_usage: tosca.capabilities.nfv.Metric + #host: #Editor note: FFS. How this capabilities should be used in NFV Profile + # type: tosca.capabilities.Container + # valid_source_types: [tosca.nodes.SoftwareComponent] + # occurrences: [0,UNBOUNDED] #note: [0,0] + #endpoint: + # occurrences: [0,0] + #os: + # occurrences: [0,0] + scalable: #Editor note: FFS. How this capabilities should be used in NFV Profile + type: tosca.capabilities.Scalable + #binding: + # occurrences: [0,UNBOUND] + requirements: + - virtual_storage: + capability: tosca.capabilities.nfv.VirtualStorage + relationship: tosca.relationships.nfv.VDU.AttachedTo + node: tosca.nodes.nfv.VDU.VirtualStorage + #occurences: [ 0, UNBOUNDED ] + # - local_storage: #For NFV Profile, this requirement is deprecated. + # occurrences: [0,0] + #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 + required: true + size_of_storage: + type: scalar-unit.size + required: true + 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.Cpd: + derived_from: tosca.nodes.Root + properties: + layer_protocol: + type: string + constraints: + - valid_values: [ethernet, mpls, odu2, ipv4, ipv6, pseudo_wire ] + 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 + address_data: + type: list + entry_schema: + type: tosca.datatypes.nfv.AddressData + required: false + + tosca.nodes.nfv.VduCpd: + derived_from: tosca.nodes.nfv.Cpd + properties: + bitrate_requirement: + type: integer + required: false + virtual_network_interface_requirements: + type: list + entry_schema: + type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements + required: false + requirements: + - virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + node: tosca.nodes.nfv.VnfVirtualLinkDesc + - virtual_binding: + capability: tosca.capabilities.nfv.VirtualBindable + relationship: tosca.relationships.nfv.VirtualBindsTo + node: tosca.nodes.nfv.VDU.Compute #tosca.nodes.nfv.VDU + + tosca.nodes.nfv.VnfVirtualLinkDesc: + 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_flavours: + type: map + entry_schema: + type: string #tosca.datatypes.nfv.VlFlavour + required: true + capabilities: + #monitoring_parameters: + # modeled as ad hoc (named) capabilities in node template + virtual_linkable: + type: tosca.capabilities.nfv.VirtualLinkable + + tosca.nodes.nfv.VNF: + description: >- + The NFV VNF Node Type represents a Virtual Network Function as defined by [ETSI GS NFV-MAN 001 v1.1.1]. It is the default + type that all other VNF Node Types derive from. This allows for all VNF nodes to have a consistent set of features for + modeling and management (e.g., consistent definitions for requirements, capabilities and lifecycle interfaces). + derived_from: tosca.nodes.Root + properties: + id: + description: >- + ID of this VNF. + type: string + vendor: + description: >- + Name of the vendor who generate this VNF. + type: string + version: + description: >- + Version of the software for this VNF. + type: string + requirements: + - virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + +capability_types: + + tosca.capabilities.nfv.Metric: + derived_from: tosca.capabilities.Endpoint + + tosca.capabilities.nfv.VirtualStorage: #new + derived_from: tosca.capabilities.Root + + tosca.capabilities.nfv.VirtualBindable: #new + derived_from: tosca.capabilities.Node + + tosca.capabilities.nfv.VirtualLinkable: #new + derived_from: tosca.capabilities.Node + + + tosca.capabilities.nfv.VirtualCompute: + derived_from: tosca.capabilities.Root + properties: + 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 + +artifact_types: + + tosca.artifacts.nfv.SwImage: + derived_from: tosca.artifacts.Deployment.Image + properties: # or metadata + #id: + # node name + name: + type: string + required: true + version: + type: string + required: true + checksum: + type: string + required: true + container_format: + type: string + required: true + disk_format: + type: string + required: true + min_disk: + type: scalar-unit.size # Number + required: true + min_ram: + type: scalar-unit.size # Number + required: false + size: + type: scalar-unit.size # Number + required: true + sw_image: + type: string + required: true + operating_system: + type: string + required: false + supported_virtualisation_environments: + type: list + entry_schema: + type: string + required: false + +relationship_types: + + tosca.relationships.nfv.VirtualBindsTo: + derived_from: tosca.relationships.DependsOn + valid_target_types: [ tosca.capabilities.nfv.VirtualBindable] + + tosca.relationships.nfv.VDU.AttachedTo: + derived_from: tosca.relationships.AttachesTo + + tosca.relationships.nfv.VirtualLinksTo: + derived_from: tosca.relationships.DependsOn + valid_target_types: [ tosca.capabilities.nfv.VirtualLinkable ] diff --git a/refspec/open-o/vnfd/tosca_definition_1.0.yaml b/refspec/open-o/vnfd/tosca_definition_1.0.yaml new file mode 100644 index 0000000..2b87bc4 --- /dev/null +++ b/refspec/open-o/vnfd/tosca_definition_1.0.yaml @@ -0,0 +1,892 @@ +# +# Copyright 2017 ZTE Corporation. +# +# 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. +# + +tosca_definitions_version: tosca_simple_yaml_1_0 + +node_types: + tosca.nodes.Root: + description: > + The TOSCA root node all other TOSCA base node types derive from. + attributes: + tosca_id: + type: string + tosca_name: + type: string + state: + type: string + capabilities: + feature: + type: tosca.capabilities.Node + requirements: + - dependency: + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + occurrences: [ 0, UNBOUNDED ] + interfaces: + Standard: + type: tosca.interfaces.node.lifecycle.Standard + + tosca.nodes.Compute: + derived_from: tosca.nodes.Root + attributes: + private_address: + type: string + public_address: + type: string + networks: + type: map + entry_schema: + type: tosca.datatypes.network.NetworkInfo + ports: + type: map + entry_schema: + type: tosca.datatypes.network.PortInfo + capabilities: + host: + type: tosca.capabilities.Container + binding: + type: tosca.capabilities.network.Bindable + os: + type: tosca.capabilities.OperatingSystem + scalable: + type: tosca.capabilities.Scalable + requirements: + - local_storage: + capability: tosca.capabilities.Attachment + node: tosca.nodes.BlockStorage + relationship: tosca.relationships.AttachesTo + occurrences: [0, UNBOUNDED] + + tosca.nodes.SoftwareComponent: + derived_from: tosca.nodes.Root + properties: + # domain-specific software component version + component_version: + type: version + required: false + description: > + Software component version. + admin_credential: + type: tosca.datatypes.Credential + required: false + requirements: + - host: + capability: tosca.capabilities.Container + node: tosca.nodes.Compute + relationship: tosca.relationships.HostedOn + + tosca.nodes.DBMS: + derived_from: tosca.nodes.SoftwareComponent + properties: + port: + required: false + type: integer + description: > + The port the DBMS service will listen to for data and requests. + root_password: + required: false + type: string + description: > + The root password for the DBMS service. + capabilities: + host: + type: tosca.capabilities.Container + valid_source_types: [tosca.nodes.Database] + + tosca.nodes.Database: + derived_from: tosca.nodes.Root + properties: + user: + required: false + type: string + description: > + User account name for DB administration + port: + required: false + type: integer + description: > + The port the database service will use to listen for incoming data and requests. + name: + required: false + type: string + description: > + The name of the database. + password: + required: false + type: string + description: > + The password for the DB user account + requirements: + - host: + capability: tosca.capabilities.Container + node: tosca.nodes.DBMS + relationship: tosca.relationships.HostedOn + capabilities: + database_endpoint: + type: tosca.capabilities.Endpoint.Database + + tosca.nodes.WebServer: + derived_from: tosca.nodes.SoftwareComponent + capabilities: + data_endpoint: + type: tosca.capabilities.Endpoint + admin_endpoint: + type: tosca.capabilities.Endpoint.Admin + host: + type: tosca.capabilities.Container + valid_source_types: [tosca.nodes.WebApplication] + + tosca.nodes.WebApplication: + derived_from: tosca.nodes.Root + properties: + context_root: + type: string + required: false + requirements: + - host: + capability: tosca.capabilities.Container + node: tosca.nodes.WebServer + relationship: tosca.relationships.HostedOn + capabilities: + app_endpoint: + type: tosca.capabilities.Endpoint + + tosca.nodes.BlockStorage: + derived_from: tosca.nodes.Root + properties: + size: + type: scalar-unit.size + constraints: + - greater_or_equal: 1 MB + volume_id: + type: string + required: false + snapshot_id: + type: string + required: false + attributes: + volume_id: + type: string + capabilities: + attachment: + type: tosca.capabilities.Attachment + + tosca.nodes.network.Network: + derived_from: tosca.nodes.Root + description: > + The TOSCA Network node represents a simple, logical network service. + properties: + ip_version: + type: integer + required: false + default: 4 + constraints: + - valid_values: [ 4, 6 ] + description: > + The IP version of the requested network. Valid values are 4 for ipv4 + or 6 for ipv6. + cidr: + type: string + required: false + description: > + The cidr block of the requested network. + start_ip: + type: string + required: false + description: > + The IP address to be used as the start of a pool of addresses within + the full IP range derived from the cidr block. + end_ip: + type: string + required: false + description: > + The IP address to be used as the end of a pool of addresses within + the full IP range derived from the cidr block. + gateway_ip: + type: string + required: false + description: > + The gateway IP address. + network_name: + type: string + required: false + description: > + An identifier that represents an existing Network instance in the + underlying cloud infrastructure or can be used as the name of the + newly created network. If network_name is provided and no other + properties are provided (with exception of network_id), then an + existing network instance will be used. If network_name is provided + alongside with more properties then a new network with this name will + be created. + network_id: + type: string + required: false + description: > + An identifier that represents an existing Network instance in the + underlying cloud infrastructure. This property is mutually exclusive + with all other properties except network_name. This can be used alone + or together with network_name to identify an existing network. + segmentation_id: + type: string + required: false + description: > + A segmentation identifier in the underlying cloud infrastructure. + E.g. VLAN ID, GRE tunnel ID, etc.. + network_type: + type: string + required: false + description: > + It specifies the nature of the physical network in the underlying + cloud infrastructure. Examples are flat, vlan, gre or vxlan. + For flat and vlan types, physical_network should be provided too. + physical_network: + type: string + required: false + description: > + It identifies the physical network on top of which the network is + implemented, e.g. physnet1. This property is required if network_type + is flat or vlan. + dhcp_enabled: + type: boolean + required: false + default: true + description: > + Indicates should DHCP service be enabled on the network or not. + capabilities: + link: + type: tosca.capabilities.network.Linkable + + tosca.nodes.network.Port: + derived_from: tosca.nodes.Root + description: > + The TOSCA Port node represents a logical entity that associates between + Compute and Network normative types. The Port node type effectively + represents a single virtual NIC on the Compute node instance. + properties: + ip_address: + type: string + required: false + description: > + Allow the user to set a static IP. + order: + type: integer + required: false + default: 0 + constraints: + - greater_or_equal: 0 + description: > + The order of the NIC on the compute instance (e.g. eth2). + is_default: + type: boolean + required: false + default: false + description: > + If is_default=true this port will be used for the default gateway + route. Only one port that is associated to single compute node can + set as is_default=true. + ip_range_start: + type: string + required: false + description: > + Defines the starting IP of a range to be allocated for the compute + instances that are associated with this Port. + ip_range_end: + type: string + required: false + description: > + Defines the ending IP of a range to be allocated for the compute + instances that are associated with this Port. + attributes: + ip_address: + type: string + requirements: + - binding: + description: > + Binding requirement expresses the relationship between Port and + Compute nodes. Effectively it indicates that the Port will be + attached to specific Compute node instance + capability: tosca.capabilities.network.Bindable + relationship: tosca.relationships.network.BindsTo + node: tosca.nodes.Compute + - link: + description: > + Link requirement expresses the relationship between Port and Network + nodes. It indicates which network this port will connect to. + capability: tosca.capabilities.network.Linkable + relationship: tosca.relationships.network.LinksTo + node: tosca.nodes.network.Network + + tosca.nodes.ObjectStorage: + derived_from: tosca.nodes.Root + description: > + The TOSCA ObjectStorage node represents storage that provides the ability + to store data as objects (or BLOBs of data) without consideration for the + underlying filesystem or devices + properties: + name: + type: string + required: true + description: > + The logical name of the object store (or container). + size: + type: scalar-unit.size + required: false + constraints: + - greater_or_equal: 0 GB + description: > + The requested initial storage size. + maxsize: + type: scalar-unit.size + required: false + constraints: + - greater_or_equal: 0 GB + description: > + The requested maximum storage size. + capabilities: + storage_endpoint: + type: tosca.capabilities.Endpoint + + tosca.nodes.LoadBalancer: + derived_from: tosca.nodes.Root + properties: + algorithm: + type: string + required: false + status: experimental + capabilities: + client: + type: tosca.capabilities.Endpoint.Public + occurrences: [0, UNBOUNDED] + description: the Floating (IP) client’s on the public network can connect to + requirements: + - application: + capability: tosca.capabilities.Endpoint + relationship: tosca.relationships.RoutesTo + occurrences: [0, UNBOUNDED] + description: Connection to one or more load balanced applications + + tosca.nodes.Container.Application: + derived_from: tosca.nodes.Root + requirements: + - host: + capability: tosca.capabilities.Container + node: tosca.nodes.Container.Runtime + relationship: tosca.relationships.HostedOn + + tosca.nodes.Container.Runtime: + derived_from: tosca.nodes.SoftwareComponent + capabilities: + host: + type: tosca.capabilities.Container + scalable: + type: tosca.capabilities.Scalable + + tosca.nodes.Container.Application.Docker: + derived_from: tosca.nodes.Container.Application + requirements: + - host: + capability: tosca.capabilities.Container.Docker + +relationship_types: + tosca.relationships.Root: + description: > + The TOSCA root Relationship Type all other TOSCA base Relationship Types + derive from. + attributes: + tosca_id: + type: string + tosca_name: + type: string + interfaces: + Configure: + type: tosca.interfaces.relationship.Configure + + tosca.relationships.DependsOn: + derived_from: tosca.relationships.Root + + tosca.relationships.HostedOn: + derived_from: tosca.relationships.Root + valid_target_types: [ tosca.capabilities.Container ] + + tosca.relationships.ConnectsTo: + derived_from: tosca.relationships.Root + valid_target_types: [ tosca.capabilities.Endpoint ] + credential: + type: tosca.datatypes.Credential + required: false + + tosca.relationships.AttachesTo: + derived_from: tosca.relationships.Root + valid_target_types: [ tosca.capabilities.Attachment ] + properties: + location: + required: true + type: string + constraints: + - min_length: 1 + device: + required: false + type: string + + tosca.relationships.RoutesTo: + derived_from: tosca.relationships.ConnectsTo + valid_target_types: [ tosca.capabilities.Endpoint ] + + tosca.relationships.network.LinksTo: + derived_from: tosca.relationships.DependsOn + valid_target_types: [ tosca.capabilities.network.Linkable ] + + tosca.relationships.network.BindsTo: + derived_from: tosca.relationships.DependsOn + valid_target_types: [ tosca.capabilities.network.Bindable ] + +capability_types: + tosca.capabilities.Root: + description: > + The TOSCA root Capability Type all other TOSCA base Capability Types + derive from. + + tosca.capabilities.Node: + derived_from: tosca.capabilities.Root + + tosca.capabilities.Container: + derived_from: tosca.capabilities.Root + properties: + num_cpus: + required: false + type: integer + constraints: + - greater_or_equal: 1 + cpu_frequency: + required: false + type: scalar-unit.frequency + constraints: + - greater_or_equal: 0.1 GHz + disk_size: + required: false + type: scalar-unit.size + constraints: + - greater_or_equal: 0 MB + mem_size: + required: false + type: scalar-unit.size + constraints: + - greater_or_equal: 0 MB + + tosca.capabilities.Endpoint: + derived_from: tosca.capabilities.Root + properties: + protocol: + type: string + required: true + default: tcp + port: + type: tosca.datatypes.network.PortDef + required: false + secure: + type: boolean + required: false + default: false + url_path: + type: string + required: false + port_name: + type: string + required: false + network_name: + type: string + required: false + initiator: + type: string + required: false + default: source + constraints: + - valid_values: [source, target, peer] + ports: + type: map + required: false + constraints: + - min_length: 1 + entry_schema: + type: tosca.datatypes.network.PortSpec + attributes: + ip_address: + type: string + + tosca.capabilities.Endpoint.Admin: + derived_from: tosca.capabilities.Endpoint + properties: + secure: + type: boolean + default: true + constraints: + - equal: true + + tosca.capabilities.Endpoint.Public: + derived_from: tosca.capabilities.Endpoint + properties: + network_name: + type: string + default: PUBLIC + constraints: + - equal: PUBLIC + floating: + description: > + Indicates that the public address should be allocated from a pool of + floating IPs that are associated with the network. + type: boolean + default: false + status: experimental + dns_name: + description: The optional name to register with DNS + type: string + required: false + status: experimental + + tosca.capabilities.Scalable: + derived_from: tosca.capabilities.Root + properties: + min_instances: + type: integer + required: true + default: 1 + description: > + This property is used to indicate the minimum number of instances + that should be created for the associated TOSCA Node Template by + a TOSCA orchestrator. + max_instances: + type: integer + required: true + default: 1 + description: > + This property is used to indicate the maximum number of instances + that should be created for the associated TOSCA Node Template by + a TOSCA orchestrator. + default_instances: + type: integer + required: false + description: > + An optional property that indicates the requested default number + of instances that should be the starting number of instances a + TOSCA orchestrator should attempt to allocate. + The value for this property MUST be in the range between the values + set for min_instances and max_instances properties. + + tosca.capabilities.Endpoint.Database: + derived_from: tosca.capabilities.Endpoint + + tosca.capabilities.Attachment: + derived_from: tosca.capabilities.Root + + tosca.capabilities.network.Linkable: + derived_from: tosca.capabilities.Root + description: > + A node type that includes the Linkable capability indicates that it can + be pointed by tosca.relationships.network.LinksTo relationship type, which + represents an association relationship between Port and Network node types. + + tosca.capabilities.network.Bindable: + derived_from: tosca.capabilities.Root + description: > + A node type that includes the Bindable capability indicates that it can + be pointed by tosca.relationships.network.BindsTo relationship type, which + represents a network association relationship between Port and Compute node + types. + + tosca.capabilities.OperatingSystem: + derived_from: tosca.capabilities.Root + properties: + architecture: + required: false + type: string + description: > + The host Operating System (OS) architecture. + type: + required: false + type: string + description: > + The host Operating System (OS) type. + distribution: + required: false + type: string + description: > + The host Operating System (OS) distribution. Examples of valid values + for an “type” of “Linux” would include: + debian, fedora, rhel and ubuntu. + version: + required: false + type: version + description: > + The host Operating System version. + + tosca.capabilities.Container.Docker: + derived_from: tosca.capabilities.Container + properties: + version: + type: list + required: false + entry_schema: + type: version + description: > + The Docker version capability. + publish_all: + type: boolean + default: false + required: false + description: > + Indicates that all ports (ranges) listed in the dockerfile + using the EXPOSE keyword be published. + publish_ports: + type: list + entry_schema: + type: PortSpec + required: false + description: > + List of ports mappings from source (Docker container) + to target (host) ports to publish. + expose_ports: + type: list + entry_schema: + type: PortSpec + required: false + description: > + List of ports mappings from source (Docker container) to expose + to other Docker containers (not accessible outside host). + volumes: + type: list + entry_schema: + type: string + required: false + description: > + The dockerfile VOLUME command which is used to enable access + from the Docker container to a directory on the host machine. + host_id: + type: string + required: false + description: > + The optional identifier of an existing host resource + that should be used to run this container on. + volume_id: + type: string + required: false + description: > + The optional identifier of an existing storage volume (resource) + that should be used to create the container's mount point(s) on. + +interface_types: + tosca.interfaces.node.lifecycle.Standard: + create: + description: Standard lifecycle create operation. + configure: + description: Standard lifecycle configure operation. + start: + description: Standard lifecycle start operation. + stop: + description: Standard lifecycle stop operation. + delete: + description: Standard lifecycle delete operation. + + tosca.interfaces.relationship.Configure: + pre_configure_source: + description: Operation to pre-configure the source endpoint. + pre_configure_target: + description: Operation to pre-configure the target endpoint. + post_configure_source: + description: Operation to post-configure the source endpoint. + post_configure_target: + description: Operation to post-configure the target endpoint. + add_target: + description: Operation to add a target node. + remove_target: + description: Operation to remove a target node. + add_source: + description: Operation to notify the target node of a source node which + is now available via a relationship. + target_changed: + description: Operation to notify source some property or attribute of the + target changed + +data_types: + tosca.datatypes.Root: + description: > + The TOSCA root Data Type all other TOSCA base Data Types derive from + + tosca.datatypes.network.NetworkInfo: + derived_from: tosca.datatypes.Root + properties: + network_name: + type: string + network_id: + type: string + addresses: + type: list + entry_schema: + type: string + + tosca.datatypes.network.PortInfo: + derived_from: tosca.datatypes.Root + properties: + port_name: + type: string + port_id: + type: string + network_id: + type: string + mac_address: + type: string + addresses: + type: list + entry_schema: + type: string + + tosca.datatypes.network.PortDef: + derived_from: tosca.datatypes.Root + type: integer + constraints: + - in_range: [ 1, 65535 ] + + tosca.datatypes.network.PortSpec: + derived_from: tosca.datatypes.Root + properties: + protocol: + type: string + required: true + default: tcp + constraints: + - valid_values: [ udp, tcp, igmp ] + target: + type: PortDef + required: false + target_range: + type: range + required: false + constraints: + - in_range: [ 1, 65535 ] + source: + type: PortDef + required: false + source_range: + type: range + required: false + constraints: + - in_range: [ 1, 65535 ] + + tosca.datatypes.Credential: + derived_from: tosca.datatypes.Root + properties: + protocol: + type: string + required: false + token_type: + type: string + default: password + required: true + token: + type: string + required: true + keys: + type: map + entry_schema: + type: string + required: false + user: + type: string + required: false + +artifact_types: + tosca.artifacts.Root: + description: > + The TOSCA Artifact Type all other TOSCA Artifact Types derive from + properties: + version: version + + tosca.artifacts.File: + derived_from: tosca.artifacts.Root + + tosca.artifacts.Deployment: + derived_from: tosca.artifacts.Root + description: TOSCA base type for deployment artifacts + + tosca.artifacts.Deployment.Image: + derived_from: tosca.artifacts.Deployment + + tosca.artifacts.Deployment.Image.VM: + derived_from: tosca.artifacts.Deployment.Image + + tosca.artifacts.Implementation: + derived_from: tosca.artifacts.Root + description: TOSCA base type for implementation artifacts + + tosca.artifacts.Implementation.Bash: + derived_from: tosca.artifacts.Implementation + description: Script artifact for the Unix Bash shell + mime_type: application/x-sh + file_ext: [ sh ] + + tosca.artifacts.Implementation.Python: + derived_from: tosca.artifacts.Implementation + description: Artifact for the interpreted Python language + mime_type: application/x-python + file_ext: [ py ] + + tosca.artifacts.Deployment.Image.Container.Docker: + derived_from: tosca.artifacts.Deployment.Image + description: Docker container image + + tosca.artifacts.Deployment.Image.VM.ISO: + derived_from: tosca.artifacts.Deployment.Image + description: Virtual Machine (VM) image in ISO disk format + mime_type: application/octet-stream + file_ext: [ iso ] + + tosca.artifacts.Deployment.Image.VM.QCOW2: + derived_from: tosca.artifacts.Deployment.Image + description: Virtual Machine (VM) image in QCOW v2 standard disk format + mime_type: application/octet-stream + file_ext: [ qcow2 ] + +policy_types: + tosca.policies.Root: + description: The TOSCA Policy Type all other TOSCA Policy Types derive from. + + tosca.policies.Placement: + derived_from: tosca.policies.Root + description: The TOSCA Policy Type definition that is used to govern + placement of TOSCA nodes or groups of nodes. + + tosca.policies.Scaling: + derived_from: tosca.policies.Root + description: The TOSCA Policy Type definition that is used to govern + scaling of TOSCA nodes or groups of nodes. + + tosca.policies.Update: + derived_from: tosca.policies.Root + description: The TOSCA Policy Type definition that is used to govern + update of TOSCA nodes or groups of nodes. + + tosca.policies.Performance: + derived_from: tosca.policies.Root + description: The TOSCA Policy Type definition that is used to declare + performance requirements for TOSCA nodes or groups of nodes. + +group_types: + tosca.groups.Root: + description: The TOSCA Group Type all other TOSCA Group Types derive from + interfaces: + Standard: + type: tosca.interfaces.node.lifecycle.Standard + diff --git a/refspec/open-o/vnfd/vNAT.yaml b/refspec/open-o/vnfd/vNAT.yaml new file mode 100644 index 0000000..afb717c --- /dev/null +++ b/refspec/open-o/vnfd/vNAT.yaml @@ -0,0 +1,140 @@ +# +# Copyright 2017 ZTE Corporation. +# +# 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. +# + +tosca_definitions_version: tosca_simple_yaml_1_0 + +metadata: + vnfProvider: intel + vnfProductName: openNAT + vnfSoftwareVersion: 1.0.0 + vnfdVersion: 1.0.0 + vnfProductInfoName: openNAT + vnfProductInfoDescription: openNAT + localizationLanguage: [english, chinese] + defaultLocalizationLanguage: english + vnfdId: openNAT-1.0 + vnfmInfo: GVNFM + +imports: + - defintions/tosca-simple-nfv-1.1.yaml + - defintions/tosca-simple-1.0.yaml + +node_types: + tosca.nodes.nfv.VNF.vOpenNAT: + derived_from: tosca.nodes.nfv.VNF + requirements: + - sriov_plane: + capability: tosca.capabilities.nfv.VirtualLinkable + node: tosca.nodes.nfv.VnfVirtualLinkDesc + relationship: tosca.relationships.nfv.VirtualLinksTo + +topology_template: + + substitution_mappings: + node_type: tosca.nodes.nfv.VNF.vOpenNAT + requirements: + sriov_plane: [SRIOV_Port, virtual_link] + + node_templates: + vdu_vNat: + type: tosca.nodes.nfv.VDU.Compute + properties: + name: vNat + description: the virtual machine of vNat + boot_order: + - vNAT_Storage + configurable_properties: + test: + additional_vnfc_configurable_properties: + aaa: "1" + + capabilities: + virtual_compute: + properties: + virtual_cpu: + cpu_architecture: X86 + num_virtual_cpu: 6 + virtual_memory: + virtual_mem_size: 2 GB + numa_enabled: true + requested_additional_capabilities: + numa: + support_mandatory: true + requested_additional_capability_name: numa + target_performance_parameters: + hw:numa_nodes: "2" + hw:numa_cpus.0: "0,1" + hw:numa_mem.0: "1024" + hw:numa_cpus.1: "2,3,4,5" + hw:numa_mem.1: "1024" + + # hyper_threading: + # support_mandatory: true + # requested_additional_capability_name: hyper_threading + # target_performance_parameters: + # hw:cpu_sockets : "2" + # hw:cpu_threads : "2" + # hw:cpu_cores : "2" + # hw:cpu_threads_policy: "isolate" + + ovs_dpdk: + support_mandatory: true + requested_additional_capability_name: ovs_dpdk + target_performance_parameters: + sw:ovs_dpdk: "true" + requirements: + - virtual_storage: + node: vNAT_Storage + relationship: + properties: + location: /mnt/volume_0 + + artifacts: + vNatVNFImage: + file: /swimages/xenial-snat.qcow2 + type: tosca.artifacts.nfv.SwImage + properties: + name: vNatVNFImage + version: "1.0" + checksum: "5000" + container_format: bare + disk_format: qcow2 + min_disk: 10 GB + min_ram: 1 GB + size: 10 GB + sw_image: /swimages/xenial-snat.qcow2 + operating_system: ubuntu + + vNAT_Storage: + type: tosca.nodes.nfv.VDU.VirtualStorage + properties: + type_of_storage: volume + size_of_storage: 10 GB + rdma_enabled: false + + SRIOV_Port: + type: tosca.nodes.nfv.VduCpd + properties: + virtual_network_interface_requirements: + - name: sriov + description: sriov + support_mandatory: false + requirement: + SRIOV: "true" + layer_protocol: ipv4 + description: sriov port + requirements: + - virtual_binding: vdu_vNat diff --git a/refspec/open-o/vnfd/vnf-dm-sample.rst b/refspec/open-o/vnfd/vnf-dm-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/vnfd/vnf-dm-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file diff --git a/refspec/open-o/vnfd/vnf-im-sample.rst b/refspec/open-o/vnfd/vnf-im-sample.rst new file mode 100755 index 0000000..3a8488e --- /dev/null +++ b/refspec/open-o/vnfd/vnf-im-sample.rst @@ -0,0 +1,15 @@ +======================================================================== +Copyright 2017 CMCC Corporation. + +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. +========================================================================= \ No newline at end of file -- cgit 1.2.3-korg