feature 9773: support for helm v3
[osm/IM.git] / models / yang / vnfd-base.yang
1 /*
2  *
3  *   Copyright 2017 RIFT.IO Inc
4  *   Copyright 2018-2020 ETSI
5  *
6  *   Licensed under the Apache License, Version 2.0 (the "License");
7  *   you may not use this file except in compliance with the License.
8  *   You may obtain a copy of the License at
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *   Unless required by applicable law or agreed to in writing, software
13  *   distributed under the License is distributed on an "AS IS" BASIS,
14  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *   See the License for the specific language governing permissions and
16  *   limitations under the License.
17  *
18  *
19  */
20
21 module vnfd-base
22 {
23   namespace "urn:etsi:osm:yang:vnfd-base";
24   prefix "vnfd-base";
25
26   import mano-types {
27     prefix "manotypes";
28   }
29
30   import ietf-inet-types {
31     prefix "inet";
32   }
33
34   revision 2017-02-28 {
35     description
36       "Initial revision. This YANG file defines
37        the common types for Virtual Network Function
38        (VNF) descriptor";
39     reference
40       "Derived from earlier versions of base YANG files";
41   }
42
43   grouping common-connection-point {
44     leaf name {
45       description "Name of the connection point";
46       type string;
47     }
48
49     leaf id {
50       description "Identifier for the internal connection points";
51       type string;
52     }
53
54     leaf short-name {
55       description "Short name to appear as label in the UI";
56       type string;
57     }
58
59     leaf type {
60       description "Type of the connection point.";
61       type manotypes:connection-point-type;
62     }
63
64     leaf port-security-enabled {
65       description "Enables the port security for the port.";
66       type boolean;
67       default true;
68     }
69   }
70
71   typedef interface-type {
72     type enumeration {
73       enum INTERNAL;
74       enum EXTERNAL;
75     }
76   }
77
78   typedef vnf-operational-status {
79     type enumeration {
80       enum init;
81       enum running;
82       enum upgrading;
83       enum terminate;
84       enum terminated;
85       enum failed;
86     }
87   }
88
89   grouping virtual-interface {
90     container virtual-interface {
91       description
92           "Container for the virtual interface properties";
93
94       leaf type {
95         description
96             "Specifies the type of virtual interface
97              between VM and host.
98              PARAVIRT        : Use the default paravirtualized interface for the VIM (virtio, vmxnet3, etc.).
99              VIRTIO          : Deprecated! Use the traditional VIRTIO interface.
100              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
101              SR-IOV          : Use SR-IOV interface.
102              E1000           : Emulate E1000 interface.
103              RTL8139         : Emulate RTL8139 interface.
104              PCNET           : Emulate PCNET interface.
105              OM-MGMT         : Deprecated! Use PARAVIRT instead and set the VNF management interface at vnfd:mgmt-interface:cp";
106
107         type enumeration {
108           enum PARAVIRT;
109           enum OM-MGMT;
110           enum PCI-PASSTHROUGH;
111           enum SR-IOV;
112           enum VIRTIO;
113           enum E1000;
114           enum RTL8139;
115           enum PCNET;
116         }
117         default "PARAVIRT";
118       }
119
120       leaf vpci {
121         description
122             "Specifies the virtual PCI address. Expressed in
123              the following format dddd:dd:dd.d. For example
124              0000:00:12.0. This information can be used to
125              pass as metadata during the VM creation.";
126         type string;
127       }
128
129       leaf bandwidth {
130         description
131             "Aggregate bandwidth of the NIC.";
132         type uint64;
133       }
134     }
135   }
136
137   grouping vnfd-descriptor {
138       leaf id {
139         description "Identifier for the VNFD.";
140         type string {
141           length "1..63";
142         }
143       }
144
145       leaf name {
146         description "VNFD name.";
147         mandatory true;
148         type string;
149       }
150
151       leaf short-name {
152         description "Short name to appear as label in the UI";
153         type string;
154       }
155
156       leaf vendor {
157         description "Vendor of the VNFD.";
158         type string;
159       }
160
161       leaf logo {
162         description
163             "Vendor logo for the Virtual Network Function";
164         type string;
165       }
166
167       leaf description {
168         description "Description of the VNFD.";
169         type string;
170       }
171
172       leaf version {
173         description "Version of the VNFD";
174         type string;
175       }
176
177       container vnf-configuration {
178         uses manotypes:vca-configuration;
179         uses manotypes:vca-relations;
180         uses manotypes:vca-config-access;
181       }
182
183       leaf operational-status {
184          description
185            "The operational status of the VNF
186              init                : The VNF has just started.
187              running             : The VNF is active in VM
188              upgrading           : The VNF is being upgraded (EXPERIMENTAL)
189              terminate           : The VNF is being terminated
190              terminated          : The VNF is in the terminated state.
191              failed              : The VNF  instantiation failed.
192            ";
193          type vnf-operational-status;
194       }
195
196       container mgmt-interface {
197         description
198             "Interface over which the VNF is managed.";
199
200         choice endpoint-type {
201           description
202               "Indicates the type of management endpoint.";
203
204           case ip {
205             description
206                 "Specifies the static IP address for managing the VNF.";
207             leaf ip-address {
208               type inet:ip-address;
209             }
210           }
211
212           case vdu-id {
213             description
214                 "Use the default management interface on this VDU.";
215             leaf vdu-id {
216               type leafref {
217                 path "../../vdu/id";
218               }
219             }
220           }
221
222           case cp {
223             description
224                 "Use the ip address associated with this connection point. This cp is then considered as management.";
225             leaf cp {
226               type leafref {
227                 path "../../connection-point/name";
228               }
229             }
230           }
231         }
232
233         leaf port {
234           description
235               "Port for the management interface.";
236           type inet:port-number;
237         }
238
239         container dashboard-params {
240           description "Parameters for the VNF dashboard";
241
242           leaf path {
243             description "The HTTP path for the dashboard";
244             type string;
245           }
246
247           leaf https {
248             description "Pick HTTPS instead of HTTP , Default is false";
249             type boolean;
250           }
251
252           leaf port {
253             description "The HTTP port for the dashboard";
254             type inet:port-number;
255           }
256         }
257       }
258
259       list internal-vld {
260         key "id";
261         description
262           "List of Internal Virtual Link Descriptors (VLD).
263           The internal VLD describes the basic topology of
264           the connectivity such as E-LAN, E-Line, E-Tree.
265           between internal VNF components of the system.";
266
267         leaf id {
268           description "Identifier for the VLD";
269           type string;
270         }
271
272         leaf name {
273           description "Name of the internal VLD";
274           type string;
275         }
276
277         leaf short-name {
278           description "Short name to appear as label in the UI";
279           type string;
280         }
281
282         leaf description {
283           type string;
284         }
285
286         leaf type {
287           type manotypes:virtual-link-type;
288         }
289
290         leaf root-bandwidth {
291           description
292               "For ELAN this is the aggregate bandwidth.";
293           type uint64;
294         }
295
296         leaf leaf-bandwidth {
297           description
298               "For ELAN this is the bandwidth of branches.";
299           type uint64;
300         }
301
302         list internal-connection-point {
303           key "id-ref";
304           description "List of internal connection points in this VLD";
305           leaf id-ref {
306             description "Reference to the internal connection point id";
307             type leafref {
308               path "../../../vdu/internal-connection-point/id";
309             }
310           }
311
312           leaf ip-address {
313             description "IP address of the internal connection point";
314             type inet:ip-address;
315           }
316         }
317
318         uses manotypes:provider-network;
319         choice init-params {
320           description "Extra parameters for VLD instantiation";
321
322           case vim-network-ref {
323             leaf vim-network-name {
324               description
325                   "Name of network in VIM account. This is used to indicate
326                     pre-provisioned network name in cloud account.";
327               type string;
328             }
329           }
330
331           case vim-network-profile {
332             leaf ip-profile-ref {
333               description "Named reference to IP-profile object";
334               type string;
335             }
336           }
337
338         }
339       }
340
341       uses manotypes:ip-profile-list;
342
343       list connection-point {
344         key "name";
345         description
346           "List for external connection points. Each VNF has one
347           or more external connection points that connect the VNF
348           to other VNFs or to external networks. Each VNF exposes
349           connection points to the orchestrator, which can construct
350           network services by connecting the connection points
351           between different VNFs. The NFVO will use VLDs and VNFFGs
352           at the network service level to construct network services.";
353
354         uses common-connection-point;
355
356         leaf internal-vld-ref {
357           description
358             "Reference to an internal VLD of the VNF. This field is
359             optional. It allows exposing an internal VLD through a
360             connection point. When building a NS, this VNF CP might be
361             connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
362             VLD of the NS) will become the same network and the IP profile will
363             be the one configured at NS level.";
364           type leafref {
365             path "../../internal-vld/id";
366           }
367         }
368       }
369
370       list vdu {
371         description "List of Virtual Deployment Units";
372         key "id";
373
374         leaf id {
375           description "Unique id for the VDU";
376           type string;
377         }
378
379         leaf name {
380           description "Unique name for the VDU";
381           type string;
382         }
383
384         leaf description {
385             description "Description of the VDU.";
386             type string;
387         }
388
389         leaf pdu-type {
390           description
391             "Type of PDU. If this field exists, the deployment unit must be
392             understood as a PDU, not as a VDU. This field is used to identify
393             the category of PDU instances to be used at instantiation time. For
394             the instantiation to be successful, there must be available
395             PDU instances of this type in the selected datacenter.";
396           type string;
397         }
398
399         leaf count {
400           description "Number of instances of VDU";
401           type uint64;
402         }
403
404         leaf mgmt-vpci {
405           description
406               "Specifies the virtual PCI address. Expressed in
407              the following format dddd:dd:dd.d. For example
408              0000:00:12.0. This information can be used to
409              pass as metadata during the VM creation.";
410           type string;
411         }
412
413         uses manotypes:vm-flavor;
414         uses manotypes:guest-epa;
415         uses manotypes:vswitch-epa;
416         uses manotypes:hypervisor-epa;
417         uses manotypes:host-epa;
418
419         list alarm {
420           key "alarm-id";
421
422           leaf alarm-id {
423             description
424                   "This field is reserved for the identifier assigned by the VIM provider";
425
426             type string;
427           }
428
429
430           leaf vnf-monitoring-param-ref {
431               description
432                  "Reference to the VNF level monitoring parameter
433                   that is aggregated";
434               type leafref {
435                 path "../../monitoring-param/id";
436               }
437           }
438
439           uses manotypes:alarm-properties;
440         }
441
442         uses manotypes:image-properties;
443
444         list alternative-images {
445           key "vim-type";
446           description
447             "List of alternative images per VIM type.
448             Different images can be used for specific types of VIMs instead
449             of the default image. This allows deployments in sites where the
450             image identifier in the VIM is given by the VIM provider and
451             cannot be modified.
452             If an alternative image is specified for a VIM type, it will prevail
453             over the default image";
454
455           leaf vim-type {
456             description "VIM type: openvim, openstack, vmware, aws, etc.";
457             type string;
458           }
459
460           uses manotypes:image-properties;
461         }
462
463         container vdu-configuration {
464           uses manotypes:vca-configuration;
465           uses manotypes:vca-config-access;
466         }
467
468         list monitoring-param {
469           description
470             "List of VDU-related monitoring parameters at NFVI level";
471           key id;
472           leaf id {
473             description "The unique id of the monitoring param at VDU level";
474             type string;
475           }
476
477           leaf nfvi-metric {
478             description "The associated NFVI metric to be monitored";
479             type manotypes:nfvi-metric-type;
480           }
481
482           leaf interface-name-ref {
483             description
484               "Reference to a VDU interface name. Applicable only when the nfvi-metric
485               refers to an interface and not to the VM";
486             type leafref {
487               path "../../interface/name";
488             }
489           }
490         }
491
492         choice cloud-init-input {
493           description
494             "Indicates how the contents of cloud-init script are provided.
495              There are 2 choices - inline or in a file";
496
497           case inline {
498             leaf cloud-init {
499               description
500                 "Contents of cloud-init script, provided inline, in cloud-config format";
501               type string;
502             }
503           }
504
505           case filename {
506             leaf cloud-init-file {
507               description
508                 "Name of file with contents of cloud-init script in cloud-config format";
509                 type string;
510             }
511           }
512         }
513
514         uses manotypes:supplemental-boot-data;
515
516         list internal-connection-point {
517           key "id";
518           description
519             "List for internal connection points. Each VNFC
520             has zero or more internal connection points.
521             Internal connection points are used for connecting
522             the VNF with components internal to the VNF. If a VNF
523             has only one VNFC, it may not have any internal
524             connection points.";
525
526           uses common-connection-point;
527
528           leaf internal-vld-ref {
529             type leafref {
530               path "../../../internal-vld/id";
531             }
532           }
533         }
534
535         list interface {
536           description
537               "List of Interfaces (external and internal) for the VNF";
538           key name;
539
540           leaf name {
541             description
542                 "Name of the interface. Note that this
543                 name has only local significance to the VDU.";
544             type string;
545           }
546
547           leaf position {
548             description
549                 "Explicit Position of the interface within the list";
550             type uint32;
551           }
552
553           leaf mgmt-interface {
554             description
555                 "Flag to indicate that this is the mgmt interface
556                 to be used for VDU configuration";
557             type boolean;
558             default false;
559           }
560
561           leaf type {
562             description
563                 "Type of the Interface";
564             type interface-type;
565
566             default "EXTERNAL";
567           }
568
569           leaf mac-address {
570             description
571               "MAC address of the interface.
572               Some VNFs require a specific MAC address to be configured
573               in the interface. While this is not recommended at all in
574               NFV environments, this parameter exists to allow those
575               scenarios.
576               This parameter will be likely deprecated in the future.";
577             type string;
578           }
579
580           choice connection-point-type {
581             case internal {
582               leaf internal-connection-point-ref {
583                 description
584                   "Leaf Ref to the particular internal connection point";
585                 type leafref {
586                   path "../../internal-connection-point/id";
587                 }
588               }
589             }
590             case external {
591               leaf external-connection-point-ref {
592                 description
593                   "Leaf Ref to the particular external connection point";
594                 type leafref {
595                   path "../../../connection-point/name";
596                 }
597               }
598             }
599           }
600
601           uses virtual-interface;
602         }
603
604
605         list volumes {
606           key "name";
607
608           leaf name {
609             description "Name of the disk-volumes, e.g. vda, vdb etc";
610             type string;
611           }
612
613           uses manotypes:volume-info;
614         }
615       }
616
617       list kdu {
618         description "List of K8s Deployment Units";
619         key "name";
620
621         leaf name {
622           description "Unique name for the KDU";
623           type string;
624         }
625
626         leaf description {
627             description "Description of the KDU.";
628             type string;
629         }
630
631         container kdu-configuration {
632           uses manotypes:vca-configuration;
633           uses manotypes:vca-config-access;
634
635           leaf-list blacklist-config-primitive {
636             description
637               "List of blacklisted config primitives from the list of
638               default kdu config primitives";
639
640             type enumeration {
641               enum upgrade;
642               enum rollback;
643             }
644
645           }
646
647         }
648
649         choice kdu-model {
650           description
651             "Indicates the KDU model, either as a helm-chart or as a juju-bundle.";
652
653           case helm-chart {
654             leaf helm-chart {
655               description
656                 "Helm chart that models the KDU, in any of the following ways:
657                  - <helm-repo>/<helm-chart>
658                  - <helm-chart folder under k8s_models folder in the package>
659                  - <helm-chart tgz file (w/ or w/o extension) under k8s_models folder in the package>
660                  - <URL_where_to_fetch_chart>
661                 ";
662               type string;
663             }
664             leaf helm-version {
665               description
666                 "Helm version to use for this helm-chart, v3 by default";
667               type enumeration {
668                 enum v2;
669                 enum v3;
670               }
671               default v3;
672             }
673           }
674
675           case juju-bundle {
676             leaf juju-bundle {
677               description
678                 "Juju bundle that models the KDU, in any of the following ways:
679                  - <juju-repo>/<juju-bundle>
680                  - <juju-bundle folder under k8s_models folder in the package>
681                  - <juju-bundle tgz file (w/ or w/o extension) under k8s_models folder in the package>
682                  - <URL_where_to_fetch_juju_bundle>
683                 ";
684               type string;
685             }
686           }
687         }
688
689         list service {
690           description
691             "List of Kubernetes services exposed by the KDU.
692              If empty, all services are assumed to be exposed in the CP associated to the first network
693              in k8s-cluster.nets.";
694           key name;
695
696           leaf name {
697             description "Name of the Kubernetes service exposed by he KDU model";
698             type string;
699           }
700
701           leaf mgmt-service {
702             description
703                 "Flag to indicate that this Kubernetes service is a mgmt service
704                 to be used for KDU configuration. Defaults to false (if no present).
705                 All services with mgmt-service set to true will be passed to the execution
706                 environment in charge of the KDU configuration.";
707             type boolean;
708             default false;
709           }
710
711           leaf external-connection-point-ref {
712             description
713               "Leaf Ref to the particular external connection point";
714             type leafref {
715               path "../../../connection-point/name";
716             }
717           }
718
719         }
720
721       }
722
723       container k8s-cluster {
724         leaf-list version {
725           description
726             "List of supported K8s versions.
727             The cluster where the KDUs will be deployed will have to match
728             one of these versions.";
729
730           type string;
731         }
732
733         leaf-list cni {
734           description
735             "List of supported CNI plugins.
736             The cluster where the KDUs will be deployed will have to use
737             one of these CNI plugins.";
738
739           type enumeration {
740             enum calico;
741             enum flannel;
742             enum multus;
743           }
744         }
745
746         list nets {
747           description
748             "List of required networks in the K8s cluster.
749             The cluster where the KDUs will be deployed will have to use
750             one of these CNI plugins.";
751
752           key "id";
753
754           leaf id {
755             description "Internal identifier for the K8s cluster network in this VNF";
756             type string;
757           }
758
759           leaf external-connection-point-ref {
760             description
761               "Leaf Ref to the particular external connection point";
762             type leafref {
763               path "../../../connection-point/name";
764             }
765           }
766
767         }
768       }
769
770       list vdu-dependency {
771         description
772             "List of VDU dependencies.";
773
774         key vdu-source-ref;
775         leaf vdu-source-ref {
776           type leafref {
777             path "../../vdu/id";
778           }
779         }
780
781         leaf vdu-depends-on-ref {
782           description
783             "Reference to the VDU on which
784             the source VDU depends.";
785           type leafref {
786             path "../../vdu/id";
787           }
788         }
789       }
790
791       leaf service-function-chain {
792         description "Type of node in Service Function Chaining Architecture";
793
794         type enumeration {
795           enum UNAWARE;
796           enum CLASSIFIER;
797           enum SF;
798           enum SFF;
799         }
800         default "UNAWARE";
801       }
802
803       leaf service-function-type {
804         description
805           "Type of Service Function.
806            NOTE: This needs to map with Service Function Type in ODL to
807            support VNFFG. Service Function Type is mandatory param in ODL
808            SFC. This is temporarily set to string for ease of use";
809         type string;
810       }
811
812       uses manotypes:http-endpoints;
813
814       list scaling-group-descriptor {
815         description
816             "scaling group descriptor within the VNF.
817              The scaling group defines a group of VDUs,
818              and the ratio of VDUs in the VNF
819              that is used as target for scaling action";
820
821         key "name";
822
823         leaf name {
824           description "Name of this scaling group.";
825           type string;
826         }
827
828         list scaling-policy {
829
830           key "name";
831
832           leaf name {
833             description
834                 "Name of the scaling policy";
835             type string;
836           }
837
838           leaf scaling-type {
839             description
840                 "Type of scaling";
841             type manotypes:scaling-policy-type;
842           }
843
844           leaf enabled {
845             description
846               "Specifies if the scaling policy can be applied";
847             type boolean;
848             default true;
849           }
850
851           leaf scale-in-operation-type {
852             description
853                 "Operation to be applied to check between scaling criterias to
854                  check if the scale in threshold condition has been met.
855                  Defaults to AND";
856             type manotypes:scaling-criteria-operation;
857             default AND;
858           }
859
860           leaf scale-out-operation-type {
861             description
862                 "Operation to be applied to check between scaling criterias to
863                  check if the scale out threshold condition has been met.
864                  Defauls to OR";
865             type manotypes:scaling-criteria-operation;
866             default OR;
867           }
868
869           leaf threshold-time {
870             description
871               "The duration for which the criteria must hold true";
872             type uint32;
873             mandatory true;
874           }
875
876           leaf cooldown-time {
877             description
878               "The duration after a scaling-in/scaling-out action has been
879               triggered, for which there will be no further optional";
880             type uint32;
881             mandatory true;
882           }
883
884           list scaling-criteria {
885             description
886                 "list of conditions to be met for generating scaling
887                    requests";
888             key "name";
889
890             leaf name {
891               type string;
892             }
893
894             leaf scale-in-threshold {
895               description
896                   "Value below which scale-in requests are generated";
897               type decimal64{
898                 fraction-digits 10;
899              }
900             }
901
902             leaf scale-in-relational-operation {
903               description
904                 "The relational operator used to compare the monitoring param
905                 against the scale-in-threshold.";
906               type manotypes:relational-operation-type;
907               default LE;
908             }
909
910             leaf scale-out-threshold {
911               description
912                   "Value above which scale-out requests are generated";
913               type decimal64{
914                 fraction-digits 10;
915              }
916             }
917
918             leaf scale-out-relational-operation {
919               description
920                 "The relational operator used to compare the monitoring param
921                 against the scale-out-threshold.";
922               type manotypes:relational-operation-type;
923               default GE;
924             }
925
926             leaf vnf-monitoring-param-ref {
927               description
928                  "Reference to the VNF level monitoring parameter
929                   that is aggregated";
930               type leafref {
931                 path "../../../../monitoring-param/id";
932               }
933             }
934           }
935         }
936
937         list vdu {
938           description "List of VDUs in this scaling group";
939           key "vdu-id-ref";
940
941           leaf vdu-id-ref {
942             description "Reference to the VDU id";
943             type leafref {
944               path "../../../vdu/id";
945             }
946           }
947
948           leaf count {
949             description
950               "count of this VDU id within this scaling group.
951                The count allows to define the number of instances
952                when a scaling action targets this scaling group";
953             type uint32;
954             default 1;
955           }
956         }
957
958         leaf min-instance-count {
959           description
960             "Minimum instances of the scaling group which are allowed.
961             These instances are created by default when the network service
962             is instantiated.";
963           type uint32;
964           default 0;
965         }
966
967         leaf max-instance-count {
968           description
969             "Maximum instances of this scaling group that are allowed
970              in a single network service. The network service scaling
971              will fail, when the number of service group instances
972              exceed the max-instance-count specified.";
973           type uint32;
974           default 10;
975         }
976
977         list scaling-config-action {
978           description "List of scaling config actions";
979           key "trigger";
980
981           leaf trigger {
982             description "scaling trigger";
983             type manotypes:scaling-trigger;
984           }
985
986           leaf vnf-config-primitive-name-ref {
987             description "Reference to the VNF config primitive";
988             type leafref {
989               path "../../../vnf-configuration/config-primitive/name";
990             }
991           }
992         }
993       }
994
995       list monitoring-param {
996         description
997           "List of monitoring parameters at the network service level";
998         key id;
999         leaf id {
1000           type string;
1001         }
1002
1003         leaf name {
1004           type string;
1005         }
1006
1007         uses manotypes:monitoring-param-aggregation;
1008
1009         choice monitoring-type {
1010           description
1011             "Defines the type of monitoring param to be used:
1012               * vdu-monitorin-param:     VDU-related metric (from NFVI)
1013               * vnf-metric:              VNF-related metric (from VCA)
1014               * vdu-metric:              VDU-related metric (from VCA)
1015             ";
1016
1017           case vdu-monitoring-param {
1018             description "VDU-related metric from the infrastructure";
1019             container vdu-monitoring-param {
1020               leaf vdu-ref {
1021                 type leafref {
1022                   path "../../../vdu/id";
1023                 }
1024               }
1025               leaf vdu-monitoring-param-ref {
1026                 type leafref {
1027                   path "../../../vdu[id = current()/../vdu-ref]/monitoring-param/id";
1028                 }
1029               }
1030             }
1031           }
1032
1033           case vnf-metric {
1034             description "VNF-related metric (from VCA)";
1035             container vnf-metric {
1036               leaf vnf-metric-name-ref {
1037                 type leafref {
1038                   path "../../../vnf-configuration/metrics/name";
1039                 }
1040               }
1041             }
1042           }
1043
1044           case vdu-metric {
1045             description "VDU-related metric (from VCA)";
1046             container vdu-metric {
1047               leaf vdu-ref {
1048                 type leafref {
1049                   path "../../../vdu/id";
1050                 }
1051               }
1052               leaf vdu-metric-name-ref {
1053                 type leafref {
1054                   path "../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name";
1055                 }
1056               }
1057             }
1058           }
1059
1060         }
1061
1062         leaf http-endpoint-ref {
1063           type leafref {
1064             path "../../http-endpoint/path";
1065           }
1066         }
1067
1068         leaf json-query-method {
1069           type manotypes:json-query-method;
1070           default "NAMEKEY";
1071         }
1072
1073         container json-query-params {
1074           leaf json-path {
1075             description
1076               "The jsonpath to use to extract value from JSON structure";
1077             type string;
1078           }
1079           leaf object-path {
1080             description
1081               "The objectpath to use to extract value from JSON structure";
1082             type string;
1083           }
1084         }
1085
1086         uses manotypes:monitoring-param-ui-data;
1087         uses manotypes:monitoring-param-value;
1088
1089       }
1090
1091       list placement-groups {
1092         description "List of placement groups at VNF level";
1093
1094         key "name";
1095         uses manotypes:placement-group-info;
1096
1097         list member-vdus {
1098
1099           description
1100               "List of VDUs that are part of this placement group";
1101           key "member-vdu-ref";
1102
1103           leaf member-vdu-ref {
1104             type leafref {
1105               path "../../../vdu/id";
1106             }
1107           }
1108         }
1109       }
1110   }
1111 }
1112
1113 // vim: sw=2