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