5. Detailed architecture and message flows¶
5.1. Detailed northbound interface specification¶
Note
This is Work in Progress.
5.1.1. ETSI NFV IFA Information Models¶
5.1.1.1. Compute Flavor¶
A compute flavor includes information about number of virtual CPUs, size of virtual memory, size of virtual storage, and virtual network interfaces [NFVIFA005].
5.1.2. Virtualised Compute Resources¶
5.1.2.1. Compute Capacity Management¶
5.1.2.1.1. Subscribe Compute Capacity Change Event¶
Subscription from Consumer to VIM to be notified about compute capacity changes
-
POST
/capacity/compute/subscribe
Example request:
POST /capacity/compute/subscribe HTTP/1.1 Accept: application/json { "zoneId": "12345", "resourceDescriptor": [ { "computeResourceTypeId": "vcInstances" } ], "threshold": [ { "capacity_info": "available", "condition": "lt", "value": 5 } ] }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "created": "2015-09-21T00:00:00Z", "capacityChangeSubscriptionId": "abcdef-ghijkl-123456789" }
Status Codes: - 400 Bad Request – resourceDescriptor is missing
5.1.2.1.2. Query Compute Capacity¶
Request to find out about available, reserved, total and allocated compute capacity.
-
GET
/capacity/compute/query
Example request:
GET /capacity/compute/query HTTP/1.1 Accept: application/json { "zoneId": "12345", "resourceDescriptor": { "computeResourceTypeId": "vcInstances" }, "timePeriod": { "startTime": "2015-09-21T00:00:00Z", "stopTime": "2015-09-21T00:05:30Z" } }
Example response:
HTTP/1.1 200 OK Content-Type: application/json { "zoneId": "12345", "lastUpdate": "2015-09-21T00:03:20Z", "capacityInformation": { "available": 4, "reserved": 17, "total": 50, "allocated": 29 } }
Query Parameters: - limit – Default is 10.
Status Codes: - 404 Not Found – resource zone unknown
5.1.2.1.3. Notify Compute Capacity Change Event¶
Notification about compute capacity changes
-
POST
/capacity/compute/notification
Example notification:
Content-Type: application/json { "zoneId": "12345", "notificationId": "zyxwvu-tsrqpo-987654321", "capacityChangeTime": "2015-09-21T00:03:20Z", "resourceDescriptor": { "computeResourceTypeId": "vcInstances" }, "capacityInformation": { "available": 4, "reserved": 17, "total": 50, "allocated": 29 } }
5.1.2.2. Compute Resource Reservation¶
5.1.2.2.1. Create Compute Resource Reservation¶
Request the reservation of compute resource capacity
-
POST
/reservation/compute/create
Example request:
POST /reservation/compute/create HTTP/1.1 Accept: application/json { "startTime": "2015-09-21T01:00:00Z", "computePoolReservation": { "numCpuCores": 20, "numVcInstances": 5, "virtualMemSize": 10 } }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-09-21T01:00:00Z", "reservationStatus": "initialized", "reservationId": "xxxx-yyyy-zzzz", "computePoolReserved": { "numCpuCores": 20, "numVcInstances": 5, "virtualMemSize": 10, "zoneId": "23456" } } }
and/or virtualized containers
-
POST
reservation/compute/create
Example request:
POST /reservation/compute/create HTTP/1.1 Accept: application/json { "startTime": "2015-10-05T15:00:00Z", "virtualizationContainerReservation": [ { "containerId": "myContainer", "containerFlavor": { "flavorId": "myFlavor", "virtualCpu": { "numVirtualCpu": 2, "cpuArchitecture": "x86" }, "virtualMemory": { "numaEnabled": "False", "virtualMemSize": 16 }, "virtualStorage": { "typeOfStorage": "volume", "sizeOfStorage": 16 } } } ] }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-10-05T15:00:00Z", "reservationId": "aaaa-bbbb-cccc", "reservationStatus": "initialized", "virtualizationContainerReserved": [ { "containerId": "myContainer", "containerFlavor": { "flavorId": "myFlavor", "virtualCpu": { "numVirtualCpu": 2, "cpuArchitecture": "x86" }, "virtualMemory": { "numaEnabled": "False", "virtualMemSize": 16 }, "virtualStorage": { "typeOfStorage": "volume", "sizeOfStorage": 16 } } } ] } }
5.1.2.2.2. Query Compute Resource Reservation¶
Request to find out about reserved compute resources that the consumer has access to.
-
GET
/reservation/compute/query
Example request:
GET /reservation/compute/query HTTP/1.1 Accept: application/json { "queryReservationFilter": [ { "reservationId": "xxxx-yyyy-zzzz" } ] }
Example response:
HTTP/1.1 200 OK Content-Type: application/json { "reservationData": { "startTime": "2015-09-21T01:00:00Z", "reservationStatus": "active", "reservationId": "xxxx-yyyy-zzzz", "computePoolReserved": { "numCpuCores": 20, "numVcInstances": 5, "virtualMemSize": 10, "zoneId": "23456" } } }
Status Codes: - 404 Not Found – reservation id unknown
5.1.2.2.3. Update Compute Resource Reservation¶
Request to update compute resource reservation
-
POST
/reservation/compute/update
Example request:
POST /reservation/compute/update HTTP/1.1 Accept: application/json { "startTime": "2015-09-14T16:00:00Z", "reservationId": "xxxx-yyyy-zzzz" }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-09-14TT16:00:00Z", "reservationStatus": "active", "reservationId": "xxxx-yyyy-zzzz", "computePoolReserved": { "numCpuCores": 20, "numVcInstances": 5, "virtualMemSize": 10, "zoneId": "23456" } } }
5.1.2.2.4. Terminate Compute Resource Reservation¶
Request to terminate a compute resource reservation
-
DELETE
/reservation/compute/
(reservation_id)
5.1.3. Virtualised Network Resources¶
5.1.3.1. Network Capacity Management¶
5.1.3.1.1. Subscribe Network Capacity Change Event¶
Susbcription from Consumer to VIM to be notified about network capacity changes
-
POST
/capacity/network/subscribe
Example request:
POST /capacity/network/subscribe HTTP/1.1 Accept: application/json { "resourceDescriptor": [ { "networkResourceTypeId": "publicIps" } ], "threshold": [ { "capacity_info": "available", "condition": "lt", "value": 5 } ] }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "created": "2015-09-28T00:00:00Z", "capacityChangeSubscriptionId": "bcdefg-hijklm-234567890" }
5.1.3.1.2. Query Network Capacity¶
Request to find out about available, reserved, total and allocated network capacity.
-
GET
/capacity/network/query
Example request:
GET /capacity/network/query HTTP/1.1 Accept: application/json { "resourceDescriptor": { "networkResourceTypeId": "publicIps" }, "timePeriod": { "startTime": "2015-09-28T00:00:00Z", "stopTime": "2015-09-28T00:05:30Z" } }
Example response:
HTTP/1.1 200 OK Content-Type: application/json { "lastUpdate": "2015-09-28T00:02:10Z", "capacityInformation": { "available": 4, "reserved": 10, "total": 64, "allocated": 50 } }
5.1.3.1.3. Notify Network Capacity Change Event¶
Notification about network capacity changes
-
POST
/capacity/network/notification
Example notification:
Content-Type: application/json { "notificationId": "yxwvut-srqpon-876543210", "capacityChangeTime": "2015-09-28T00:02:10Z", "resourceDescriptor": { "networkResourceTypeId": "publicIps" }, "capacityInformation": { "available": 4, "reserved": 10, "total": 64, "allocated": 50 } }
5.1.3.2. Network Resource Reservation¶
5.1.3.2.1. Create Network Resource Reservation¶
Request the reservation of network resource capacity and/or virtual networks, network ports
-
POST
/reservation/network/create
Example request:
POST /reservation/network/create HTTP/1.1 Accept: application/json { "startTime": "2015-09-28T01:00:00Z", "networkReservation": { "numPublicIps": 2 } }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-09-28T01:00:00Z", "reservationStatus": "initialized", "reservationId": "wwww-xxxx-yyyy", "networkReserved": { "publicIps": [ "10.2.91.60", "10.2.91.61" ] } } }
5.1.3.2.2. Query Network Resource Reservation¶
Request to find out about reserved network resources that the consumer has access to.
-
GET
/reservation/network/query
Example request:
GET /reservation/network/query HTTP/1.1 Accept: application/json { "queryReservationFilter": [ { "reservationId": "wwww-xxxx-yyyy" } ] }
Example response:
HTTP/1.1 200 OK Content-Type: application/json { "reservationData": { "startTime": "2015-09-28T01:00:00Z", "reservationStatus": "active", "reservationId": "wwww-xxxx-yyyy", "networkReserved": "publicIps": [ "10.2.91.60", "10.2.91.61" ] } }
5.1.3.2.3. Update Network Resource Reservation¶
Request to update network resource reservation
-
POST
/reservation/network/update
Example request:
POST /reservation/network/update HTTP/1.1 Accept: application/json { "startTime": "2015-09-21T16:00:00Z", "reservationId": "wwww-xxxx-yyyy" }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-09-21T16:00:00Z", "reservationStatus": "active", "reservationId": "wwww-xxxx-yyyy", "networkReserved": { "publicIps": [ "10.2.91.60", "10.2.91.61" ] } } }
5.1.3.2.4. Terminate Network Resource Reservation¶
Request to terminate a network resource reservation
-
DELETE
/reservation/network/
(reservation_id)
5.1.4. Virtualised Storage Resources¶
5.1.4.1. Storage Capacity Management¶
5.1.4.1.1. Subscribe Storage Capacity Change Event¶
Subscription from Consumer to VIM to be notified about storage capacity changes
-
POST
/capacity/storage/subscribe
Example request:
POST /capacity/storage/subscribe HTTP/1.1 Accept: application/json { "resourceDescriptor": [ { "storageResourceTypeId": "volumes" } ], "threshold": [ { "capacity_info": "available", "condition": "lt", "value": 3 } ] }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "created": "2015-09-28T12:00:00Z", "capacityChangeSubscriptionId": "cdefgh-ijklmn-345678901" }
5.1.4.1.2. Query Storage Capacity¶
Request to find out about available, reserved, total and allocated storage capacity.
-
GET
/capacity/storage/query
Example request:
GET /capacity/storage/query HTTP/1.1 Accept: application/json { "resourceDescriptor": { "storageResourceTypeId": "volumes" }, "timePeriod": { "startTime": "2015-09-28T12:00:00Z", "stopTime": "2015-09-28T12:04:45Z" } }
Example response:
HTTP/1.1 200 OK Content-Type: application/json { "lastUpdate": "2015-09-28T12:01:35Z", "capacityInformation": { "available": 2, "reserved": 4, "total": 10, "allocated": 4 } }
5.1.4.1.3. Notify Storage Capacity Change Event¶
Notification about storage capacity changes
-
POST
/capacity/storage/notification
Example notification:
Content-Type: application/json { "notificationId": "xwvuts-rqponm-765432109", "capacityChangeTime": "2015-09-28T12:01:35Z", "resourceDescriptor": { "storageResourceTypeId": "volumes" }, "capacityInformation": { "available": 2, "reserved": 4, "total": 10, "allocated": 4 } }
5.1.4.2. Storage Resource Reservation¶
5.1.4.2.1. Create Storage Resource Reservation¶
Request the reservation of storage resource capacity
-
POST
/reservation/storage/create
Example request:
POST /reservation/storage/create HTTP/1.1 Accept: application/json { "startTime": "2015-09-28T13:00:00Z", "storagePoolReservation": { "storageSize": 10, "numSnapshots": 3, "numVolumes": 2 } }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-09-28T13:00:00Z", "reservationStatus": "initialized", "reservationId": "vvvv-wwww-xxxx", "storagePoolReserved": { "storageSize": 10, "numSnapshots": 3, "numVolumes": 2 } } }
5.1.4.2.2. Query Storage Resource Reservation¶
Request to find out about reserved storage resources that the consumer has access to.
-
GET
/reservation/storage/query
Example request:
GET /reservation/storage/query HTTP/1.1 Accept: application/json { "queryReservationFilter": [ { "reservationId": "vvvv-wwww-xxxx" } ] }
Example response:
HTTP/1.1 200 OK Content-Type: application/json { "reservationData": { "startTime": "2015-09-28T13:00:00Z", "reservationStatus": "active", "reservationId": "vvvv-wwww-xxxx", "storagePoolReserved": { "storageSize": 10, "numSnapshots": 3, "numVolumes": 2 } } }
5.1.4.2.3. Update Storage Resource Reservation¶
Request to update storage resource reservation
-
POST
/reservation/storage/update
Example request:
POST /reservation/storage/update HTTP/1.1 Accept: application/json { "startTime": "2015-09-20T23:00:00Z", "reservationId": "vvvv-wwww-xxxx" }
Example response:
HTTP/1.1 201 CREATED Content-Type: application/json { "reservationData": { "startTime": "2015-09-20T23:00:00Z", "reservationStatus": "active", "reservationId": "vvvv-wwww-xxxx", "storagePoolReserved": { "storageSize": 10, "numSnapshots": 3, "numVolumes": 2 } } }
5.1.4.2.4. Terminate Storage Resource Reservation¶
Request to terminate a storage resource reservation
-
DELETE
/reservation/storage/
(reservation_id)
5.2. Detailed Message Flows¶
5.2.1. Resource Capacity Management¶
Fig. 5.2 shows a detailed message flow between the consumers and the functional blocks inside the VIM and has the following steps:
Step 1: The consumer subscribes to capacity change notifications
Step 2: The Capacity Manager monitors the capacity information for the various types of resources by querying the various Controllers (e.g. Nova, Neutron, Cinder), either periodically or on demand and updates capacity information in the Capacity Map
Step 3: Capacity changes are notified to the consumer
Step 4: The consumer queries the Capacity Manager to retrieve capacity detailed information
5.2.2. Resource Reservation¶
Fig. 5.3 shows a detailed message flow between the consumers and the functional blocks inside the VIM and has the following steps:
Step 1: The consumer creates a resource reservation request for future use by setting a start and end time for the allocation
Step 2: The consumer gets an immediate reply with a reservation status message “reservationStatus” and an identifier to be used with this reservation instance “reservationID”
Step 3: The consumer subscribes to reservation notification events
Step 4: The Resource Reservation Manager checks the feasibility of the reservation request by consulting the Capacity Manager
Step 5: The Resource Reservation Manager reserves the resources and stores the list of reservations IDs generated by the Controllers (e.g. Nova, Neutron, Cinder) in the Reservation Map
Step 6: Once the reservation process is completed, the VIM sends a notification message to the consumer with information on the reserved resources
Step 7: When start time arrives, the consumer creates a resource allocation request.
Step 8: The consumer gets an immediate reply with an allocation status message “allocationStatus”.
Step 9: The consumer subscribes to allocation notification events
Step 10: The Resource Allocation Manager allocates the reserved resources. If not all reserved resources are allocated before expiry, the reserved resources are released and a notification is sent to the consumer
Step 11: Once the allocation process is completed, the VIM sends a notification message to the consumer with information on the allocated resources
Revision: 3d658697ff9718eed3ca2e68430b389b8a61ca7c
Build date: December 23, 2015