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