diff --git a/example-data/complex-vnfd.xml b/example-data/complex-vnfd.xml index 39bbbaf03bed0b92b9fa98710adcc78be70afd2c..56ef89ab6c2be628df5822d88ee023b355b4b266 100644 --- a/example-data/complex-vnfd.xml +++ b/example-data/complex-vnfd.xml @@ -80,8 +80,12 @@ root - root-storage - 10 + block + + 10 + true + CP + CP @@ -152,17 +156,13 @@ control-plane-active 1 1 - - control-plane - + control-plane control-plane-standby 1 1 - - control-plane - + control-plane data-plane @@ -223,17 +223,13 @@ control-plane-active 1 1 - - control-plane - + control-plane control-plane-standby 1 1 - - control-plane - + control-plane data-plane diff --git a/example-data/nfv-nsd.xml b/example-data/nfv-nsd.xml index 57f7c7c840327e7396717dfcd1c5b735f36130bd..1f057d31fabdb3a4c55afd0ca1cac91eae876725 100644 --- a/example-data/nfv-nsd.xml +++ b/example-data/nfv-nsd.xml @@ -1,4 +1,5 @@ - + + ASA My Company @@ -36,8 +37,10 @@ asa-vsd - nfv:root-storage - 0 + nfv:block + + 0 + asa-image @@ -49,7 +52,7 @@ bare qcow2 - 20 + 0 2.0 1 http://www.mycompany.com/asa.qcow2 @@ -133,4 +136,4 @@ - + diff --git a/example-data/nfv-vnfd.xml b/example-data/nfv-vnfd.xml index f9ffa74826c2b86702e49ae2472ae5f1277239d7..d9a64e89b42ffa7a695f2e6faf6f6dfdd3f7d88e 100644 --- a/example-data/nfv-vnfd.xml +++ b/example-data/nfv-vnfd.xml @@ -35,8 +35,11 @@ asa-vsd - nfv:root-storage - 0 + nfv:file + + 0 + asa-image + asa-image @@ -48,7 +51,7 @@ bare qcow2 - 20 + 0 2.0 1 http://www.mycompany.com/asa.qcow2 diff --git a/example-data/nfv.xml b/example-data/nfv.xml index fef928e79c8de820afadfe5e03f5d361336dbe21..035538617980c79e6721b1155dc339f1bfba6ee0 100644 --- a/example-data/nfv.xml +++ b/example-data/nfv.xml @@ -36,8 +36,12 @@ asa-vsd - root-storage - 0 + block + + 1 + true + asa-image + asa-image @@ -181,8 +185,11 @@ csr-vsd - root-storage - 0 + file + + 1 + csr-image + csr-image diff --git a/src/yang/etsi-nfv-common.yang b/src/yang/etsi-nfv-common.yang index 7077b5c7b1018057b7c02829dc02f44a51e76dd7..e0921af45a76f7cee6d017bfb45dacca92c9ae59 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -9,6 +9,15 @@ submodule etsi-nfv-common { description "Common data types for ETSI data models."; + revision 2020-06-01 { + description + "Version 2.8.1. + + Common data structures to support VNFD and NSD according to: + ETSI GS NFV-IFA 014 271 + ETSI GS NFV-IFA 011 271."; + } + revision 2019-10-01 { description "Version 2.7.1. @@ -233,22 +242,22 @@ submodule etsi-nfv-common { "Base type of storage that identities can derive from."; } - identity root-storage { + identity block { base storage-type; description - "Root type of storage."; + "Block type of storage."; } - identity swap-storage { + identity object { base storage-type; description - "Swap type of storage."; + "Object type of storage."; } - identity ephemeral-storage { + identity file { base storage-type; description - "Ephemeral type of storage."; + "File type of storage."; } identity forwarding-behaviour { @@ -393,6 +402,19 @@ submodule etsi-nfv-common { } } + typedef external-lifecycle-management-script-event { + type enumeration { + enum "instantiation"; + enum "scaling"; + enum "healing"; + enum "termination"; + enum "vnf-flavour-change"; + enum "vnf-operation-change"; + enum "vnf-ext-conn-change"; + enum "vnfinfo-modification"; + } + } + grouping local-affinity-or-anti-affinity-rule { list local-affinity-or-anti-affinity-rule { key "type scope"; @@ -424,6 +446,7 @@ submodule etsi-nfv-common { type identityref { base layer-protocol; } + min-elements 1; description "Identifies the protocols that the VL uses (Ethernet, MPLS, ODU2, IPV4, IPV6, Pseudo-Wire). The top layer diff --git a/src/yang/etsi-nfv-descriptors.yang b/src/yang/etsi-nfv-descriptors.yang index 0f2b64c5e221287e18881fc661e6c50ad9f443b1..3b93f1287b36f105b99c9ceef0dac8ba46b42fb5 100644 --- a/src/yang/etsi-nfv-descriptors.yang +++ b/src/yang/etsi-nfv-descriptors.yang @@ -14,6 +14,14 @@ module etsi-nfv-descriptors { description "Network Function Virtualization Descriptors"; + revision 2020-06-01 { + description + "Version 2.8.1. + + NSD and PNFD according to ETSI GS NFV-IFA 014 271 + VNFD according to ETSI GS NFV-IFA 011 271."; + } + revision 2019-10-01 { description "Version 2.7.1. @@ -24,6 +32,7 @@ module etsi-nfv-descriptors { revision 2019-04-25 { description "Initial revision. + NSD and PNFD according to ETSI GS NFV-IFA 014 Ed261v252 VNFD according to ETSI GS NFV-IFA 011 Ed261v254"; } diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 8aa781a774d201e20b35fc7c62e8c0f393293136..c096d1e65aa7d6906dddc46ea317774b01ec4638 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -11,19 +11,25 @@ submodule etsi-nfv-ns { description "Models for NS according to ETSI GS NFV-IFA 014."; + revision 2020-06-01 { + description + "Version 2.8.1. + + NSD according to ETSI GS NFV-IFA 014 271."; + } + revision 2019-10-01 { description "Version 2.7.1. - Common data structures to support VNFD and NSD according to: - ETSI GS NFV-IFA 014 Ed271v264 - ETSI GS NFV-IFA 011 Ed271v264"; + NSD according to ETSI GS NFV-IFA 014 Ed271v264."; } + revision 2019-04-25 { description "Initial revision - Common data structure to support NSD according to: - ETSI GS NFV-IFA 014 Ed261v252"; + + NSD according to ETSI GS NFV-IFA 014 Ed261v252."; reference "ETSI GS NFV-IFA 014 Ed261v252"; @@ -355,7 +361,6 @@ submodule etsi-nfv-ns { "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc information element"; } - uses security-parameters; } list vnffgd { @@ -792,21 +797,16 @@ submodule etsi-nfv-ns { uses local-affinity-or-anti-affinity-rule; - list affinity-or-anti-affinity-group { - key "id"; - + leaf-list affinity-or-anti-affinity-group-id { + type leafref { + path "../../affinity-or-anti-affinity-group/id"; + } description "Identifier(s) of the affinity or anti-affinity group(s) the VnfProfile belongs to."; reference "GS NFV IFA014: Section 6.3.3.2 VnfProfile information element"; - - leaf id { - type leafref { - path "../../../affinity-or-anti-affinity-group/id"; - } - } } list virtual-link-connectivity { @@ -1004,9 +1004,10 @@ submodule etsi-nfv-ns { uses local-affinity-or-anti-affinity-rule; - list affinity-or-anti-affinity-group { - key "id"; - + leaf-list affinity-or-anti-affinity-group-id { + type leafref { + path "../../affinity-or-anti-affinity-group/id"; + } description "Identifies an affinity or anti-affinity group the VLs instantiated according to the VlProfile belong @@ -1014,12 +1015,6 @@ submodule etsi-nfv-ns { reference "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile information element"; - - leaf id { - type leafref { - path "../../../affinity-or-anti-affinity-group/id"; - } - } } container max-bitrate-requirements { @@ -1452,21 +1447,16 @@ submodule etsi-nfv-ns { element"; } - list affinity-or-anti-affinity-group-id { - key "id"; - + leaf-list affinity-or-anti-affinity-group-id { + type leafref { + path "../../affinity-or-anti-affinity-group/id"; + } description "Identifies an affinity or anti-affinity group the NSs created according to this NsProfile belongs to."; reference "GS NFV IFA014: Section 6.3.11.2 NsProfile information element"; - - leaf id { - type leafref { - path "../../../affinity-or-anti-affinity-group/id"; - } - } } list virtual-link-connectivity { diff --git a/src/yang/etsi-nfv-nsd.yang b/src/yang/etsi-nfv-nsd.yang index 304fc30e19f93ead8831dc49a57dd6d382b9f85a..c23e31c06f243d419007419dd13e92ff89d793e2 100644 --- a/src/yang/etsi-nfv-nsd.yang +++ b/src/yang/etsi-nfv-nsd.yang @@ -13,25 +13,34 @@ module etsi-nfv-nsd { description "Network Services Descriptors"; + revision 2020-06-01 { + description + "Version 2.8.1. + + NSD according to ETSI GS NFV-IFA 014 271."; + } + revision 2019-10-01 { description "Version 2.7.1. - Common data structures to support VNFD and NSD according to: - ETSI GS NFV-IFA 014 Ed271v264 - ETSI GS NFV-IFA 011 Ed271v264"; + NSD according to ETSI GS NFV-IFA 014 Ed271v264."; } + revision 2019-04-25 { description "Initial revision. + NSD according to ETSI GS NFV-IFA 014 Ed261v252."; } container nsd { list nsd { key "id"; + max-elements 1; uses nfv:nsd; + description "The NSD information element is a deployment template whose instances are used by the NFVO for the lifecycle management diff --git a/src/yang/etsi-nfv-pnf.yang b/src/yang/etsi-nfv-pnf.yang index 170e9638b87a37dba4fe7599d1bb97ed0d4c3c2b..aa1313e2aac4076c819b2c2c7fe2dad46113dce3 100644 --- a/src/yang/etsi-nfv-pnf.yang +++ b/src/yang/etsi-nfv-pnf.yang @@ -12,20 +12,25 @@ submodule etsi-nfv-pnf { description "Models for PNFD according to GS NFV-IFA 014."; + revision 2020-06-01 { + description + "Version 2.8.1. + + PNFD according to ETSI GS NFV-IFA 014 271."; + } + revision 2019-10-01 { description "Version 2.7.1. - Common data structures to support VNFD and NSD according to: - ETSI GS NFV-IFA 014 Ed271v264 - ETSI GS NFV-IFA 011 Ed271v264"; + PNFD according to ETSI GS NFV-IFA 014 Ed271v264."; } + revision 2019-04-25 { description "Initial revision. - Common data structure to support VNFD according to: - ETSI GS NFV-IFA 014 Ed261v252"; + PNFD according to ETSI GS NFV-IFA 014 Ed261v252."; reference "ETSI GS NFV-IFA 014 Ed261v252"; diff --git a/src/yang/etsi-nfv-pnfd.yang b/src/yang/etsi-nfv-pnfd.yang index 8b3e46ebd17181c3e4ccd1b2dfd03817479e302a..66147c9a6de2f2437fd90c112e2d57324c4c1b6d 100644 --- a/src/yang/etsi-nfv-pnfd.yang +++ b/src/yang/etsi-nfv-pnfd.yang @@ -13,15 +13,24 @@ module etsi-nfv-pnfd { description "Physcial Network Function Descriptor."; + revision 2020-06-01 { + description + "Version 2.8.1. + + PNFD according to ETSI GS NFV-IFA 014 271."; + } + revision 2019-10-01 { description "Version 2.7.1. NSD according to ETSI GS NFV-IFA 014 Ed271v264."; } + revision 2019-04-25 { description "Initial revision. + NSD according to ETSI GS NFV-IFA 014 Ed261v252."; } diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 283217a50a5da677784713f4b209cef71a3b05fa..16f77c98637e3950e3bbbb4813620a5eece43ebe 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -16,19 +16,24 @@ submodule etsi-nfv-vnf { description "Models for VNFD according to GS NFV-IFA 011."; + revision 2020-06-01 { + description + "Version 2.8.1. + + VNFD according to ETSI GS NFV-IFA 011 271."; + } + revision 2019-10-01 { description "Version 2.7.1. - Common data structures to support VNFD and NSD according to: - ETSI GS NFV-IFA 014 Ed271v264 - ETSI GS NFV-IFA 011 Ed271v264"; + VNFD according to ETSI GS NFV-IFA 011 Ed271v264"; } + revision 2019-03-18 { description "Initial revision. - Common data structure to support VNFD according to: VNFD according to ETSI GS NFV-IFA 011 Ed261v254"; reference @@ -95,6 +100,79 @@ submodule etsi-nfv-vnf { "GS NFV-IFA011: Section 7.1.6.6, VirtualNetworkInterfaceRequirements information element"; } + + leaf nic-io-requirements { + type leafref { + path "/nfv:nfv/nfv:vnfd/nfv:virtual-compute-desc/" + + "nfv:logical-node/nfv:id"; + } + description + "This references (couples) the CPD with any logical node + I/O requirements (for network devices) that may have been + created. Linking these attributes is necessary so that I/O + requirements that need to be articulated at the logical + node level can be associated with the network interface + requirements associated with the CPD."; + reference + "GS NFV-IFA011: Section 7.1.6.6, + VirtualNetworkInterfaceRequirements information element"; + } + } + } + + grouping block-storage-data { + leaf size-of-storage { + type uint64; + units "GB"; + default 0; + description + "Size of virtualized storage resource in GB."; + reference + "GS NFV IFA011: Section 7.1.9.4.3, BlockStorageData + Information element."; + } + + list vdu-storage-requirements { + key "key"; + + leaf key { + type string; + } + + leaf value { + type string; + } + description + "An array of key-value pairs that articulate + the storage deployment requirements."; + reference + "GS NFV IFA011: Section 7.1.9.4.3, BlockStorageData + Information element."; + } + + leaf rdma-enabled { + type boolean; + description + "Indicate if the storage support RDMA."; + reference + "GS NFV IFA011: Section 7.1.9.4.3, BlockStorageData + Information element."; + } + + leaf sw-image-desc { + type leafref { + path "../../../sw-image-desc/id"; + } + must "../size-of-storage >=" + + "../../../sw-image-desc[id=current()]/min-disk" { + } + description + "Software image to be loaded on the VirtualStorage + resource created based on this VirtualStorageDesc. + Shall be absent when used for virtual disks."; + reference + "GS NFV IFA011: Section 7.1.9.4.3, BlockStorageData + Information element."; } } @@ -491,6 +569,7 @@ submodule etsi-nfv-vnf { list requirement-detail { key "key"; + min-elements 1; leaf key { type string; @@ -778,6 +857,24 @@ submodule etsi-nfv-vnf { VirtualCpuData information element."; } } + + list virtual-disk { + key "id"; + + description + "The local or ephemeral disk(s) of the virtualised compute."; + reference + "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc + Information element."; + + leaf id { + type string; + description + "Unique identifier for the list of virtual disks."; + } + + uses block-storage-data; + } } list virtual-storage-desc { @@ -797,70 +894,99 @@ submodule etsi-nfv-vnf { leaf type-of-storage { // Needed to be able to onboard images - default root-storage; type identityref { base storage-type; } + default "nfv:block"; description - "Type of virtualised storage resource (e.g. volume, - object)."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; - } - - leaf size-of-storage { - type uint64; - units "GB"; - default 0; - description - "Size of virtualised storage resource (e.g. size of - volume, in GB)"; + "Type of virtualised storage resource (BLOCK, OBJECT, + FILE)."; reference "GS NFV IFA011: Section 7.1.9.4, Information elements related to Virtual Storage."; } - list vdu-storage-requirements { - key "key"; - - leaf key { - type string; - } + choice storage { + container block-storage-data { + when '../type-of-storage = "nfv:block"'; + description + "Specifies the details of block storage. It shall + be present when the 'typeOfStorage' attribute is set to + 'BLOCK'. It shall be absent otherwise."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; + + uses block-storage-data; + } + + container object-storage-data { + when '../type-of-storage = "nfv:object"'; + description + "Specifies the details of object storage. It shall be + present when the 'typeOfStorage' attribute is set to + 'OBJECT'. It shall be absent otherwise."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; + + leaf max-size-of-storage { + type uint64; + units "GB"; + default 0; + description + "Max size of virtualised storage resource in GB."; + reference + "GS NFV IFA011: Section 7.1.9.4.4, ObjectStorage Information + element."; + } + } - leaf value { - type string; - } - description - "Array of key-value pairs that articulate the storage - deployment requirements."; - reference - "GS NFV IFA011: Section 7.1.9.4.2, VirtualStorageDesc - information element."; - } + container file-storage-data { + when '../type-of-storage = "nfv:file"'; + description + "Specifies the details of file storage. It shall be present + when the 'typeOfStorage' attribute is set to 'FILE'. It + shall be absent otherwise."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; + + leaf size-of-storage { + type uint64; + units "GB"; + default 0; + description + "Size of virtualised storage resource in GB."; + reference + "GS NFV IFA011: Section 7.1.9.4.5, FileStorageData + Information element."; + } - leaf rdma-enabled { - type boolean; - description - "Indicate if the storage support RDMA."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; - } + leaf file-system-protocol { + type string; + default "cifs"; + description + "The shared file system protocol (e.g. NFS, CIFS)."; + reference + "GS NFV IFA011: Section 7.1.9.4.5, FileStorageData + Information element."; + } - leaf sw-image-desc { - type leafref { - path "../../sw-image-desc/id"; - } - must "../size-of-storage >=" + - "../../sw-image-desc[id=current()]/min-disk" { - } - description - "Software image to be loaded on the VirtualStorage - resource created based on this VirtualStorageDesc."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; + leaf int-virtual-link-desc { + type leafref { + path "../../../sw-image-desc/id"; + } + mandatory true; + description + "Reference of the internal VLD which this file storage + connects to. The attached VDUs shall connect to the + same internal VLD."; + reference + "GS NFV IFA011: Section 7.1.9.4.5, FileStorageData + Information element."; + } + } } } @@ -1445,27 +1571,16 @@ submodule etsi-nfv-vnf { } uses local-affinity-or-anti-affinity-rule; - list affinity-or-anti-affinity-group { - key "id"; - + leaf-list affinity-or-anti-affinity-group-id { + type leafref { + path "../../affinity-or-anti-affinity-group/id"; + } description "Identifier(s) of the affinity or anti-affinity group(s) the VDU belongs to."; reference "GS NFV IFA011: Section 7.1.8.3, VduProfile information element."; - leaf id { - type leafref { - path "../../../" + - "affinity-or-anti-affinity-group/id"; - } - description - "Identifies an affinity or anti-affinity group to - which the affinity or anti-affinity rule applies."; - reference - "GS NFV IFA011: Section 7.1.8.12, AffinityOrAntiAffinity - information element."; - } } } @@ -1502,12 +1617,9 @@ submodule etsi-nfv-vnf { } uses local-affinity-or-anti-affinity-rule; - list affinity-or-anti-affinity-group { - key "id"; - leaf id { - type leafref { - path "../../../affinity-or-anti-affinity-group/id"; - } + leaf-list affinity-or-anti-affinity-group-id { + type leafref { + path "../../affinity-or-anti-affinity-group/id"; } description "Identifier(s) of the affinity or anti-affinity @@ -2856,10 +2968,25 @@ submodule etsi-nfv-vnf { } leaf-list event { - type internal-lifecycle-management-script-event; + type union { + type internal-lifecycle-management-script-event; + type external-lifecycle-management-script-event; + } description "Describes VNF lifecycle event(s) or an external stimulus - detected on a VNFM reference point."; + detected on a VNFM reference point. + + If the event is of type + internal-lifecycle-management-script-event, then depending + on whether the event is of type start-* or end-*, the + script associated with the VNF LCM operation needs to be + executed before the event, or after the event, + respectively. + + On the other hand, if the event is of type + external-lifecycle-management-script-event, then the + script associated with the event needs to be executed + for the given VNF LCM operation."; reference "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript information element"; @@ -2931,10 +3058,15 @@ submodule etsi-nfv-vnf { } list element-group { + status deprecated; key "id"; description "Describes the associated elements of a VNFD for a certain - purpose during VNF lifecycle management."; + purpose during VNF lifecycle management. + + Reason for deprecating this node - Information about which + VDU and VLD are involved in scaling is better defined by + ScalingDelta."; reference "GS NFV IFA011: Section 7.1.2 VNFD information element"; diff --git a/src/yang/etsi-nfv-vnfd.yang b/src/yang/etsi-nfv-vnfd.yang index f5fcc6282c69ff9dbc8054d2af0bea71bbc4fd58..279dfbab2e527b479ad1b879943fee82b23f8f75 100644 --- a/src/yang/etsi-nfv-vnfd.yang +++ b/src/yang/etsi-nfv-vnfd.yang @@ -13,15 +13,24 @@ module etsi-nfv-vnfd { description "Virtual Network Function Descriptor."; + revision 2020-06-01 { + description + "Version 2.8.1. + + VNFD according to ETSI GS NFV-IFA 011 271."; + } + revision 2019-10-01 { description "Revision 2.7.1. VNFD according to ETSI GS NFV-IFA 011 Ed271v264."; } + revision 2019-03-18 { description "Initial revision. + VNFD according to ETSI GS NFV-IFA 011 Ed261v254."; }