a786757f609e289ab58b9e350c2882804d7913c7
[sdnc/northbound.git] / vnfapi / model / src / main / yang / VNF-API.yang
1 module VNF-API {\r
2 \r
3     yang-version 1;\r
4 \r
5     namespace "org:openecomp:sdnctl:vnf";\r
6 \r
7     prefix vnfapi;\r
8 \r
9     import ietf-inet-types { prefix "ietf"; revision-date "2010-09-24"; }\r
10 \r
11     include "vnfsubmodule";\r
12 \r
13     organization "OpenECOMP";\r
14 \r
15     contact\r
16         "Network Controller <sdnc@lists.openecomp.org>";\r
17 \r
18     description\r
19         "Defines API interface for VNF Orchestration";\r
20 \r
21     revision "2015-07-20" {\r
22         description\r
23             "Initial draft";\r
24     }\r
25     // Last updated on 8-17-2016\r
26     grouping sdnc-request-header { \r
27         container sdnc-request-header { \r
28             leaf svc-request-id { \r
29                 type string; \r
30             } \r
31             leaf svc-action { \r
32                 type enumeration { \r
33                     enum "reserve";\r
34                     enum "assign";\r
35                     enum "activate";  // equal to commit\r
36                     enum "delete";    // equal to commit\r
37                     enum "changeassign";\r
38                     enum "changedelete";\r
39                     enum "rollback";\r
40                 } \r
41             } \r
42             leaf svc-notification-url { \r
43                 type string; \r
44             } \r
45         } \r
46     } \r
47 \r
48     grouping request-information { \r
49         container request-information { \r
50             leaf request-id { \r
51                 type string; \r
52             } \r
53             leaf request-action { \r
54                 type enumeration { \r
55                     enum "PreloadNetworkRequest";\r
56                     enum "DeletePreloadNetworkRequest";\r
57                     enum "NetworkActivateRequest";\r
58                     enum "DisconnectNetworkRequest";\r
59                     enum "PreloadVNFRequest";\r
60                     enum "DeletePreloadVNFRequest";\r
61                     enum "VNFActivateRequest";\r
62                     enum "ChangeVNFActivateRequest";\r
63                     enum "DisconnectVNFRequest";\r
64                     enum "PreloadVnfInstanceRequest";\r
65                     enum "DeletePreloadVnfInstanceRequest";\r
66                     enum "VnfInstanceActivateRequest";\r
67                     enum "ChangeVnfInstanceActivateRequest";\r
68                     enum "DisconnectVnfInstanceRequest";\r
69                     enum "PreloadVfModuleRequest";\r
70                     enum "DeletePreloadVfModuleRequest";\r
71                     enum "VfModuleActivateRequest";\r
72                     enum "ChangeVfModuleActivateRequest";\r
73                     enum "DisconnectVfModuleRequest";\r
74                 } \r
75             } \r
76             leaf request-sub-action { \r
77                 type enumeration { \r
78                     enum "SUPP";\r
79                     enum "CANCEL";\r
80                 } \r
81             } \r
82             leaf source { \r
83                 type string; \r
84             } \r
85             leaf notification-url { \r
86                 type string; \r
87             } \r
88             leaf order-number { \r
89                 type string; \r
90             } \r
91             leaf order-version { \r
92                 type string; \r
93             } \r
94         } \r
95     } \r
96 \r
97     grouping service-information { \r
98         container service-information { \r
99             // 1610 use for AnAI subscription-service-type\r
100             leaf service-type { \r
101                 type string;\r
102                 description "AnAI subscription-service-type";\r
103             } \r
104             leaf service-id { \r
105                 type string;\r
106             } \r
107             leaf service-instance-id { \r
108                 type string; \r
109                 description "A service instance that a VNF or a l3-network is associated with";\r
110             } \r
111             // 1610 use for global-customer-id\r
112             leaf subscriber-name { \r
113                 type string; \r
114                 description "AnAI global-customer-id";\r
115             } \r
116         } \r
117     } \r
118 \r
119 \r
120     grouping vnf-request-information { \r
121         container vnf-request-information { \r
122             leaf vnf-request-version {\r
123                 type string; \r
124             }\r
125             leaf vnf-id {\r
126                 type string; \r
127                 description "vf-module-id";\r
128             }\r
129             leaf vnf-type { \r
130                 type string; \r
131                 description "vf-module-type";\r
132             } \r
133             leaf vnf-name { \r
134                 type string; \r
135                 description "vf-module-name";\r
136             } \r
137             leaf generic-vnf-id {\r
138                 type string; \r
139                 description "generic vnf-id";\r
140             }\r
141             leaf generic-vnf-type { \r
142                 type string; \r
143                 description "generic vnf type";\r
144             } \r
145             leaf generic-vnf-name { \r
146                 type string; \r
147                 description "generic vnf name";\r
148             } \r
149             leaf tenant { \r
150                 type string; \r
151             } \r
152             leaf aic-clli { \r
153                 type string; \r
154             } \r
155             leaf aic-cloud-region { \r
156                 type string; \r
157                 description "The AIC cloud region which maps to contrail versions";\r
158             } \r
159             list vnf-networks {\r
160                 key network-role;\r
161                 uses vnf-network;\r
162                 description "Network List";\r
163             }\r
164         }\r
165     } \r
166 \r
167     grouping network-request-information { \r
168         container network-request-information { \r
169             leaf network-id {\r
170                 type string; \r
171             }\r
172             leaf network-type { \r
173                 type string; \r
174             } \r
175             leaf network-name { \r
176                 type string; \r
177             } \r
178             leaf tenant { \r
179                 type string; \r
180             } \r
181             leaf aic-clli { \r
182                 type string; \r
183             } \r
184             leaf aic-cloud-region { \r
185                 type string; \r
186                 description "The AIC cloud region which maps to contrail versions";\r
187             } \r
188         }\r
189     } \r
190 \r
191     /***********************************************************/\r
192     /*               PRELOAD DATA                                 */\r
193     /***********************************************************/\r
194 \r
195     container preload-vnfs {\r
196         uses preload-model-information; \r
197     } \r
198     grouping preload-model-information { \r
199         list vnf-preload-list { \r
200             key "vnf-name vnf-type"; \r
201             leaf vnf-name { \r
202                 type string; \r
203                 description "vf-module-name";\r
204             } \r
205             leaf vnf-type { \r
206                 type string; \r
207                 description "vf-module-type";\r
208             } \r
209             uses preload-data; \r
210         } \r
211     } \r
212 \r
213     // For preload networks it will have network-topology-information\r
214     // For preload vnfs, it will have vnf-topology-information\r
215     grouping preload-data { \r
216         container preload-data { \r
217             uses vnf-topology-information; \r
218             uses network-topology-information; \r
219             uses oper-status; \r
220         }\r
221     } \r
222 \r
223 \r
224     grouping vnf-topology-information { \r
225         container vnf-topology-information { \r
226             uses vnf-topology-identifier;\r
227             uses vnf-assignments; \r
228             uses vnf-parameters; \r
229         }\r
230     } \r
231 \r
232     grouping vnf-topology-identifier { \r
233         container vnf-topology-identifier { \r
234             leaf service-type { \r
235                 type string;\r
236             } \r
237             leaf service-id { \r
238                 type string;\r
239             } \r
240             leaf vnf-name { \r
241                 type string; \r
242                 description "vf-module-name";\r
243             } \r
244             leaf vnf-type { \r
245                 type string; \r
246                 description "vf-module-type";\r
247             } \r
248             leaf generic-vnf-name { \r
249                 type string; \r
250             } \r
251             leaf generic-vnf-type { \r
252                 type string; \r
253             } \r
254             leaf generic-vnf-id { \r
255                 type string; \r
256             } \r
257         } \r
258     } \r
259 \r
260     grouping vnf-assignments {\r
261         container vnf-assignments { \r
262             leaf vnf-status {\r
263                 type string;\r
264                 description "Orchestration Status from AAI - to be set by SDNC";\r
265             }\r
266             list availability-zones {\r
267                 ordered-by  user;\r
268                 leaf availability-zone {\r
269                     type string;\r
270                     description "Openstack availability zone name or UUID";\r
271                 }\r
272             }\r
273             list vnf-networks {\r
274                 key network-role;\r
275                 uses vnf-network;\r
276                 // 1610\r
277                 uses sriov-vlan-filter-list;\r
278                 description "Network List";\r
279             }\r
280             uses vm-topology;\r
281         }\r
282     } \r
283 \r
284     grouping vm-topology {\r
285         list vnf-vms {\r
286             key vm-type;\r
287             leaf vm-type { \r
288                 type string; \r
289             } \r
290             leaf vm-count { \r
291                 type uint8; \r
292             } \r
293             list vm-names {\r
294                 ordered-by user;\r
295                 leaf vm-name{ \r
296                     type string; \r
297                 } \r
298             }\r
299             //leaf-list vm-names {\r
300             //    type string; \r
301             //    ordered-by user;\r
302             //}\r
303             list vm-networks {\r
304                 key network-role;\r
305                 uses vm-network;\r
306                 description "Network List";\r
307             }\r
308         }\r
309     }\r
310 \r
311     grouping vnf-network {\r
312         leaf network-role { \r
313             type string; \r
314             description "A Network Role to which a VNF must connect";\r
315         } \r
316         leaf network-name { \r
317             type string; \r
318             description "Unique Neutron UUID of an instance of the network role ";\r
319         } \r
320         leaf neutron-id { \r
321             type string; \r
322             description "Unique Neutron UUID of an instance of the network role ";\r
323         } \r
324         leaf network-id { \r
325             type string; \r
326             description "Unique Neutron UUID of an instance of the network role ";\r
327         } \r
328         leaf subnet-id { \r
329             type string; \r
330             description "ipv4 subnet UUID to be passed into the HEAT template for DHCP assignment";\r
331         }\r
332         leaf contrail-network-fqdn {\r
333             type string;\r
334             description "contrail network policy object";\r
335         }\r
336         // 1610\r
337         leaf ipv6-subnet-id { \r
338             type string; \r
339             description "ipv6 subnet UUID to be passed into the HEAT template for DHCP assignment";\r
340         }\r
341         leaf ipv6-subnet-name { \r
342             type string; \r
343             description "ipv6 subnet-name that corresponds to the ipv6 subnet-id";\r
344         }\r
345         leaf subnet-name { \r
346             type string; \r
347             description "ipv4 subnet-name that corresponds to the ipv4 subnet-id";\r
348         }\r
349     }\r
350 \r
351     // 1610\r
352     grouping sriov-vlan-filter-list {\r
353         list sriov-vlan-filter-list {\r
354             leaf sriov-vlan-filter {\r
355                 type string;\r
356             }\r
357         }\r
358     }\r
359 \r
360     grouping vm-network {\r
361         leaf network-role {\r
362             type string;\r
363             description "network (identified by role) that this VM connects to.  Should also be included in the vnf-networks for the containing VNF";\r
364     \r
365         }\r
366         leaf use-dhcp {\r
367             type enumeration { \r
368                   enum "Y";\r
369                   enum "N";\r
370             } \r
371             description "Indicator to use DHCP on this network for this VM";\r
372         }\r
373         leaf ip-count {\r
374             type uint8;\r
375             description "The number of ip addresses to be assigned per vm for this network role";\r
376         }\r
377         list network-ips {\r
378             ordered-by user;\r
379             leaf ip-address {\r
380                 //type string;\r
381                 type ietf:ip-address;\r
382                 description "List of assigned ipv4 addresses on a network";\r
383             }\r
384         }\r
385         list network-ips-v6 {\r
386             ordered-by user;\r
387             leaf ip-address-ipv6 {\r
388                 //type string;\r
389                 type ietf:ipv6-address;\r
390                 description "List of assigned ipv6 addresses on a network";\r
391             }\r
392         }\r
393         list network-macs {\r
394             ordered-by user;\r
395             leaf mac-address {\r
396                 type string;\r
397                 description "List of network assignments for this VM (one per network)";\r
398             }\r
399         }\r
400         leaf floating-ip {\r
401             //type string;\r
402             type ietf:ip-address;\r
403             description "Floating ipv4 for VMs of a given type on this network";\r
404         }\r
405         leaf floating-ip-v6 {\r
406             //type string;\r
407             type ietf:ipv6-address;\r
408             description "Floating ipv6 for VMs of a given type on this network";\r
409         }\r
410         list interface-route-prefixes {\r
411             ordered-by user;\r
412             leaf interface-route-prefix {\r
413                 type ietf:ip-address;\r
414                 description "route prefixes (CIDRs) to be provided to MSO in vnf-topology as a list of static routes";\r
415             }\r
416         }\r
417     }\r
418 \r
419     grouping vnf-parameters {\r
420         list vnf-parameters {\r
421             key vnf-parameter-name;\r
422             leaf vnf-parameter-name { \r
423                 type string; \r
424                 description "The name of an arbitrary instance-specific vnf-parameters";\r
425             } \r
426             leaf vnf-parameter-value { \r
427                 type string; \r
428                 description "The value of an arbitrary instance-specific vnf-parameters ";\r
429             } \r
430         }\r
431     }\r
432 \r
433     grouping network-topology-information { \r
434         container network-topology-information { \r
435             uses network-topology-identifier;\r
436             uses subnets; \r
437             uses vpn-bindings; \r
438             uses network-policy;\r
439             uses route-table-reference;\r
440             uses provider-network-information;\r
441         }\r
442     } \r
443 \r
444     grouping network-topology-identifier { \r
445         container network-topology-identifier { \r
446             leaf service-type { \r
447                 type string;\r
448             } \r
449             leaf network-name { \r
450                 type string; \r
451             } \r
452             leaf network-role { \r
453                 type string; \r
454             } \r
455             leaf network-type { \r
456                 type string; \r
457             } \r
458             leaf network-technology{ \r
459                 type string; \r
460             } \r
461         } \r
462     } \r
463     grouping subnets {\r
464         list subnets {\r
465             key start-address;\r
466             leaf start-address{\r
467                 type ietf:ip-address;\r
468                 //type string;\r
469             }\r
470             leaf gateway-address{\r
471                 //type string;\r
472                 type ietf:ip-address;\r
473             }\r
474             leaf cidr-mask{\r
475                 type string;\r
476             }\r
477             leaf ip-version {\r
478                 type string;\r
479             }\r
480             leaf dhcp-enabled {\r
481                 type enumeration {\r
482                     enum "Y";\r
483                     enum "N";\r
484                 }\r
485             }\r
486             leaf dhcp-start-address {\r
487                 type string;\r
488             }\r
489             leaf dhcp-end-address {\r
490                 type string;\r
491             }\r
492             // 1610\r
493             leaf subnet-name {\r
494                 type string;\r
495             }\r
496             \r
497         }\r
498     } \r
499 \r
500     grouping vpn-bindings {\r
501         list vpn-bindings {\r
502             key vpn-binding-id;\r
503             leaf vpn-binding-id {\r
504                 type string;\r
505             }\r
506             leaf global-route-target {\r
507                 type string;\r
508             }\r
509         }\r
510     } \r
511 \r
512     grouping network-policy {\r
513         list network-policy {\r
514             key network-policy-fqdn;\r
515             leaf network-policy-fqdn {\r
516                 type string;\r
517             }\r
518             leaf network-policy-id {\r
519                 type string;\r
520             }\r
521         }\r
522     } \r
523 \r
524     //1610\r
525     grouping route-table-reference {\r
526         list route-table-reference {\r
527             leaf route-table-reference-id {\r
528                 type string;\r
529             }\r
530             leaf route-table-reference-fqdn {\r
531                 type string;\r
532             }\r
533         }\r
534     }\r
535 \r
536     // 1610\r
537     grouping provider-network-information {\r
538         container provider-network-information {\r
539                 leaf physical-network-name {\r
540                     type string;\r
541                 }\r
542                 leaf is-provider-network {\r
543                     type boolean;\r
544                 }\r
545                 leaf is-shared-network {\r
546                     type boolean;\r
547                 }\r
548                 leaf is-external-network {\r
549                 type boolean;\r
550             }\r
551         }\r
552     }\r
553 \r
554     /***********************************************************/\r
555     /*               SERVICE_DATA                                */\r
556     /***********************************************************/\r
557     container vnfs {\r
558         uses vnf-model-infrastructure; \r
559     } \r
560     grouping vnf-model-infrastructure { \r
561         list vnf-list { \r
562             key vnf-id; \r
563             leaf vnf-id { \r
564                 type string; \r
565                 mandatory true; \r
566                 description "vf-module-id";\r
567             } \r
568             uses service-data; \r
569             uses service-status; \r
570         } \r
571     } \r
572     grouping service-data { \r
573         container service-data { \r
574             uses vnf-configuration-information; \r
575             uses oper-status; \r
576         } \r
577     } \r
578     grouping service-status { \r
579         container service-status { \r
580             leaf response-code { \r
581                 type string; \r
582             } \r
583             leaf response-message { \r
584                 type string; \r
585             } \r
586             leaf final-indicator { \r
587                 type string; \r
588             } \r
589             leaf request-status { \r
590                 type enumeration { \r
591                     enum "synccomplete";\r
592                     enum "asynccomplete";\r
593                     enum "notifycomplete";\r
594                 } \r
595             } \r
596             leaf vnfsdn-action { \r
597                 type enumeration { \r
598                     enum "PreloadNetworkRequest";\r
599                     enum "DeletePreloadNetworkRequest";\r
600                     enum "NetworkActivateRequest";\r
601                     enum "DisconnectNetworkRequest";\r
602                     enum "PreloadVNFRequest";\r
603                     enum "DeletePreloadVNFRequest";\r
604                     enum "VNFActivateRequest";\r
605                     enum "ChangeVNFActivateRequest";\r
606                     enum "DisconnectVNFRequest";\r
607                     enum "PreloadVnfInstanceRequest";\r
608                     enum "DeletePreloadVnfInstanceRequest";\r
609                     enum "VnfInstanceActivateRequest";\r
610                     enum "ChangeVnfInstanceActivateRequest";\r
611                     enum "DisconnectVnfInstanceRequest";\r
612                     enum "PreloadVfModuleRequest";\r
613                     enum "DeletePreloadVfModuleRequest";\r
614                     enum "VfModuleActivateRequest";\r
615                     enum "ChangeVfModuleActivateRequest";\r
616                     enum "DisconnectVfModuleRequest";\r
617                 } \r
618             } \r
619             leaf vnfsdn-subaction { \r
620                 type enumeration { \r
621                     enum "SUPP";\r
622                     enum "CANCEL";\r
623                 } \r
624             }\r
625             leaf rpc-name { \r
626                 type enumeration { \r
627                     enum "vnf-topology-operation";\r
628                     enum "preload-vnf-topology-operation";\r
629                     enum "vnf-instance-topology-operation";\r
630                     enum "preload-vnf-instance-topology-operation";\r
631                     enum "vf-module-topology-operation";\r
632                     enum "preload-vf-module-topology-operation";\r
633                 } \r
634             } \r
635             leaf rpc-action { \r
636                 type enumeration { \r
637                     enum "reserve";\r
638                     enum "assign";\r
639                     enum "activate";  // equal to commit\r
640                     enum "delete";      // equal to commit\r
641                     enum "changeassign";\r
642                     enum "changedelete";\r
643                     enum "rollback";\r
644                 } \r
645             } \r
646             leaf response-timestamp { \r
647                 type string; \r
648             } \r
649         } \r
650     } \r
651     grouping vnf-configuration-information { \r
652         uses sdnc-request-header; \r
653         uses request-information; \r
654         uses service-information;\r
655         uses vnf-request-information;\r
656         uses vnf-topology; \r
657     } \r
658     grouping vnf-topology-response-body { \r
659         leaf svc-request-id { \r
660             type string; \r
661         } \r
662         leaf response-code { \r
663             type string; \r
664         } \r
665         leaf response-message { \r
666             type string; \r
667         } \r
668         leaf ack-final-indicator { \r
669             type string; \r
670         } \r
671     } \r
672 \r
673     grouping vnf-information { \r
674         container vnf-information { \r
675             leaf vnf-service-type { \r
676                 type string;\r
677             } \r
678             leaf vnf-id { \r
679                 type string; \r
680                 description "vf-module-id";\r
681             } \r
682         } \r
683     } \r
684 \r
685     grouping network-information { \r
686         container network-information { \r
687             leaf network-service-type { \r
688                 type string;\r
689             } \r
690             leaf network-id { \r
691                 type string; \r
692             } \r
693         } \r
694     } \r
695 \r
696 \r
697     // Carried over from l3sdn and potentially not needed\r
698     grouping oper-status { \r
699         container oper-status { \r
700             leaf order-status { \r
701                 type enumeration { \r
702                     enum "Active";\r
703                     enum "PendingAssignment";\r
704                     enum "PendingCreate";\r
705                     enum "PendingUpdate";\r
706                     enum "PendingDelete";\r
707                     enum "Deleted";\r
708                     \r
709                 } \r
710             }\r
711             leaf last-action { \r
712                 type enumeration { \r
713                     enum "VNFActivateRequest";\r
714                     enum "ChangeVNFActivateRequest";\r
715                     enum "VnfInstanceActivateRequest";\r
716                     enum "ChangeVnfInstanceActivateRequest";\r
717                     enum "VfModuleActivateRequest";\r
718                     enum "ChangeVfModuleActivateRequest";\r
719                     enum "DisconnectVNFRequest";\r
720                     enum "DisconnectVnfInstanceRequest";\r
721                     enum "DisconnectVfModuleRequest";\r
722                     enum "PreloadVNFRequest";\r
723                     enum "DeletePreloadVNFRequest";\r
724                     enum "PreloadVnfInstanceRequest";\r
725                     enum "DeletePreloadVnfInstanceRequest";\r
726                     enum "PreloadVfModuleRequest";\r
727                     enum "DeletePreloadVfModuleRequest";\r
728                 } \r
729             } \r
730             leaf last-svc-request-id { \r
731                 type string; \r
732             } \r
733             leaf last-order-status { \r
734                 type enumeration { \r
735                     enum "Active";\r
736                     enum "PendingAssignment";\r
737                     enum "PendingCreate";\r
738                     enum "PendingUpdate";\r
739                     enum "PendingDelete";\r
740                     enum "Deleted";\r
741                 } \r
742             } \r
743             leaf create-timestamp { \r
744                 type string; \r
745             } \r
746             leaf modify-timestamp { \r
747                 type string; \r
748             } \r
749             leaf maintenance-indicator { \r
750                 type enumeration { \r
751                     enum "Y";\r
752                     enum "N";\r
753                 } \r
754             } \r
755         } \r
756     } \r
757     grouping vnf-topology { \r
758         leaf vnf-id {\r
759             type string; \r
760             description "vf-module-id";\r
761         }\r
762         uses vnf-topology-information; \r
763     } \r
764     \r
765     \r
766     rpc vnf-topology-operation {\r
767         input { \r
768             uses sdnc-request-header; \r
769             uses request-information; \r
770             uses service-information;\r
771             uses vnf-request-information; \r
772         } \r
773         output { \r
774             uses vnf-topology-response-body; \r
775             uses vnf-information;\r
776             uses service-information;\r
777         } \r
778     } \r
779 \r
780     rpc network-topology-operation {\r
781         input { \r
782             uses sdnc-request-header; \r
783             uses request-information; \r
784             uses service-information;\r
785             uses network-request-information; \r
786         } \r
787         output { \r
788             uses vnf-topology-response-body; \r
789             uses network-information;\r
790             uses service-information;\r
791         } \r
792     } \r
793 \r
794     rpc preload-vnf-topology-operation {\r
795         input { \r
796             uses sdnc-request-header; \r
797             uses request-information; \r
798             uses vnf-topology-information;\r
799         } \r
800         output { \r
801             uses vnf-topology-response-body; \r
802         } \r
803     }\r
804 \r
805     rpc preload-network-topology-operation {\r
806         input { \r
807             uses sdnc-request-header; \r
808             uses request-information; \r
809             uses network-topology-information;\r
810         } \r
811         output { \r
812             uses vnf-topology-response-body; \r
813         } \r
814     }\r
815 }\r