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 virtual memory,
17 size of virtual storage, and virtual network interfaces [NFVIFA005]_
19 .. figure:: images/computeflavor.png
23 Virtualised Compute Resources
24 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26 Compute Capacity Management
27 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
29 Subscribe Compute Capacity Change Event
30 _______________________________________
32 Subscription from Consumer to VIM to be notified about compute capacity changes
34 .. http:post:: /capacity/compute/subscribe
41 POST /capacity/compute/subscribe HTTP/1.1
42 Accept: application/json
46 "resourceDescriptor": [
48 "computeResourceTypeId": "vcInstances"
53 "capacity_info": "available",
65 Content-Type: application/json
68 "created": "2015-09-21T00:00:00Z",
69 "capacityChangeSubscriptionId": "abcdef-ghijkl-123456789"
72 :statuscode 400: resourceDescriptor is missing
74 Query Compute Capacity
75 ______________________
77 Request to find out about available, reserved, total and allocated compute capacity.
79 .. http:get:: /capacity/compute/query
86 GET /capacity/compute/query HTTP/1.1
87 Accept: application/json
91 "resourceDescriptor": {
92 "computeResourceTypeId": "vcInstances"
95 "startTime": "2015-09-21T00:00:00Z",
96 "stopTime": "2015-09-21T00:05:30Z"
100 **Example response**:
105 Content-Type: application/json
109 "lastUpdate": "2015-09-21T00:03:20Z",
110 "capacityInformation": {
118 :query limit: Default is 10.
119 :statuscode 404: resource zone unknown
121 Notify Compute Capacity Change Event
122 ____________________________________
124 Notification about compute capacity changes
126 .. http:post:: /capacity/compute/notification
129 **Example notification**:
133 Content-Type: application/json
137 "notificationId": "zyxwvu-tsrqpo-987654321",
138 "capacityChangeTime": "2015-09-21T00:03:20Z",
139 "resourceDescriptor": {
140 "computeResourceTypeId": "vcInstances"
142 "capacityInformation": {
150 Compute Resource Reservation
151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
153 Create Compute Resource Reservation
154 ___________________________________
156 Request the reservation of compute resource capacity
158 .. http:post:: /reservation/compute/create
165 POST /reservation/compute/create HTTP/1.1
166 Accept: application/json
169 "startTime": "2015-09-21T01:00:00Z",
170 "computePoolReservation": {
177 **Example response**:
182 Content-Type: application/json
186 "startTime": "2015-09-21T01:00:00Z",
187 "reservationStatus": "initialized",
188 "reservationId": "xxxx-yyyy-zzzz",
189 "computePoolReserved": {
192 "virtualMemSize": 10,
198 and/or virtualized containers
200 .. http:post:: reservation/compute/create
207 POST /reservation/compute/create HTTP/1.1
208 Accept: application/json
211 "startTime": "2015-10-05T15:00:00Z",
212 "virtualizationContainerReservation": [
214 "containerId": "myContainer",
216 "flavorId": "myFlavor",
219 "cpuArchitecture": "x86"
222 "numaEnabled": "False",
226 "typeOfStorage": "volume",
234 **Example response**:
239 Content-Type: application/json
243 "startTime": "2015-10-05T15:00:00Z",
244 "reservationId": "aaaa-bbbb-cccc",
245 "reservationStatus": "initialized",
246 "virtualizationContainerReserved": [
248 "containerId": "myContainer",
250 "flavorId": "myFlavor",
253 "cpuArchitecture": "x86"
256 "numaEnabled": "False",
260 "typeOfStorage": "volume",
271 Query Compute Resource Reservation
272 __________________________________
274 Request to find out about reserved compute resources that the consumer has
277 .. http:get:: /reservation/compute/query
284 GET /reservation/compute/query HTTP/1.1
285 Accept: application/json
288 "queryReservationFilter": [
290 "reservationId": "xxxx-yyyy-zzzz"
296 **Example response**:
301 Content-Type: application/json
306 "startTime": "2015-09-21T01:00:00Z",
307 "reservationStatus": "active",
308 "reservationId": "xxxx-yyyy-zzzz",
309 "computePoolReserved":
313 "virtualMemSize": 10,
319 :statuscode 404: reservation id unknown
321 Update Compute Resource Reservation
322 ___________________________________
323 Request to update compute resource reservation
325 .. http:post:: /reservation/compute/update
332 POST /reservation/compute/update HTTP/1.1
333 Accept: application/json
336 "startTime": "2015-09-14T16:00:00Z",
337 "reservationId": "xxxx-yyyy-zzzz"
340 **Example response**:
345 Content-Type: application/json
349 "startTime": "2015-09-14TT16:00:00Z",
350 "reservationStatus": "active",
351 "reservationId": "xxxx-yyyy-zzzz",
352 "computePoolReserved": {
355 "virtualMemSize": 10,
361 Terminate Compute Resource Reservation
362 ______________________________________
363 Request to terminate a compute resource reservation
365 .. http:delete:: /reservation/compute/(reservation_id)
368 Virtualised Network Resources
369 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
371 Network Capacity Management
372 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
374 Subscribe Network Capacity Change Event
375 _______________________________________
377 Susbcription from Consumer to VIM to be notified about network capacity changes
379 .. http:post:: /capacity/network/subscribe
386 POST /capacity/network/subscribe HTTP/1.1
387 Accept: application/json
390 "resourceDescriptor": [
392 "networkResourceTypeId": "publicIps"
397 "capacity_info": "available",
404 **Example response**:
409 Content-Type: application/json
412 "created": "2015-09-28T00:00:00Z",
413 "capacityChangeSubscriptionId": "bcdefg-hijklm-234567890"
416 Query Network Capacity
417 ______________________
419 Request to find out about available, reserved, total and allocated network capacity.
421 .. http:get:: /capacity/network/query
428 GET /capacity/network/query HTTP/1.1
429 Accept: application/json
432 "resourceDescriptor": {
433 "networkResourceTypeId": "publicIps"
436 "startTime": "2015-09-28T00:00:00Z",
437 "stopTime": "2015-09-28T00:05:30Z"
441 **Example response**:
446 Content-Type: application/json
449 "lastUpdate": "2015-09-28T00:02:10Z",
450 "capacityInformation": {
458 Notify Network Capacity Change Event
459 ____________________________________
461 Notification about network capacity changes
463 .. http:post:: /capacity/network/notification
466 **Example notification**:
470 Content-Type: application/json
473 "notificationId": "yxwvut-srqpon-876543210",
474 "capacityChangeTime": "2015-09-28T00:02:10Z",
475 "resourceDescriptor": {
476 "networkResourceTypeId": "publicIps"
478 "capacityInformation": {
486 Network Resource Reservation
487 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
489 Create Network Resource Reservation
490 ___________________________________
492 Request the reservation of network resource capacity and/or virtual networks, network ports
494 .. http:post:: /reservation/network/create
501 POST /reservation/network/create HTTP/1.1
502 Accept: application/json
505 "startTime": "2015-09-28T01:00:00Z",
506 "networkReservation": {
511 **Example response**:
516 Content-Type: application/json
520 "startTime": "2015-09-28T01:00:00Z",
521 "reservationStatus": "initialized",
522 "reservationId": "wwww-xxxx-yyyy",
532 Query Network Resource Reservation
533 __________________________________
535 Request to find out about reserved network resources that the consumer has access to.
537 .. http:get:: /reservation/network/query
544 GET /reservation/network/query HTTP/1.1
545 Accept: application/json
548 "queryReservationFilter": [
550 "reservationId": "wwww-xxxx-yyyy"
555 **Example response**:
560 Content-Type: application/json
564 "startTime": "2015-09-28T01:00:00Z",
565 "reservationStatus": "active",
566 "reservationId": "wwww-xxxx-yyyy",
567 "networkReserved": "publicIps": [
574 Update Network Resource Reservation
575 ___________________________________
577 Request to update network resource reservation
579 .. http:post:: /reservation/network/update
586 POST /reservation/network/update HTTP/1.1
587 Accept: application/json
590 "startTime": "2015-09-21T16:00:00Z",
591 "reservationId": "wwww-xxxx-yyyy"
594 **Example response**:
599 Content-Type: application/json
603 "startTime": "2015-09-21T16:00:00Z",
604 "reservationStatus": "active",
605 "reservationId": "wwww-xxxx-yyyy",
615 Terminate Network Resource Reservation
616 ______________________________________
617 Request to terminate a network resource reservation
619 .. http:delete:: /reservation/network/(reservation_id)
622 Virtualised Storage Resources
623 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
625 Storage Capacity Management
626 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
628 Subscribe Storage Capacity Change Event
629 _______________________________________
631 Subscription from Consumer to VIM to be notified about storage capacity changes
633 .. http:post:: /capacity/storage/subscribe
640 POST /capacity/storage/subscribe HTTP/1.1
641 Accept: application/json
644 "resourceDescriptor": [
646 "storageResourceTypeId": "volumes"
651 "capacity_info": "available",
658 **Example response**:
663 Content-Type: application/json
666 "created": "2015-09-28T12:00:00Z",
667 "capacityChangeSubscriptionId": "cdefgh-ijklmn-345678901"
670 Query Storage Capacity
671 ______________________
673 Request to find out about available, reserved, total and allocated storage capacity.
675 .. http:get:: /capacity/storage/query
682 GET /capacity/storage/query HTTP/1.1
683 Accept: application/json
686 "resourceDescriptor": {
687 "storageResourceTypeId": "volumes"
690 "startTime": "2015-09-28T12:00:00Z",
691 "stopTime": "2015-09-28T12:04:45Z"
695 **Example response**:
700 Content-Type: application/json
703 "lastUpdate": "2015-09-28T12:01:35Z",
704 "capacityInformation": {
712 Notify Storage Capacity Change Event
713 ____________________________________
715 Notification about storage capacity changes
717 .. http:post:: /capacity/storage/notification
720 **Example notification**:
724 Content-Type: application/json
727 "notificationId": "xwvuts-rqponm-765432109",
728 "capacityChangeTime": "2015-09-28T12:01:35Z",
729 "resourceDescriptor": {
730 "storageResourceTypeId": "volumes"
732 "capacityInformation": {
740 Storage Resource Reservation
741 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
743 Create Storage Resource Reservation
744 ___________________________________
746 Request the reservation of storage resource capacity
748 .. http:post:: /reservation/storage/create
755 POST /reservation/storage/create HTTP/1.1
756 Accept: application/json
759 "startTime": "2015-09-28T13:00:00Z",
760 "storagePoolReservation": {
767 **Example response**:
772 Content-Type: application/json
776 "startTime": "2015-09-28T13:00:00Z",
777 "reservationStatus": "initialized",
778 "reservationId": "vvvv-wwww-xxxx",
779 "storagePoolReserved": {
787 Query Storage Resource Reservation
788 __________________________________
789 Request to find out about reserved storage resources that the consumer has access to.
791 .. http:get:: /reservation/storage/query
798 GET /reservation/storage/query HTTP/1.1
799 Accept: application/json
802 "queryReservationFilter": [
804 "reservationId": "vvvv-wwww-xxxx"
809 **Example response**:
814 Content-Type: application/json
818 "startTime": "2015-09-28T13:00:00Z",
819 "reservationStatus": "active",
820 "reservationId": "vvvv-wwww-xxxx",
821 "storagePoolReserved": {
829 Update Storage Resource Reservation
830 ___________________________________
832 Request to update storage resource reservation
834 .. http:post:: /reservation/storage/update
841 POST /reservation/storage/update HTTP/1.1
842 Accept: application/json
845 "startTime": "2015-09-20T23:00:00Z",
846 "reservationId": "vvvv-wwww-xxxx"
849 **Example response**:
854 Content-Type: application/json
858 "startTime": "2015-09-20T23:00:00Z",
859 "reservationStatus": "active",
860 "reservationId": "vvvv-wwww-xxxx",
861 "storagePoolReserved": {
869 Terminate Storage Resource Reservation
870 ______________________________________
871 Request to terminate a storage resource reservation
873 .. http:delete:: /reservation/storage/(reservation_id)
876 Detailed Message Flows
877 ----------------------
879 Resource Capacity Management
880 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
882 .. figure:: images/figure5.png
886 Capacity Management Scenario
888 :numref:`figure5` shows a detailed message flow between the consumers and the
889 functional blocks inside the VIM and has the following steps:
891 Step 1: The consumer subscribes to capacity change notifications
893 Step 2: The Capacity Manager monitors the capacity information for the various
894 types of resources by querying the various Controllers (e.g. Nova, Neutron,
895 Cinder), either periodically or on demand and updates capacity information in
898 Step 3: Capacity changes are notified to the consumer
900 Step 4: The consumer queries the Capacity Manager to retrieve capacity detailed
906 .. figure:: images/figure6.png
910 Resource Reservation for Future Use Scenario
912 :numref:`figure6` shows a detailed message flow between the consumers and
913 the functional blocks inside the VIM and has the following steps:
915 Step 1: The consumer creates a resource reservation request for future use by
916 setting a start and end time for the allocation
918 Step 2: The consumer gets an immediate reply with a reservation status message
919 "reservationStatus" and an identifier to be used with this reservation instance
922 Step 3: The consumer subscribes to reservation notification events
924 Step 4: The Resource Reservation Manager checks the feasibility of the
925 reservation request by consulting the Capacity Manager
927 Step 5: The Resource Reservation Manager reserves the resources and stores the
928 list of reservations IDs generated by the Controllers (e.g. Nova, Neutron,
929 Cinder) in the Reservation Map
931 Step 6: Once the reservation process is completed, the VIM sends a notification
932 message to the consumer with information on the reserved resources
934 Step 7: When start time arrives, the consumer creates a resource allocation
937 Step 8: The consumer gets an immediate reply with an allocation status message
940 Step 9: The consumer subscribes to allocation notification events
942 Step 10: The Resource Allocation Manager allocates the reserved resources. If
943 not all reserved resources are allocated before expiry, the reserved resources
944 are released and a notification is sent to the consumer
946 Step 11: Once the allocation process is completed, the VIM sends a notification
947 message to the consumer with information on the allocated resources