1 Detailed architecture and message flows
2 =======================================
4 Detailed northbound interface specification
5 -------------------------------------------
8 This is Work in Progress.
10 ETSI NFV IFA Information Models
11 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16 A compute flavor includes information about number of virtual CPUs, size of
17 virtual memory, size of virtual storage, and virtual network interfaces
20 .. figure:: images/computeflavor.png
24 Virtualised Compute Resources
25 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 Compute Capacity Management
28 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
30 Subscribe Compute Capacity Change Event
31 _______________________________________
33 Subscription from Consumer to VIM to be notified about compute capacity changes
35 .. http:post:: /capacity/compute/subscribe
42 POST /capacity/compute/subscribe HTTP/1.1
43 Accept: application/json
47 "resourceDescriptor": [
49 "computeResourceTypeId": "vcInstances"
54 "capacity_info": "available",
66 Content-Type: application/json
69 "created": "2015-09-21T00:00:00Z",
70 "capacityChangeSubscriptionId": "abcdef-ghijkl-123456789"
73 :statuscode 400: resourceDescriptor is missing
75 Query Compute Capacity
76 ______________________
78 Request to find out about available, reserved, total and allocated compute capacity.
80 .. http:get:: /capacity/compute/query
87 GET /capacity/compute/query HTTP/1.1
88 Accept: application/json
92 "resourceDescriptor": {
93 "computeResourceTypeId": "vcInstances"
96 "startTime": "2015-09-21T00:00:00Z",
97 "stopTime": "2015-09-21T00:05:30Z"
101 **Example response**:
106 Content-Type: application/json
110 "lastUpdate": "2015-09-21T00:03:20Z",
111 "capacityInformation": {
119 :query limit: Default is 10.
120 :statuscode 404: resource zone unknown
122 Notify Compute Capacity Change Event
123 ____________________________________
125 Notification about compute capacity changes
127 .. http:post:: /capacity/compute/notification
130 **Example notification**:
134 Content-Type: application/json
138 "notificationId": "zyxwvu-tsrqpo-987654321",
139 "capacityChangeTime": "2015-09-21T00:03:20Z",
140 "resourceDescriptor": {
141 "computeResourceTypeId": "vcInstances"
143 "capacityInformation": {
151 Compute Resource Reservation
152 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
154 Create Compute Resource Reservation
155 ___________________________________
157 Request the reservation of compute resource capacity
159 .. http:post:: /reservation/compute/create
166 POST /reservation/compute/create HTTP/1.1
167 Accept: application/json
170 "startTime": "2015-09-21T01:00:00Z",
171 "computePoolReservation": {
178 **Example response**:
183 Content-Type: application/json
187 "startTime": "2015-09-21T01:00:00Z",
188 "reservationStatus": "initialized",
189 "reservationId": "xxxx-yyyy-zzzz",
190 "computePoolReserved": {
193 "virtualMemSize": 10,
199 and/or virtualized containers
201 .. http:post:: reservation/compute/create
208 POST /reservation/compute/create HTTP/1.1
209 Accept: application/json
212 "startTime": "2015-10-05T15:00:00Z",
213 "virtualizationContainerReservation": [
215 "containerId": "myContainer",
217 "flavorId": "myFlavor",
220 "cpuArchitecture": "x86"
223 "numaEnabled": "False",
227 "typeOfStorage": "volume",
235 **Example response**:
240 Content-Type: application/json
244 "startTime": "2015-10-05T15:00:00Z",
245 "reservationId": "aaaa-bbbb-cccc",
246 "reservationStatus": "initialized",
247 "virtualizationContainerReserved": [
249 "containerId": "myContainer",
251 "flavorId": "myFlavor",
254 "cpuArchitecture": "x86"
257 "numaEnabled": "False",
261 "typeOfStorage": "volume",
272 Query Compute Resource Reservation
273 __________________________________
275 Request to find out about reserved compute resources that the consumer has
278 .. http:get:: /reservation/compute/query
285 GET /reservation/compute/query HTTP/1.1
286 Accept: application/json
289 "queryReservationFilter": [
291 "reservationId": "xxxx-yyyy-zzzz"
297 **Example response**:
302 Content-Type: application/json
307 "startTime": "2015-09-21T01:00:00Z",
308 "reservationStatus": "active",
309 "reservationId": "xxxx-yyyy-zzzz",
310 "computePoolReserved":
314 "virtualMemSize": 10,
320 :statuscode 404: reservation id unknown
322 Update Compute Resource Reservation
323 ___________________________________
324 Request to update compute resource reservation
326 .. http:post:: /reservation/compute/update
333 POST /reservation/compute/update HTTP/1.1
334 Accept: application/json
337 "startTime": "2015-09-14T16:00:00Z",
338 "reservationId": "xxxx-yyyy-zzzz"
341 **Example response**:
346 Content-Type: application/json
350 "startTime": "2015-09-14TT16:00:00Z",
351 "reservationStatus": "active",
352 "reservationId": "xxxx-yyyy-zzzz",
353 "computePoolReserved": {
356 "virtualMemSize": 10,
362 Terminate Compute Resource Reservation
363 ______________________________________
364 Request to terminate a compute resource reservation
366 .. http:delete:: /reservation/compute/(reservation_id)
369 Virtualised Network Resources
370 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
372 Network Capacity Management
373 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
375 Subscribe Network Capacity Change Event
376 _______________________________________
378 Susbcription from Consumer to VIM to be notified about network capacity changes
380 .. http:post:: /capacity/network/subscribe
387 POST /capacity/network/subscribe HTTP/1.1
388 Accept: application/json
391 "resourceDescriptor": [
393 "networkResourceTypeId": "publicIps"
398 "capacity_info": "available",
405 **Example response**:
410 Content-Type: application/json
413 "created": "2015-09-28T00:00:00Z",
414 "capacityChangeSubscriptionId": "bcdefg-hijklm-234567890"
417 Query Network Capacity
418 ______________________
420 Request to find out about available, reserved, total and allocated network capacity.
422 .. http:get:: /capacity/network/query
429 GET /capacity/network/query HTTP/1.1
430 Accept: application/json
433 "resourceDescriptor": {
434 "networkResourceTypeId": "publicIps"
437 "startTime": "2015-09-28T00:00:00Z",
438 "stopTime": "2015-09-28T00:05:30Z"
442 **Example response**:
447 Content-Type: application/json
450 "lastUpdate": "2015-09-28T00:02:10Z",
451 "capacityInformation": {
459 Notify Network Capacity Change Event
460 ____________________________________
462 Notification about network capacity changes
464 .. http:post:: /capacity/network/notification
467 **Example notification**:
471 Content-Type: application/json
474 "notificationId": "yxwvut-srqpon-876543210",
475 "capacityChangeTime": "2015-09-28T00:02:10Z",
476 "resourceDescriptor": {
477 "networkResourceTypeId": "publicIps"
479 "capacityInformation": {
487 Network Resource Reservation
488 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
490 Create Network Resource Reservation
491 ___________________________________
493 Request the reservation of network resource capacity and/or virtual networks, network ports
495 .. http:post:: /reservation/network/create
502 POST /reservation/network/create HTTP/1.1
503 Accept: application/json
506 "startTime": "2015-09-28T01:00:00Z",
507 "networkReservation": {
512 **Example response**:
517 Content-Type: application/json
521 "startTime": "2015-09-28T01:00:00Z",
522 "reservationStatus": "initialized",
523 "reservationId": "wwww-xxxx-yyyy",
533 Query Network Resource Reservation
534 __________________________________
536 Request to find out about reserved network resources that the consumer has access to.
538 .. http:get:: /reservation/network/query
545 GET /reservation/network/query HTTP/1.1
546 Accept: application/json
549 "queryReservationFilter": [
551 "reservationId": "wwww-xxxx-yyyy"
556 **Example response**:
561 Content-Type: application/json
565 "startTime": "2015-09-28T01:00:00Z",
566 "reservationStatus": "active",
567 "reservationId": "wwww-xxxx-yyyy",
568 "networkReserved": "publicIps": [
575 Update Network Resource Reservation
576 ___________________________________
578 Request to update network resource reservation
580 .. http:post:: /reservation/network/update
587 POST /reservation/network/update HTTP/1.1
588 Accept: application/json
591 "startTime": "2015-09-21T16:00:00Z",
592 "reservationId": "wwww-xxxx-yyyy"
595 **Example response**:
600 Content-Type: application/json
604 "startTime": "2015-09-21T16:00:00Z",
605 "reservationStatus": "active",
606 "reservationId": "wwww-xxxx-yyyy",
616 Terminate Network Resource Reservation
617 ______________________________________
618 Request to terminate a network resource reservation
620 .. http:delete:: /reservation/network/(reservation_id)
623 Virtualised Storage Resources
624 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
626 Storage Capacity Management
627 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
629 Subscribe Storage Capacity Change Event
630 _______________________________________
632 Subscription from Consumer to VIM to be notified about storage capacity changes
634 .. http:post:: /capacity/storage/subscribe
641 POST /capacity/storage/subscribe HTTP/1.1
642 Accept: application/json
645 "resourceDescriptor": [
647 "storageResourceTypeId": "volumes"
652 "capacity_info": "available",
659 **Example response**:
664 Content-Type: application/json
667 "created": "2015-09-28T12:00:00Z",
668 "capacityChangeSubscriptionId": "cdefgh-ijklmn-345678901"
671 Query Storage Capacity
672 ______________________
674 Request to find out about available, reserved, total and allocated storage capacity.
676 .. http:get:: /capacity/storage/query
683 GET /capacity/storage/query HTTP/1.1
684 Accept: application/json
687 "resourceDescriptor": {
688 "storageResourceTypeId": "volumes"
691 "startTime": "2015-09-28T12:00:00Z",
692 "stopTime": "2015-09-28T12:04:45Z"
696 **Example response**:
701 Content-Type: application/json
704 "lastUpdate": "2015-09-28T12:01:35Z",
705 "capacityInformation": {
713 Notify Storage Capacity Change Event
714 ____________________________________
716 Notification about storage capacity changes
718 .. http:post:: /capacity/storage/notification
721 **Example notification**:
725 Content-Type: application/json
728 "notificationId": "xwvuts-rqponm-765432109",
729 "capacityChangeTime": "2015-09-28T12:01:35Z",
730 "resourceDescriptor": {
731 "storageResourceTypeId": "volumes"
733 "capacityInformation": {
741 Storage Resource Reservation
742 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
744 Create Storage Resource Reservation
745 ___________________________________
747 Request the reservation of storage resource capacity
749 .. http:post:: /reservation/storage/create
756 POST /reservation/storage/create HTTP/1.1
757 Accept: application/json
760 "startTime": "2015-09-28T13:00:00Z",
761 "storagePoolReservation": {
768 **Example response**:
773 Content-Type: application/json
777 "startTime": "2015-09-28T13:00:00Z",
778 "reservationStatus": "initialized",
779 "reservationId": "vvvv-wwww-xxxx",
780 "storagePoolReserved": {
788 Query Storage Resource Reservation
789 __________________________________
790 Request to find out about reserved storage resources that the consumer has access to.
792 .. http:get:: /reservation/storage/query
799 GET /reservation/storage/query HTTP/1.1
800 Accept: application/json
803 "queryReservationFilter": [
805 "reservationId": "vvvv-wwww-xxxx"
810 **Example response**:
815 Content-Type: application/json
819 "startTime": "2015-09-28T13:00:00Z",
820 "reservationStatus": "active",
821 "reservationId": "vvvv-wwww-xxxx",
822 "storagePoolReserved": {
830 Update Storage Resource Reservation
831 ___________________________________
833 Request to update storage resource reservation
835 .. http:post:: /reservation/storage/update
842 POST /reservation/storage/update HTTP/1.1
843 Accept: application/json
846 "startTime": "2015-09-20T23:00:00Z",
847 "reservationId": "vvvv-wwww-xxxx"
850 **Example response**:
855 Content-Type: application/json
859 "startTime": "2015-09-20T23:00:00Z",
860 "reservationStatus": "active",
861 "reservationId": "vvvv-wwww-xxxx",
862 "storagePoolReserved": {
870 Terminate Storage Resource Reservation
871 ______________________________________
872 Request to terminate a storage resource reservation
874 .. http:delete:: /reservation/storage/(reservation_id)
877 Detailed Message Flows
878 ----------------------
880 Resource Capacity Management
881 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
883 .. figure:: images/figure5.png
887 Capacity Management Scenario
889 :numref:`figure5` shows a detailed message flow between the consumers and the
890 functional blocks inside the VIM and has the following steps:
892 Step 1: The consumer subscribes to capacity change notifications
894 Step 2: The Capacity Manager monitors the capacity information for the various
895 types of resources by querying the various Controllers (e.g. Nova, Neutron,
896 Cinder), either periodically or on demand and updates capacity information in
899 Step 3: Capacity changes are notified to the consumer
901 Step 4: The consumer queries the Capacity Manager to retrieve capacity detailed
907 .. figure:: images/figure6.png
911 Resource Reservation for Future Use Scenario
913 :numref:`figure6` shows a detailed message flow between the consumers and
914 the functional blocks inside the VIM and has the following steps:
916 Step 1: The consumer creates a resource reservation request for future use by
917 setting a start and end time for the allocation
919 Step 2: The consumer gets an immediate reply with a reservation status message
920 "reservationStatus" and an identifier to be used with this reservation instance
923 Step 3: The consumer subscribes to reservation notification events
925 Step 4: The Resource Reservation Manager checks the feasibility of the
926 reservation request by consulting the Capacity Manager
928 Step 5: The Resource Reservation Manager reserves the resources and stores the
929 list of reservations IDs generated by the Controllers (e.g. Nova, Neutron,
930 Cinder) in the Reservation Map
932 Step 6: Once the reservation process is completed, the VIM sends a notification
933 message to the consumer with information on the reserved resources
935 Step 7: When start time arrives, the consumer creates a resource allocation
938 Step 8: The consumer gets an immediate reply with an allocation status message
941 Step 9: The consumer subscribes to allocation notification events
943 Step 10: The Resource Allocation Manager allocates the reserved resources. If
944 not all reserved resources are allocated before expiry, the reserved resources
945 are released and a notification is sent to the consumer
947 Step 11: Once the allocation process is completed, the VIM sends a notification
948 message to the consumer with information on the allocated resources