Commit 274080a4 authored by Mahesh Jethanandani's avatar Mahesh Jethanandani

The models finally compile.

parent 82f542ca
Pipeline #775 failed with stage
in 0 seconds
<pkg xmlns="urn:etsi:nfv:yang:etsi-nfv-pkg">
<id>ASA</id>
<provider>My Company</provider>
<product-name>My Company ASAv</product-name>
<software-version>9.8</software-version>
<version>9.8</version>
<vnfm-info>My Company Vnfm</vnfm-info>
<vdu>
<id>firewall</id>
<name>Firewall VDU</name>
<int-cpd>
<id>inside</id>
<layer-protocol xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:ethernet</layer-protocol>
</int-cpd>
<int-cpd>
<id>management</id>
<layer-protocol xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:ethernet</layer-protocol>
</int-cpd>
<int-cpd>
<id>outside</id>
<layer-protocol xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:ethernet</layer-protocol>
</int-cpd>
<virtual-compute-desc>asa-vcd</virtual-compute-desc>
<virtual-storage-desc>asa-vsd</virtual-storage-desc>
<sw-image-desc>asa-image</sw-image-desc>
</vdu>
<virtual-compute-desc>
<id>asa-vcd</id>
<virtual-memory>
<size>4.0</size>
</virtual-memory>
<virtual-cpu>
<num-virtual-cpu>2</num-virtual-cpu>
</virtual-cpu>
</virtual-compute-desc>
<virtual-storage-desc>
<id>asa-vsd</id>
<type-of-storage xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:root-storage</type-of-storage>
<size-of-storage>0</size-of-storage>
</virtual-storage-desc>
<sw-image-desc>
<id>asa-image</id>
<name>ASA image</name>
<version>1.1</version>
<checksum>
<algorithm xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:sha-224</algorithm>
<hash>deadbeef</hash>
</checksum>
<container-format>bare</container-format>
<disk-format>qcow2</disk-format>
<min-ram>2.0</min-ram>
<size>1</size>
<image>http://www.cisco.com/asa.qcow2</image>
</sw-image-desc>
<ext-cpd>
<id>inside</id>
<layer-protocol xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:ethernet</layer-protocol>
</ext-cpd>
<ext-cpd>
<id>management</id>
<layer-protocol xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:ethernet</layer-protocol>
</ext-cpd>
<ext-cpd>
<id>outside</id>
<layer-protocol xmlns:nfv="urn:etsi:nfv:yang:etsi-nfv-descriptors">nfv:ethernet</layer-protocol>
</ext-cpd>
<df>
<id>normal</id>
<vdu-profile>
<id>firewall</id>
<min-number-of-instances>1</min-number-of-instances>
<max-number-of-instances>2</max-number-of-instances>
</vdu-profile>
<instantiation-level>
<id>double</id>
<vdu-level>
<vdu-id>firewall</vdu-id>
<number-of-instances>2</number-of-instances>
</vdu-level>
</instantiation-level>
<instantiation-level>
<id>single</id>
<vdu-level>
<vdu-id>firewall</vdu-id>
<number-of-instances>1</number-of-instances>
</vdu-level>
</instantiation-level>
<default-instantiation-level>single</default-instantiation-level>
</df>
</pkg>
...@@ -34,11 +34,11 @@ ...@@ -34,11 +34,11 @@
<num-virtual-cpu>2</num-virtual-cpu> <num-virtual-cpu>2</num-virtual-cpu>
</virtual-cpu> </virtual-cpu>
</virtual-compute-desc> </virtual-compute-desc>
<virtual-storage-descriptor> <virtual-storage-desc>
<id>asa-vsd</id> <id>asa-vsd</id>
<type-of-storage>root-storage</type-of-storage> <type-of-storage>root-storage</type-of-storage>
<size-of-storage>0</size-of-storage> <size-of-storage>0</size-of-storage>
</virtual-storage-descriptor> </virtual-storage-desc>
<sw-image-desc> <sw-image-desc>
<id>asa-image</id> <id>asa-image</id>
<name>ASA image</name> <name>ASA image</name>
...@@ -136,11 +136,11 @@ ...@@ -136,11 +136,11 @@
<num-virtual-cpu>2</num-virtual-cpu> <num-virtual-cpu>2</num-virtual-cpu>
</virtual-cpu> </virtual-cpu>
</virtual-compute-desc> </virtual-compute-desc>
<virtual-storage-descriptor> <virtual-storage-desc>
<id>csr-vsd</id> <id>csr-vsd</id>
<type-of-storage>root-storage</type-of-storage> <type-of-storage>root-storage</type-of-storage>
<size-of-storage>0</size-of-storage> <size-of-storage>0</size-of-storage>
</virtual-storage-descriptor> </virtual-storage-desc>
<sw-image-desc> <sw-image-desc>
<id>csr-image</id> <id>csr-image</id>
<name>CSR image</name> <name>CSR image</name>
...@@ -256,9 +256,7 @@ ...@@ -256,9 +256,7 @@
<virtual-link-desc> <virtual-link-desc>
<id>fw2dpi</id> <id>fw2dpi</id>
<connectivity-type> <connectivity-type>
<layer-protocol> <layer-protocol>ethernet</layer-protocol>
<protocol>ethernet</protocol>
</layer-protocol>
</connectivity-type> </connectivity-type>
<df> <df>
<id>normal</id> <id>normal</id>
...@@ -271,9 +269,7 @@ ...@@ -271,9 +269,7 @@
<virtual-link-desc> <virtual-link-desc>
<id>mgmt</id> <id>mgmt</id>
<connectivity-type> <connectivity-type>
<layer-protocol> <layer-protocol>ipv4</layer-protocol>
<protocol>ipv4</protocol>
</layer-protocol>
</connectivity-type> </connectivity-type>
<df> <df>
<id>normal</id> <id>normal</id>
...@@ -286,9 +282,7 @@ ...@@ -286,9 +282,7 @@
<virtual-link-desc> <virtual-link-desc>
<id>r2fw</id> <id>r2fw</id>
<connectivity-type> <connectivity-type>
<layer-protocol> <layer-protocol>ethernet</layer-protocol>
<protocol>ethernet</protocol>
</layer-protocol>
</connectivity-type> </connectivity-type>
<df> <df>
<id>normal</id> <id>normal</id>
...@@ -511,9 +505,7 @@ ...@@ -511,9 +505,7 @@
<virtual-link-desc> <virtual-link-desc>
<id>r2fw</id> <id>r2fw</id>
<connectivity-type> <connectivity-type>
<layer-protocol> <layer-protocol>ipv4</layer-protocol>
<protocol>ipv4</protocol>
</layer-protocol>
</connectivity-type> </connectivity-type>
<df> <df>
<id>r2fw</id> <id>r2fw</id>
......
...@@ -7,17 +7,24 @@ set -e ...@@ -7,17 +7,24 @@ set -e
source /opt/confd/confdrc source /opt/confd/confdrc
cd src cd src
echo "Testing compilation"
CONFD_OPTS="--fail-on-warnings" CONFD_OPTS="--fail-on-warnings"
CONFD_OPTS="" CONFD_OPTS=""
echo "Testing compilations of pkg."
confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-pkg.fxs etsi-nfv-pkg.yang
echo "Testing compilations of descriptors."
confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-descriptors.fxs etsi-nfv-descriptors.yang confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-descriptors.fxs etsi-nfv-descriptors.yang
echo "Starting ConfD" echo "Starting ConfD"
confd confd
echo "Loading Data" echo "Loading Data for pkg"
confd_load -l -m nfv-vnf-pkg.xml
echo "Loading Data for descriptors"
confd_load -l -m nfv.xml confd_load -l -m nfv.xml
# Don't do this in the actual test, just waste of cycles # Don't do this in the actual test, just waste of cycles
# echo "Stopping ConfD" # echo "Stopping ConfD"
# confd --stop # confd --stop
...@@ -3,6 +3,9 @@ submodule etsi-nfv-common { ...@@ -3,6 +3,9 @@ submodule etsi-nfv-common {
belongs-to etsi-nfv-descriptors { belongs-to etsi-nfv-descriptors {
prefix nfv; prefix nfv;
} }
organization
"European Telecommunications Standards Institute (ETSI)";
description description
"Common data types for ETSI data models."; "Common data types for ETSI data models.";
...@@ -316,14 +319,10 @@ submodule etsi-nfv-common { ...@@ -316,14 +319,10 @@ submodule etsi-nfv-common {
grouping connectivity-type { grouping connectivity-type {
container connectivity-type { container connectivity-type {
list layer-protocol { leaf-list layer-protocol {
key "protocol";
leaf protocol {
type identityref { type identityref {
base layer-protocol; base layer-protocol;
} }
}
description description
"Identifies the protocols that the VL uses (Ethernet, "Identifies the protocols that the VL uses (Ethernet,
MPLS, ODU2, IPV4, IPV6, Pseudo-Wire). The top layer MPLS, ODU2, IPV4, IPV6, Pseudo-Wire). The top layer
...@@ -634,17 +633,6 @@ submodule etsi-nfv-common { ...@@ -634,17 +633,6 @@ submodule etsi-nfv-common {
reference reference
"GS NFV IFA011: Section 7.1.6.3 Cpd information element"; "GS NFV IFA011: Section 7.1.6.3 Cpd information element";
} }
leaf security-group-rule-id {
type leafref {
path "/nfv/vnfd/security-group-rule/id";
}
description
"Reference of the security group rules bound to this
CPD.";
reference
"GS NFV IFA011: Section 7.1.6.3 Cpd information element";
}
} }
grouping security-group-rule { grouping security-group-rule {
......
...@@ -22,7 +22,19 @@ module etsi-nfv-descriptors { ...@@ -22,7 +22,19 @@ module etsi-nfv-descriptors {
} }
container nfv { container nfv {
list vnfd {
key "id";
description
"A VNF Descriptor (VNFD) is a deployment template which
describes a VNF in terms of deployment and operational
behaviour requirements. It also contains connectivity,
interface and virtualised resource requirements";
reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element";
uses vnfd; uses vnfd;
}
uses nsd; uses nsd;
uses pnfd; uses pnfd;
} }
......
...@@ -86,35 +86,10 @@ submodule etsi-nfv-vnf { ...@@ -86,35 +86,10 @@ submodule etsi-nfv-vnf {
"GS NFV-IFA011: Section 7.1.6.6, "GS NFV-IFA011: Section 7.1.6.6,
VirtualNetworkInterfaceRequirements information element"; VirtualNetworkInterfaceRequirements information element";
} }
leaf nicio-requirements {
type leafref {
path "/nfv/vnfd/virtual-compute-desc/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 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 vnfd { grouping vnfd {
list vnfd {
key "id";
description
"A VNF Descriptor (VNFD) is a deployment template which
describes a VNF in terms of deployment and operational
behaviour requirements. It also contains connectivity,
interface and virtualised resource requirements";
reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element";
leaf id { leaf id {
type string; type string;
description description
...@@ -124,6 +99,7 @@ submodule etsi-nfv-vnf { ...@@ -124,6 +99,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf provider { leaf provider {
type string; type string;
mandatory true; mandatory true;
...@@ -132,6 +108,7 @@ submodule etsi-nfv-vnf { ...@@ -132,6 +108,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf product-name { leaf product-name {
type string; type string;
mandatory true; mandatory true;
...@@ -141,6 +118,7 @@ submodule etsi-nfv-vnf { ...@@ -141,6 +118,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf software-version { leaf software-version {
type string; type string;
mandatory true; mandatory true;
...@@ -151,6 +129,7 @@ submodule etsi-nfv-vnf { ...@@ -151,6 +129,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf version { leaf version {
type string; type string;
mandatory true; mandatory true;
...@@ -159,6 +138,7 @@ submodule etsi-nfv-vnf { ...@@ -159,6 +138,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf product-info-name { leaf product-info-name {
type string; type string;
description description
...@@ -167,6 +147,7 @@ submodule etsi-nfv-vnf { ...@@ -167,6 +147,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf product-info-description { leaf product-info-description {
type string; type string;
description description
...@@ -175,6 +156,7 @@ submodule etsi-nfv-vnf { ...@@ -175,6 +156,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf-list vnfm-info { leaf-list vnfm-info {
type string; type string;
min-elements 1; min-elements 1;
...@@ -184,6 +166,7 @@ submodule etsi-nfv-vnf { ...@@ -184,6 +166,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf localization-language { leaf localization-language {
type string; type string;
description description
...@@ -191,6 +174,7 @@ submodule etsi-nfv-vnf { ...@@ -191,6 +174,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV-IFA011: Section 7.1.2, VNFD information element"; "GS NFV-IFA011: Section 7.1.2, VNFD information element";
} }
leaf default-localization-language { leaf default-localization-language {
when "../localization-language"; when "../localization-language";
type string; type string;
...@@ -213,6 +197,7 @@ submodule etsi-nfv-vnf { ...@@ -213,6 +197,7 @@ submodule etsi-nfv-vnf {
components."; components.";
reference reference
"GS NFV IFA011: Section 7.1.2, VNFD information element"; "GS NFV IFA011: Section 7.1.2, VNFD information element";
leaf id { leaf id {
type string; type string;
description description
...@@ -220,6 +205,7 @@ submodule etsi-nfv-vnf { ...@@ -220,6 +205,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV IFA011: Section 7.1.6.2, Vdu information element"; "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
} }
leaf name { leaf name {
type string; type string;
mandatory true; mandatory true;
...@@ -228,6 +214,7 @@ submodule etsi-nfv-vnf { ...@@ -228,6 +214,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV IFA011: Section 7.1.6.2, Vdu information element"; "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
} }
leaf description { leaf description {
type string; type string;
description description
...@@ -235,6 +222,7 @@ submodule etsi-nfv-vnf { ...@@ -235,6 +222,7 @@ submodule etsi-nfv-vnf {
reference reference
"GS NFV IFA011: Section 7.1.6.2, Vdu information element"; "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
} }
list int-cpd { list int-cpd {
key "id"; key "id";
min-elements 1; min-elements 1;
...@@ -248,7 +236,7 @@ submodule etsi-nfv-vnf { ...@@ -248,7 +236,7 @@ submodule etsi-nfv-vnf {
leaf int-virtual-link-desc { leaf int-virtual-link-desc {
type leafref { type leafref {
path "../../../nfv:int-virtual-link-desc/nfv:id"; path "../../../int-virtual-link-desc/id";
} }
description description
"Reference of the internal VLD which this internal CPD "Reference of the internal VLD which this internal CPD
...@@ -268,6 +256,23 @@ submodule etsi-nfv-vnf { ...@@ -268,6 +256,23 @@ submodule etsi-nfv-vnf {
element."; element.";
} }
uses virtual-network-interface-requirements; uses virtual-network-interface-requirements;
leaf nicio-requirements {
type leafref {
path "../../../virtual-compute-desc/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 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";
}
leaf-list order { leaf-list order {
type uint32; type uint32;
description description
...@@ -288,14 +293,26 @@ submodule etsi-nfv-vnf { ...@@ -288,14 +293,26 @@ submodule etsi-nfv-vnf {
element."; element.";
} }
uses cpd; uses cpd;
leaf security-group-rule-id {
type leafref {
path "../../../security-group-rule/id";
}
description
"Reference of the security group rules bound to this
CPD.";
reference
"GS NFV IFA011: Section 7.1.6.3 Cpd information element";
}
} }
leaf virtual-compute-desc { leaf virtual-compute-desc {
type leafref { type leafref {
path "../../nfv:virtual-compute-desc/nfv:id"; path "../../virtual-compute-desc/id";
} }
must "../../nfv:virtual-compute-desc[id=current()]/" + must "../../virtual-compute-desc[id=current()]/" +
"nfv:virtual-memory/size >=" + "virtual-memory/size >=" +
"../../nfv:sw-image-desc[id=current()/" + "../../sw-image-desc[id=current()/" +
"../sw-image-desc]/min-ram" { "../sw-image-desc]/min-ram" {
} }
description description
...@@ -309,8 +326,7 @@ submodule etsi-nfv-vnf { ...@@ -309,8 +326,7 @@ submodule etsi-nfv-vnf {
leaf-list virtual-storage-desc { leaf-list virtual-storage-desc {
type leafref { type leafref {
path "../../nfv:virtual-storage-descriptor/" + path "../../virtual-storage-desc/id";
"nfv:id";
} }
description description
"Describes storage requirements for a VirtualStorage "Describes storage requirements for a VirtualStorage
...@@ -321,15 +337,18 @@ submodule etsi-nfv-vnf { ...@@ -321,15 +337,18 @@ submodule etsi-nfv-vnf {
element, and Section 7.1.9.4, Information elements element, and Section 7.1.9.4, Information elements
related to Virtual Storage."; related to Virtual Storage.";
} }
list boot-order { list boot-order {
ordered-by user; ordered-by user;
key "key"; key "key";
leaf key { leaf key {
type uint32; type uint32;
} }
leaf value { leaf value {
type leafref { type leafref {
path "../../nfv:virtual-storage-desc"; path "../../virtual-storage-desc";
} }
} }
description description
...@@ -345,6 +364,7 @@ submodule etsi-nfv-vnf { ...@@ -345,6 +364,7 @@ submodule etsi-nfv-vnf {
"GS NFV IFA011: Section 7.1.6.2, Vdu information "GS NFV IFA011: Section 7.1.6.2, Vdu information
element."; element.";
} }
leaf sw-image-desc { leaf sw-image-desc {
type leafref { type leafref {
path "../../sw-image-desc/id"; path "../../sw-image-desc/id";
...@@ -356,6 +376,7 @@ submodule etsi-nfv-vnf { ...@@ -356,6 +376,7 @@ submodule etsi-nfv-vnf {
"GS NFV IFA011: Section 7.1.6.2, Vdu information "GS NFV IFA011: Section 7.1.6.2, Vdu information
element."; element.";
} }
leaf-list nfvi-constraint { leaf-list nfvi-constraint {
type string; type string;
description description
...@@ -367,6 +388,7 @@ submodule etsi-nfv-vnf { ...@@ -367,6 +388,7 @@ submodule etsi-nfv-vnf {
"GS NFV IFA011: Section 7.1.6.2, VDU Information "GS NFV IFA011: Section 7.1.6.2, VDU Information
element."; element.";
} }
list monitoring-parameter { list monitoring-parameter {
key "id"; key "id";
leaf id { leaf id {
...@@ -379,6 +401,7 @@ submodule etsi-nfv-vnf { ...@@ -379,6 +401,7 @@ submodule etsi-nfv-vnf {
} }
uses monitoring-parameter; uses monitoring-parameter;
} }
list configurable-properties { list configurable-properties {
key "key"; key "key";
leaf key { leaf key {
...@@ -394,6 +417,7 @@ submodule etsi-nfv-vnf { ...@@ -394,6 +417,7 @@ submodule etsi-nfv-vnf {
"GS NFV IFA011: Section 7.1.6.7, "GS NFV IFA011: Section 7.1.6.7,
VnfcConfigurableProperties Information element."; VnfcConfigurableProperties Information element.";
} }
leaf boot-data { leaf boot-data {
type string; type string;
description description
...@@ -441,6 +465,7 @@ submodule etsi-nfv-vnf { ...@@ -441,6 +465,7 @@ submodule etsi-nfv-vnf {
leaf key { leaf key {
type string; type string;
} }
leaf value { leaf value {
type string; type string;
} }
...@@ -468,6 +493,7 @@ submodule etsi-nfv-vnf { ...@@ -468,6 +493,7 @@ submodule etsi-nfv-vnf {
list request-additional-capability { list request-additional-capability {
key "name"; key "name";
leaf name { leaf name {
type string; type string;
description description
...@@ -476,9 +502,9 @@ submodule etsi-nfv-vnf { ...@@ -476,9 +502,9 @@ submodule etsi-nfv-vnf {
capabilities."; capabilities.";
reference reference
"GS NFV IFA011: Section 7.1.9.5, "GS NFV IFA011: Section 7.1.9.5,
RequestedAdditionalCapabilityData Information RequestedAdditionalCapabilityData Information element.";
element.";
} }
leaf support-mandatory { leaf support-mandatory {
type boolean; type boolean;
description description
...@@ -497,8 +523,7 @@ submodule etsi-nfv-vnf { ...@@ -497,8 +523,7 @@ submodule etsi-nfv-vnf {
additional capability."; additional capability.";
reference reference
"GS NFV IFA011: Section 7.1.9.5, "GS NFV IFA011: Section 7.1.9.5,
RequestedAdditionalCapabilityData Information RequestedAdditionalCapabilityData Information element.";
element.";
} }
leaf preferred-version { leaf preferred-version {
...@@ -508,14 +533,16 @@ submodule etsi-nfv-vnf { ...@@ -508,14 +533,16 @@ submodule etsi-nfv-vnf {
additional capability."; additional capability.";
reference reference
"GS NFV IFA011: Section 7.1.9.5, "GS NFV IFA011: Section 7.1.9.5,
RequestedAdditionalCapabilityData Information RequestedAdditionalCapabilityData Information element.";
element.";
} }
list target-performance-parameters { list target-performance-parameters {
key "key"; key "key";
leaf key { leaf key {
type string; type string;
} }
leaf value { leaf value {