diff --git a/example-data/complex-vnfd.xml b/example-data/complex-vnfd.xml index 39bbbaf03bed0b92b9fa98710adcc78be70afd2c..9aa8ec9d57eddb0eea47c6b119bb85828772e9da 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 diff --git a/example-data/nfv-nsd.xml b/example-data/nfv-nsd.xml index c52f36ddc6ee64f55dc979e19032a10eb87af8ba..1f057d31fabdb3a4c55afd0ca1cac91eae876725 100644 --- a/example-data/nfv-nsd.xml +++ b/example-data/nfv-nsd.xml @@ -37,8 +37,10 @@ asa-vsd - nfv:root-storage - 0 + nfv:block + + 0 + asa-image @@ -50,7 +52,7 @@ bare qcow2 - 20 + 0 2.0 1 http://www.mycompany.com/asa.qcow2 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..3fb5a156783055c63aaf138e2028ddaa4121eca8 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -233,22 +233,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 { diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index c1586980ddc9b52b3c02bd8e87984b9bb866b5f2..bd8c032c652ee883d92b6aa251c002ed6b426dae 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -115,6 +115,62 @@ submodule etsi-nfv-vnf { } } + 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."; + } + } + grouping vnfd { leaf id { type string; @@ -796,6 +852,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 { @@ -815,70 +889,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)."; + "Type of virtualised storage resource (BLOCK, OBJECT, + FILE)."; 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)"; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; - } - - list vdu-storage-requirements { - key "key"; + 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; + } - leaf key { - type string; - } + 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."; + } + } } }