diff --git a/.jenkins.sh b/.jenkins.sh index 3193dce78a4f8e22765fb624a5f507078b631f1d..2292aca1aee0aae15922015646a649b6e8bf94f9 100644 --- a/.jenkins.sh +++ b/.jenkins.sh @@ -6,7 +6,7 @@ # https://forge.etsi.org/etsi-software-license YANG_MODULES="yang/yang/*" -OUTPUT="etsi-nfv.html" +OUTPUT="etsi-nfv-descriptors.html" IMG_NAME="sol006" VERSION=latest IMG="$IMG_NAME:$VERSION" diff --git a/example-data/complex-vnfd.xml b/example-data/complex-vnfd.xml new file mode 100644 index 0000000000000000000000000000000000000000..53a50d091fe67c66880362719016299c6c6232cf --- /dev/null +++ b/example-data/complex-vnfd.xml @@ -0,0 +1,272 @@ + + + complex-vnf + My Company + complex-vnf + 1.0 + 1.0 + netconf + + control-plane-active + control-plane-active + + internal + internal-vl + ipv4 + + + mgmt + mgmt + ipv4 + + CP + root + CP + + + control-plane-standby + control-plane-standby + + internal + internal-vl + ipv4 + + + mgmt + mgmt + ipv4 + + CP + root + CP + + + data-plane + data-plane + + in + ipv4 + + + internal + internal-vl + ipv4 + + + out + ipv4 + + DP + root + DP + + + CP + + 16.0 + + + 8 + + + + DP + + 32.0 + + + 16 + + + + root + root-storage + 10 + + + CP + CP + 1.1 + + sha-224 + deadbeef + + bare + qcow2 + 2.0 + 1 + http://mycompany.images.com/control-plane.qcow2 + + + DP + DP + 1.1 + + sha-224 + deadbeef + + bare + qcow2 + 2.0 + 1 + http://mycompany.images.com/data-plane.qcow2 + + + internal-vl + + + ipv4 + + + + + mgmt + + + ipv4 + + + + + in + + data-plane + in + + ipv4 + + + mgmt + mgmt + ipv4 + + + out + + data-plane + out + + ipv4 + + + gold + + control-plane-active + 1 + 1 + + control-plane + + + + control-plane-standby + 1 + 1 + + control-plane + + + + data-plane + 2 + 8 + + + il-1 + + control-plane-active + 1 + + + control-plane-standby + 1 + + + data-plane + 2 + + + + il-2 + + control-plane-active + 1 + + + control-plane-standby + 1 + + + data-plane + 4 + + + il-1 + + control-plane + anti-affinity + nfvi-node + + + + silver + + control-plane-active + 1 + 1 + + control-plane + + + + control-plane-standby + 1 + 1 + + control-plane + + + + data-plane + 1 + 4 + + + il-1 + + control-plane-active + 1 + + + control-plane-standby + 1 + + + data-plane + 1 + + + + il-2 + + control-plane-active + 1 + + + control-plane-standby + 1 + + + data-plane + 2 + + + il-1 + + control-plane + anti-affinity + nfvi-node + + + + diff --git a/example-data/nfv.xml b/example-data/nfv.xml index 3368af1e0b1ca2d7fa77022a5368e6ffa720dfe0..1ee310fab7325b42f6337b3de3ad7e50e3e27700 100644 --- a/example-data/nfv.xml +++ b/example-data/nfv.xml @@ -1,4 +1,4 @@ - + ASA My Company @@ -11,21 +11,21 @@ Firewall VDU inside - Ethernet + ethernet management - Ethernet + ethernet outside - Ethernet + ethernet asa-vcd asa-vsd asa-image - + asa-vcd 4.0 @@ -33,19 +33,26 @@ 2 - + asa-vsd - root + root-storage 0 asa-image + ASA image + 1.1 + + sha-224 + deadbeef + bare qcow2 1 2.0 - http://www.cisco.com/asa.qcow2 + 1 + http://mycompany.images.com/asa.qcow2 inside @@ -53,7 +60,7 @@ firewall inside - Ethernet + ethernet management @@ -61,7 +68,7 @@ firewall management - Ethernet + ethernet outside @@ -69,7 +76,7 @@ firewall outside - Ethernet + ethernet normal @@ -81,14 +88,14 @@ double - firewall + firewall 2 single - firewall + firewall 1 @@ -118,21 +125,21 @@ Router VDU left - Ethernet + ethernet management - Ethernet + ethernet right - Ethernet + ethernet csr-vcd csr-vsd csr-image - + csr-vcd 4.0 @@ -140,19 +147,26 @@ 2 - + csr-vsd - root + root-storage 0 csr-image + CSR image + 1.1 + + sha-224 + deadbeef + bare qcow2 1 2.0 - http://www.cisco.com/csr.qcow2 + 1 + http://mycompany.images.com/csr.qcow2 left @@ -160,7 +174,7 @@ router left - Ethernet + ethernet management @@ -168,7 +182,7 @@ router management - Ethernet + ethernet right @@ -176,7 +190,7 @@ router right - Ethernet + ethernet normal @@ -188,14 +202,14 @@ double - router + router 2 single - router + router 1 @@ -267,7 +281,7 @@ fw2dpi - Ethernet + ethernet @@ -282,7 +296,7 @@ mgmt - IPv4 + ipv4 @@ -297,7 +311,7 @@ r2fw - Ethernet + ethernet @@ -522,7 +536,7 @@ r2fw - Ethernet + ipv4 @@ -594,7 +608,7 @@ 1.0 outside - Ethernet + ethernet diff --git a/run-test.sh b/run-test.sh index 36bc6ec0a2dcc6e991c125f4ff3fd8cfc96a66ae..471b13aec126d886f0f2d6f3b1fb8eba09b89090 100755 --- a/run-test.sh +++ b/run-test.sh @@ -10,13 +10,15 @@ cd src echo "Testing compilation" CONFD_OPTS="--fail-on-warnings" CONFD_OPTS="" -confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv.fxs etsi-nfv.yang +confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-descriptors.fxs etsi-nfv-descriptors.yang echo "Starting ConfD" confd -echo "Loading Data" +echo "Loading data for the simple example" confd_load -l -m nfv.xml +echo "Loading data for the complex Vnfd example" +confd_load -l -m complex-vnfd.xml # Don't do this in the actual test, just waste of cycles # echo "Stopping ConfD" diff --git a/src/yang/etsi-nfv-common.yang b/src/yang/etsi-nfv-common.yang index 8dabf7b33f172fba386349e97e31bc50faa3ee11..8c641a8a3772ac125113e413524b3e23510ce9ef 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -1,6 +1,6 @@ submodule etsi-nfv-common { yang-version 1.1; - belongs-to etsi-nfv { + belongs-to etsi-nfv-descriptors { prefix nfv; } description @@ -20,22 +20,22 @@ submodule etsi-nfv-common { */ identity layer-protocol { } - identity Ethernet { + identity ethernet { base layer-protocol; } - identity MPLS { + identity mpls { base layer-protocol; } - identity ODU2 { + identity odu2 { base layer-protocol; } - identity IPv4 { + identity ipv4 { base layer-protocol; } - identity IPv6 { + identity ipv6 { base layer-protocol; } - identity Pseudo-Wire { + identity pseudo-wire { base layer-protocol; } @@ -177,6 +177,69 @@ submodule etsi-nfv-common { base cp-role; } + identity checksum-algorithm { + description + "Identifies the algorithms supported for the purpose of + calculating the checksum."; + reference + "GS NFV IFA011: Section 7.1.6.10 Checksum information element."; + } + + identity sha-224 { + base checksum-algorithm; + description + "SHA-224."; + reference + "GS NFV IFA011: Section 7.1.6.10 Checksum information element."; + } + + identity sha-256 { + base checksum-algorithm; + description + "SHA-256."; + reference + "GS NFV IFA011: Section 7.1.6.10 Checksum information element."; + } + + identity sha-384 { + base checksum-algorithm; + description + "SHA-384."; + reference + "GS NFV IFA011: Section 7.1.6.10 Checksum information element."; + } + + identity sha-512 { + base checksum-algorithm; + description + "SHA-512."; + reference + "GS NFV IFA011: Section 7.1.6.10 Checksum information element."; + } + + identity storage-type { + description + "Base type of storage that identities can derive from."; + } + + identity root-storage { + base storage-type; + description + "Root type of storage."; + } + + identity swap-storage { + base storage-type; + description + "Swap type of storage."; + } + + identity ephemeral-storage { + base storage-type; + description + "Ephemeral type of storage."; + } + /* * Typedefs */ @@ -257,13 +320,13 @@ submodule etsi-nfv-common { key "protocol"; leaf protocol { - type identityref { - base layer-protocol; - } + type identityref { + base layer-protocol; + } } description - "Identifies the protocol this VL gives access to (Ethernet, - MPLS, ODU2, IPV4, IPV6, Pseudo-Wire).The top layer + "Identifies the protocols that the VL uses (Ethernet, + MPLS, ODU2, IPV4, IPV6, Pseudo-Wire). The top layer protocol of the VL protocol stack shall always be provided. The lower layer protocols may be included when there are specific requirements on these layers."; @@ -392,7 +455,7 @@ submodule etsi-nfv-common { } leaf-list layer-protocol { - default Ethernet; + default ethernet; type identityref { base layer-protocol; } diff --git a/src/yang/etsi-nfv.yang b/src/yang/etsi-nfv-descriptors.yang similarity index 86% rename from src/yang/etsi-nfv.yang rename to src/yang/etsi-nfv-descriptors.yang index 96d0db1afe03b81d01fd56e05d7021246ca3dcea..d6421299979a409fc26e768e82e031d1ff957132 100644 --- a/src/yang/etsi-nfv.yang +++ b/src/yang/etsi-nfv-descriptors.yang @@ -1,6 +1,6 @@ -module etsi-nfv { +module etsi-nfv-descriptors { yang-version 1.1; - namespace "urn:etsi:params:xml:ns:yang:etsi-nfv"; + namespace "urn:etsi:nfv:yang:etsi-nfv-descriptors"; prefix nfv; include etsi-nfv-common; diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index de25c3808cc750e8be662cf5f38f42da79918753..483b2460c7a5a89462187be61d197046dcd08e8b 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -1,6 +1,6 @@ submodule etsi-nfv-ns { yang-version 1.1; - belongs-to etsi-nfv { + belongs-to etsi-nfv-descriptors { prefix nfv; } @@ -15,10 +15,10 @@ submodule etsi-nfv-ns { description "Initial revision Common data structure to support NSD according to: - ETSI GS NFV-IFA 011 Ed261v252"; + ETSI GS NFV-IFA 014 Ed261v252"; reference - "ETSI GS NFV-IFA 011 Ed261v252"; + "ETSI GS NFV-IFA 014 Ed261v252"; } grouping resource-handle { @@ -146,63 +146,66 @@ submodule etsi-nfv-ns { "GS NFV IFA014: Section 6.2.3.2 Sapd information element"; } - leaf virtual-link-desc { - type leafref { - path "../../virtual-link-desc/id"; + choice cpd-or-virtual-link { + leaf virtual-link-desc { + type leafref { + path "../../virtual-link-desc/id"; + } + description + "References the descriptor of the NS VL instance to + which the SAP instantiated from this SAPD connects to."; + reference + "GS NFV IFA014: Section 6.2.3.2 Sapd information element"; } - description - "References the descriptor of the NS VL instance to - which the SAP instantiated from this SAPD connects to."; - reference - "GS NFV IFA014: Section 6.2.3.2 Sapd information element"; - } - choice associated-cpd-id { - container vnf { - leaf vnfd-id { - mandatory true; - type leafref { - path "../../../../nfv:vnfd/nfv:id"; + choice associated-cpd-id { + container vnf { + leaf vnfd-id { + mandatory true; + type leafref { + path "../../../../nfv:vnfd/nfv:id"; + } + must "boolean(../../../vnfd-id[.=current()])"; } - must "boolean(../../../vnfd-id[.=current()])"; - } - leaf ext-cpd-id { - mandatory true; - type leafref { - path "deref(../vnfd-id)/../nfv:ext-cpd/nfv:id"; + leaf ext-cpd-id { + mandatory true; + type leafref { + path "deref(../vnfd-id)/../nfv:ext-cpd/nfv:id"; + } } } - } - container pnf { - leaf pnfd-id { - mandatory true; + + container pnf { + leaf pnfd-id { + mandatory true; type leafref { - path "../../../../nfv:pnfd/nfv:id"; + path "../../../../nfv:pnfd/nfv:id"; + } + must "boolean(../pnfd-id[.=current()])"; } - must "boolean(../pnfd-id[.=current()])"; - } - leaf ext-cpd-id { - mandatory true; - type leafref { - path "deref(../pnfd-id)/../nfv:ext-cpd/nfv:id"; + leaf ext-cpd-id { + mandatory true; + type leafref { + path "deref(../pnfd-id)/../nfv:ext-cpd/nfv:id"; + } } } - } - container ns { - leaf nsd-id { - mandatory true; - type leafref { - path "../../../../nfv:nsd/nfv:id"; + container ns { + leaf nsd-id { + mandatory true; + type leafref { + path "../../../../nfv:nsd/nfv:id"; + } + must "boolean(../nsd-id[.=current()])"; } - must "boolean(../nsd-id[.=current()])"; - } - leaf ext-cpd-id { - mandatory true; - type leafref { - path "deref(../nsd-id)/../nfv:sapd/nfv:id"; + leaf ext-cpd-id { + mandatory true; + type leafref { + path "deref(../nsd-id)/../nfv:sapd/nfv:id"; + } } } } @@ -494,7 +497,7 @@ submodule etsi-nfv-ns { container ns { leaf nsd-id { must ". = deref(../../nested-ns-profile-id)/" + - "../nsd-id" { + "../nsd-id" { } type leafref { @@ -754,7 +757,7 @@ submodule etsi-nfv-ns { } leaf min-number-of-instances { - mandatory true; + default 1; type uint16; description "Minimum number of instances of the VNF based on this @@ -765,7 +768,7 @@ submodule etsi-nfv-ns { } leaf max-number-of-instances { - mandatory true; + default 1; type uint16; description "Maximum number of instances of the VNF based on this @@ -1178,7 +1181,7 @@ submodule etsi-nfv-ns { } leaf number-of-instances { - mandatory true; + default 1; type uint32; description "Specifies the number of VNF instances required for @@ -1238,7 +1241,7 @@ submodule etsi-nfv-ns { } leaf number-of-instances { - mandatory true; + default 1; type uint32; description "Specifies the number of nested NS instances required @@ -1345,7 +1348,7 @@ submodule etsi-nfv-ns { leaf min-number-of-instances { type uint16; - mandatory true; + default 1; description "Minimum number of nested NS instances based on the referenced NSD that is permitted to exist for this @@ -1356,7 +1359,7 @@ submodule etsi-nfv-ns { } leaf max-number-of-instances { type uint16; - mandatory true; + default 1; description "Maximum number of nested NS instances based on the referenced NSD that is permitted to exist for this diff --git a/src/yang/etsi-nfv-pnf.yang b/src/yang/etsi-nfv-pnf.yang index ae7ef81fd3c4659ed7555fcc33202a7355113396..48499039c3757431b4ed89d5a83bccc246d73d3e 100644 --- a/src/yang/etsi-nfv-pnf.yang +++ b/src/yang/etsi-nfv-pnf.yang @@ -1,6 +1,6 @@ submodule etsi-nfv-pnf { yang-version 1.1; - belongs-to etsi-nfv { + belongs-to etsi-nfv-descriptors { prefix nfv; } diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 7f653da38363f5ba4e1aee5cdd12e8019f88790d..38ab691f29d74a2a0743ce52fde76ae1c6f22f4b 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -1,6 +1,6 @@ submodule etsi-nfv-vnf { yang-version 1.1; - belongs-to etsi-nfv { + belongs-to etsi-nfv-descriptors { prefix nfv; } @@ -16,15 +16,15 @@ submodule etsi-nfv-vnf { description "Models for VNFD according to GS NFV-IFA 011."; - revision 2018-06-19 { + revision 2019-03-18 { description "Initial revision. Common data structure to support VNFD according to: - VNFD according to ETSI GS NFV-IFA 011 Ed251v243"; + VNFD according to ETSI GS NFV-IFA 011 Ed261v254"; reference - "ETSI GS NFV-IFA 011 Ed251v243"; + "ETSI GS NFV-IFA 011 Ed261v254"; } grouping virtual-network-interface-requirements { @@ -56,7 +56,7 @@ submodule etsi-nfv-vnf { } leaf support-mandatory { - mandatory true; + default "false"; type boolean; description "Indicates whether fulfilling the constraint is @@ -70,6 +70,7 @@ submodule etsi-nfv-vnf { list network-interface-requirements { key "key"; min-elements "1"; + max-elements "1"; leaf key { type string; @@ -88,7 +89,7 @@ submodule etsi-nfv-vnf { leaf nicio-requirements { type leafref { - path "/nfv/vnfd/virtual-compute-descriptor/id"; + path "/nfv/vnfd/virtual-compute-desc/id"; } description "This references (couples) the CPD with any logical node I/O @@ -290,10 +291,9 @@ submodule etsi-nfv-vnf { } leaf virtual-compute-desc { type leafref { - path "../../nfv:virtual-compute-descriptor/" + - "nfv:id"; + path "../../nfv:virtual-compute-desc/nfv:id"; } - must "../../nfv:virtual-compute-descriptor[id=current()]/" + + must "../../nfv:virtual-compute-desc[id=current()]/" + "nfv:virtual-memory/size >=" + "../../nfv:sw-image-desc[id=current()/" + "../sw-image-desc]/min-ram" { @@ -394,14 +394,8 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.7, VnfcConfigurableProperties Information element."; } - list boot-data { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } + leaf boot-data { + type string; description "Contains a string or a URL to a file contained in the VNF package used to customize a virtualised compute @@ -414,7 +408,7 @@ submodule etsi-nfv-vnf { } } - list virtual-compute-descriptor { + list virtual-compute-desc { key "id"; description "Defines descriptors of virtual compute resources to be @@ -623,7 +617,7 @@ submodule etsi-nfv-vnf { type uint16 { range "1..max"; } - mandatory true; + default 1; description "Number of virtual CPUs."; reference @@ -733,12 +727,10 @@ submodule etsi-nfv-vnf { leaf type-of-storage { // Needed to be able to onboard images - type enumeration { - enum "root"; - enum "swap"; - enum "ephemeral"; - } - mandatory true; + default "root-storage"; + type identityref { + base storage-type; + } description "Type of virtualised storage resource (e.g. volume, object)."; @@ -812,6 +804,7 @@ submodule etsi-nfv-vnf { information element"; } leaf name { + mandatory true; type string; description "The name of this software image."; @@ -819,7 +812,9 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5 SwImageDesc information element."; } + leaf version { + mandatory true; type string; description "The version of this software image."; @@ -827,16 +822,42 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5 SwImageDesc information element."; } - leaf checksum { - type string; + + container checksum { + + leaf algorithm { + mandatory true; + type identityref { + base checksum-algorithm; + } + description + "Species the algorithm used to obtain the checksum + value."; + reference + "GS NFV IFA011: Section 7.1.6.10 ChecksumData + information element."; + } + + leaf hash { + mandatory true; + type string; + description + "Contains the result of applying the algorithm + indicated by the algorithm attribute to the data to + which this ChecksumData refers."; + reference + "GS NFV IFA011: Section 7.1.6.10 ChecksumData + information element."; + } description "The checksum of the software image file."; reference "GS NFV IFA011: Section 7.1.6.5 SwImageDesc information element."; } + leaf container-format { - mandatory true; + default "bare"; type enumeration { enum "aki" { description @@ -875,8 +896,9 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5 SwImageDesc information element."; } + leaf disk-format { - mandatory true; + default "qcow2"; type enumeration { enum "aki" { description @@ -933,6 +955,7 @@ submodule etsi-nfv-vnf { "The disk format of a software image is the format of the underlying disk image."; } + leaf min-disk { type uint64; units "GB"; @@ -947,6 +970,7 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5, SwImageDesc information element."; } + leaf min-ram { type decimal64 { fraction-digits 1; @@ -964,7 +988,9 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5, SwImageDesc information element."; } + leaf size { + mandatory true; type uint64; units "GB"; description @@ -973,8 +999,9 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5, SwImageDesc information element."; } + leaf image { - mandatory true; + default "."; type inet:uri; description "This is a reference to the actual software image. @@ -984,6 +1011,7 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5, SwImageDesc information element."; } + leaf operating-system { type string; description @@ -994,6 +1022,7 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5, SwImageDesc information element."; } + leaf-list supported-virtualization-environment { type string; description @@ -1149,9 +1178,9 @@ submodule etsi-nfv-vnf { } } leaf cpd { - type leafref { - path "deref(../vdu-id)/../int-cpd/id"; - } + type leafref { + path "deref(../vdu-id)/../int-cpd/id"; + } } } } @@ -1204,7 +1233,7 @@ submodule etsi-nfv-vnf { } leaf min-number-of-instances { type uint16; - mandatory true; + default 1; description "Minimum number of instances of the VNFC based on this VDU that is permitted to exist for this flavour."; @@ -1214,15 +1243,17 @@ submodule etsi-nfv-vnf { } leaf max-number-of-instances { type uint16; - mandatory true; + default 1; must ". >= ../nfv:min-number-of-instances"; reference "GS NFV IFA011: Section 7.1.8.3, VduProfile information element."; } uses local-affinity-or-anti-affinity-rule; + list affinity-or-anti-affinity-group { key "id"; + description "Identifier(s) of the affinity or anti-affinity group(s) the VDU belongs to."; @@ -1242,29 +1273,9 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.8.12, AffinityOrAntiAffinity information element."; } - leaf type { - type enumeration { - enum affinity; - enum anti-affinity; - } - description - "Specifies whether the rule is an affinity rule or an - anti-affinity rule."; - reference - "GS NFV IFA011: Section 7.1.8.12, AffinityOrAntiAffinity - information element."; - } - leaf scope { - type affinity-scope; - description - "Specifies the scope of the rule, possible values are - 'NFVI-PoP', 'Zone', 'ZoneGroup', 'NFVI-node'"; - reference - "GS NFV IFA011: Section 7.1.8.12, AffinityOrAntiAffinity - information element."; - } } } + list virtual-link-profile { key "id flavour"; description @@ -1592,7 +1603,7 @@ submodule etsi-nfv-vnf { information element"; } list vdu-level { - key "id"; + key "vdu-id"; min-elements 1; description "Sets the number of instances for the VDU in this @@ -1600,7 +1611,8 @@ submodule etsi-nfv-vnf { reference "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel information element"; - leaf id { + + leaf vdu-id { type leafref { path "../../../../nfv:vdu/nfv:id"; } @@ -1613,12 +1625,12 @@ submodule etsi-nfv-vnf { leaf number-of-instances { type uint16; must ". <= ../../../../nfv:df/" + - "nfv:vdu-profile[id=current()/../nfv:id]/" + + "nfv:vdu-profile[id=current()/../nfv:vdu-id]/" + "nfv:max-number-of-instances"; must ". >= ../../../../nfv:df/" + - "nfv:vdu-profile[id=current()/../nfv:id]/" + + "nfv:vdu-profile[id=current()/../nfv:vdu-id]/" + "nfv:min-number-of-instances"; - mandatory true; + default 1; description "Number of instances of VNFC based on this VDU to deploy for this level."; @@ -1628,7 +1640,7 @@ submodule etsi-nfv-vnf { } } list scaling-info { - key "id"; + key "scaling-aspect-id"; description "The InstantiationLevel information element describes a given level of resources to be instantiated within a @@ -1637,7 +1649,8 @@ submodule etsi-nfv-vnf { reference "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel information element"; - leaf id { + + leaf scaling-aspect-id { type leafref { path "../../../nfv:scaling-aspect/nfv:id"; } @@ -1803,6 +1816,7 @@ submodule etsi-nfv-vnf { list parameter { key "key"; + leaf key { type string; } @@ -2037,6 +2051,118 @@ submodule etsi-nfv-vnf { AffinityOrAntiAffinityGroup information element"; } } + + list indicator { + key "id"; + + leaf id { + type string; + description + "Unique identifier."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + leaf name { + type string; + description + "The human readable name of the VnfIndicator."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + leaf indicator-value { + type string; + description + "Defines the allowed values or value ranges of this + indicator."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + leaf source { + type enumeration { + enum vnf; + enum em; + enum both; + } + description + "Describe the source of the indicator. The possible + values are: + • VNF. + • EM. + • Both. + + This tells the consumer where to send the subscription + request."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + description + "Declares the VNF indicators that are supported by this + VNF (specific to this DF)."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + } + + list supported-vnf-interfaces { + key "name"; + + leaf name { + type enumeration { + enum vnf-configuration; + enum vnf-indicator; + } + description + "Identifies an interface produced by the VNF. Valid + values: + - VNF_CONFIGURATION + - VNF_INDICATOR"; + reference + "GS NFV IFA011: Section 7.1.8.16 VnfInterfaceDetails + information element"; + } + + leaf-list cpd-id { + type leafref { + path "../../../ext-cpd/id"; + } + description + "References one or more CPDs from which to instantiate + external CPs through which interface endpoints on the + VNF side can be reached by the VNFM."; + reference + "GS NFV IFA011: Section 7.1.8.16 VnfInterfaceDetails + information element"; + } + + list interface-details { + key "key"; + + leaf key { + type string; + } + + leaf value { + type string; + } + } + + description + "Indicates which interfaces the VNF produces and provides + additional details on how to access the interface + endpoints."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + } + list monitoring-parameter { key "id"; @@ -2307,7 +2433,23 @@ submodule etsi-nfv-vnf { leaf-list extension { type string; description - "'Extension' attributes of VnfInfo that are writeable."; + "Additional VNF-specific attributes of VnfInfo that + affect the lifecycle management of a VNF instance and + that are writeable. + + For each VNF instance, these attributes are stored + persistently by the VNFM and can be queried and + modified through the VNFM. + + These attributes are intended to be consumed by the + VNFM or by the lifecycle management scripts during the + execution of VNF lifecycle management operations. + + Modifying these values has no direct effect on the VNF + instance; however, modified values can be considered + during subsequent VNF lifecycle management operations, + which means that the modified values can indirectly + affect the configuration of the VNF instance."; reference "GS NFV IFA011: Section 7.1.14 VnfInfoModifiableAttributes information element"; @@ -2315,7 +2457,22 @@ submodule etsi-nfv-vnf { leaf-list metadata { type string; description - "'Metadata' attributes of VnfInfo that are writeable."; + "Additional VNF-specific attributes of VnfInfo that are + writeable and that provide metadata describing the VNF + instance. + + For each VNF instance, these attributes are stored + persistently by the VNFM and can be queried and modified + through the VNFM. + + These attributes are intended to provide information to + functional blocks external to the VNFM and will not be + used by the VNFM or the VNF lifecycle management + scripts when executing lifecycle management operations. + + Modifying these attributes has no effect on the VNF + instance. It only affects the attribute values stored by + the VNFM."; reference "GS NFV IFA011: Section 7.1.14 VnfInfoModifiableAttributes information element"; @@ -2323,14 +2480,20 @@ submodule etsi-nfv-vnf { } list lifecycle-management-script { - key "event"; + key "id"; description "Includes a list of events and corresponding management scripts performed for the VNF."; reference "GS NFV IFA011: Section 7.1.2 VNFD information element"; - leaf event { + leaf id { + type string; + description + "A unique string that identfies the script in question."; + } + + leaf-list event { type internal-lifecycle-management-script-event; description "Describes VNF lifecycle event(s) or an external stimulus @@ -2355,7 +2518,10 @@ submodule etsi-nfv-vnf { "Includes a VNF LCM script (e.g. written in a DSL as specified in requirement VNF_PACK.LCM.001) triggered to react to one of the events listed in the event - attribute."; + attribute. + + The string value specified here is a path to a file in + the VNF package."; reference "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript information element";