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.";
+ }
+ }
}
}