summaryrefslogtreecommitdiffstats
path: root/requirements/resource_management/05-impl.rst
diff options
context:
space:
mode:
Diffstat (limited to 'requirements/resource_management/05-impl.rst')
-rwxr-xr-xrequirements/resource_management/05-impl.rst534
1 files changed, 534 insertions, 0 deletions
diff --git a/requirements/resource_management/05-impl.rst b/requirements/resource_management/05-impl.rst
new file mode 100755
index 0000000..7bbaa0c
--- /dev/null
+++ b/requirements/resource_management/05-impl.rst
@@ -0,0 +1,534 @@
+Detailed architecture and message flows
+=======================================
+
+Detailed northbound interface specification
+-------------------------------------------
+
+.. Note::
+ Once the output of the work from ETSI NFV IFA has been made publicly
+ available, the UML diagrams and REST/JSON examples in this section will be
+ extended
+
+Resource Capacity Management
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Subscribe Capacity Change Event
+_______________________________
+
+**SubscribeRequest (Consumer -> VIM)**
+
+.. uml::
+
+ @startuml
+ class SubscribeRequest {
+ + zone [0..N]: Identifier
+ + attributes [0..1]: String
+ + resourceItems [0..1]: String
+ + thresholds [0..N]: String
+ + notificationId [0..1]: Identifier
+ }
+ @enduml
+
+Subscription from Consumer to VIM to be notified about capacity changes.
+Input Parameters:
+
+* Zone [0..N]: Identification of the zone(s) to notify regarding capacity
+ change events
+* Attributes [0..1]: Attributes of resource items to be notified regarding
+ capacity change events
+* ResourceItems [0..1]: Identifiers of existing resource items to be notified
+ regarding capacity change events (such as images, flavors, virtual
+ containers, networks, physical machines, etc.)
+* Thresholds [0..N]: Lower/Upper limits for triggering change event for
+ used/reserved/total capacity change for specified resource items
+* NotificationId [0..1]: Identification of existing capacity change event
+ notification issued by the VIM. When specified. The previously defined
+ conditions for change event notifications wil be re-used and notification
+ sent to the additional requestor.
+
+Application/json::
+
+ {
+ "zone": ["opnfv-JP8", "opnfv-JP9"],
+ "resourceitems": "numvcinstances"
+ }
+
+**SubscribeReply (VIM -> Consumer)**
+
+.. uml::
+
+ @startuml
+ class SubscribeReply {
+ + subscriptionId [1]: Identifier
+ + created [1]: DateTime
+ + message [0..1]: String
+ }
+ @enduml
+
+Reply Parameters:
+
+* subscriptionId (Identifier): Identification of the capacity change event
+ notification issued by the VIM.
+* created (DateTime): Timestamp when subscription has been created
+* m essage [0..1] (String): Output message that provides additional information
+ about the subscribe request
+
+Application/json::
+
+ {
+ "created": "2015-03-23T00:00:01Z",
+ "notificationId": "abcdef-ghijkl-123456789"
+ }
+
+Query Resource Capacity
+_______________________
+
+**QueryRequest (NFVO -> VIM)**
+
+.. uml::
+
+ @startuml
+ class QueryCapacityRequest {
+ + capacityQueryFilter [0..1]: CapacityQueryFilterClass
+ }
+
+ class CapacityQueryFilter {
+ + zone [0..1]: Identifier
+ + resourceItems [0..1]: String
+ + flavorID [0..1]: Identifier
+ + timePeriod [0..1]: DateTime
+ }
+
+ QueryCapacityRequest "1" *- "0..1" CapacityQueryFilter : ""
+ @enduml
+
+.. -*
+
+Request to find out about used, reserved and total capacity.
+A CapacityQueryFilter can be used to narrow down the capacity details returned
+in the response message.
+
+Input Parameters:
+
+* capacityQueryFilter (CapacityQueryFilterClass): Optional information to
+ narrow down the QueryCapacityRequest, for example to limit the query to given
+ resource items, or a given resource zone. The capacityQueryFilter can also
+ include a FlavorId or template ID. In this case, the QueryCapacity is a
+ request to obtain information of the number of virtual resources that can be
+ instantiated according to this flavor with the actual available capacity.
+ A timePeriod can be specified to narrow down the query to a certain period of time.
+
+Application/json::
+
+ {
+ "capacityqueryfilter": {
+ "resourceitems": "numvcinstances,virtualmemorysize",
+ "zone": "opnfv-JP7"
+ }
+ }
+
+**QueryReply (VIM -> NFVO)**
+
+.. uml::
+
+ @startuml
+ class QueryCapacityReply {
+ + capacityInformation [0..N]: CapacityInformationClass
+ + zone [0..1]: Identifier
+ + lastUpdate [0..1]: DateTime
+ + message [0..1]: String
+ }
+
+ QueryCapacityReply "1" *- "0..N" CapacityInformationClass : ""
+ @enduml
+
+.. -*
+
+Reply Parameters:
+
+* capacityInformation [0..N] (CapacityInformationClass): Capacity information
+ matching the CapacityQueryFilter specified in the QueryCapacityRequest
+* Zone [0..1] (Identifier): Identification of the resource zone
+* lastUpdate [0..1] (DateTime): Timestamp of the capacity last update
+* message [0..1] (String): Output message that provides additional information
+ about the query capacity request
+
+Application/json::
+
+ {
+ "capacityInformation": {
+ "numvcinstances": {
+ "used": 5,
+ "reserved": 1,
+ "total": 10
+ },
+ "virtualmemorysize": {
+ "used": 4,
+ "reserved": 6,
+ "total": 16
+ }
+ },
+ "zone":"opnfv-JP7",
+ "lastUpdate":"2015-03-23T00:00:00Z"
+ }
+
+Notify Capacity Change Event
+____________________________
+
+**CapacityChangeNotification (VIM -> Consumer)**
+
+.. uml::
+
+ @startuml
+ class CapacityChangeNotification {
+ + capacityInformation [0..1]: CapacityInformationClass
+ + zone [0..1]: Identifier
+ + notificationTime [1]: DateTime
+ + notificationId [1]: Identifier
+ }
+
+ CapacityChangeNotification "1" *- "0..1" CapacityInformationClass : ""
+ @enduml
+
+.. -*
+
+Notification about capacity changes
+
+Notify Parameters:
+
+* capacityInformation [0..1] (CapacityInformationClass): Capacity information
+ matching a given subscription request defined by the Consumer
+* zone [0..1] (Identifier): Identification of the resource zone
+* notificationTime [1] (DateTime): Timestamp when the capacity change is
+ detected
+* notificationId [1]: Identification of the capacity change event notification
+ issued by the VIM.
+
+Application/json::
+
+ {
+ "capacity": {
+ "numvcinstances": {
+ "used": 16,
+ "reserved": 2,
+ "total": 20
+ }
+ },
+ "zone": "opnfv-JP8",
+ "notificationTime":"2015-03-23T12:00:05Z",
+ "notificationId":"abcdef-ghijkl-123456789"
+ }
+
+Resource Reservation
+^^^^^^^^^^^^^^^^^^^^
+
+Create Resource Reservation
+___________________________
+
+**CreateResourceReservationRequest (NFVO -> VIM)**
+
+.. uml::
+
+ @startuml
+ class CreateResourceReservationRequest {
+ + start [0..1]: DateTime
+ + end [0..1]: DateTime
+ + expiry [0..1]: DateTime
+ + virtualizationContainerReservation [0..N]: VirtualizationContainerReservationClass
+ + computePoolReservation [0..1]: ComputePoolReservationClass
+ + storagePoolReservation [0..1]: StoragePoolReservationClass
+ + networkReservation [0..1]: NetworkReservationClass
+ + zone [0..1]: Identifier
+ }
+
+ class VirtualizationContainerReservationClass {
+ + containerId [1]: Identifier
+ + flavor [0..1]: FlavorClass
+ }
+
+ CreateResourceReservationRequest "1" *- "0..N" VirtualizationContainerReservationClass : ""
+ VirtualizationContainerReservationClass "1" *-- "0..1" FlavorClass
+ CreateResourceReservationRequest "1" *-- "0..1" ComputePoolReservationClass
+ CreateResourceReservationRequest "1" *-- "0..1" StoragePoolReservationClass
+ CreateResourceReservationRequest "1" *-- "0..1" NetworkReservationClass
+ @enduml
+
+.. -*
+
+**CreateResourceReservationReply (VIM -> NFVO)**
+
+.. uml::
+
+ @startuml
+ class CreateResourceReservationReply {
+ + reservationId [1]: Identifier
+ + virtualizationContainerReserved [0..N]: VirtualizationContainerReservedClass
+ + computePoolReserved [0..1]: ComputePoolReservedClass
+ + storagePoolReserved [0..1]: StoragePoolReservedClass
+ + networkReserved [0..1]: NetworkReservedClass
+ + reservationStatus [1]: String
+ + startTime [0..1]: Time
+ + endTime [0..1]: Time
+ + message [0..1]: String
+ }
+
+ class VirtualizationContainerReservedClass {
+ + containerId [1]: Identifier
+ + flavor [0..1]: FlavorClass
+ }
+
+ CreateResourceReservationReply "1" *- "0..N" VirtualizationContainerReservedClass : ""
+ VirtualizationContainerReservedClass "1" *-- "0..1" FlavorClass
+ CreateResourceReservationReply "1" *-- "0..1" ComputePoolReservedClass
+ CreateResourceReservationReply "1" *-- "0..1" StoragePoolReservedClass
+ CreateResourceReservationReply "1" *-- "0..1" NetworkReservedClass
+ @enduml
+
+.. -*
+
+Subscribe / Notify Reservation Event
+____________________________________
+
+**SubscribeRequest (Consumer -> VIM)**
+
+.. uml::
+
+ @startuml
+ class SubscribeRequest {
+ + reservationId [1]: Identifier
+ + eventType [0..1]: String
+ }
+ @enduml
+
+**SubscribeReply (VIM -> Consumer)**
+
+.. uml::
+
+ @startuml
+ class SubscribeReply {
+ + notificationId [1]: Identifier
+ + created [1]: DateTime
+ + message [0..1]: String
+ }
+ @enduml
+
+**NotifyReservationEvent (VIM -> Consumer)**
+
+.. uml::
+
+ @startuml
+ class ReservationEventNotification {
+ + notificationId [1]: Identifier
+ + reservationId [1]: Identifier
+ + notificationTime [1]: DateTime
+ + vimId [1]: Identifier
+ + eventType [1]: String
+ + eventDetails [1]: String
+ + message [0..1]: String
+ }
+ @enduml
+
+Query Resource Reservation
+__________________________
+
+**QueryResourceReservationRequest (Consumer -> VIM)**
+
+.. uml::
+
+ @startuml
+ class QueryResourceReservationRequest {
+ + reservationQueryFilter [0..1]: ReservationQueryFilterClass
+ }
+
+ QueryResourceReservationRequest "1" *- "0..1" ReservationQueryFilterClass : ""
+ @enduml
+
+.. -*
+
+**QueryResourceReservationReply (VIM -> Consumer)**
+
+.. uml::
+
+ @startuml
+ class CreateResourceReservationReply {
+ + reservationId [1]: Identifier
+ + virtualizationContainerReserved [0..N]: VirtualizationContainerReservedClass
+ + computePoolReserved [0..1]: ComputePoolReservedClass
+ + storagePoolReserved [0..1]: StoragePoolReservedClass
+ + networkReserved [0..1]: NetworkReservedClass
+ + reservationStatus [1]: String
+ + message [0..1]: String
+ }
+
+ class VirtualizationContainerReservedClass {
+ + containerId [1]: Identifier
+ + flavor [0..1]: FlavorClass
+ }
+
+ CreateResourceReservationReply "1" *- "0..N" VirtualizationContainerReservedClass : ""
+ VirtualizationContainerReservedClass "1" *-- "0..1" FlavorClass
+ CreateResourceReservationReply "1" *-- "0..1" ComputePoolReservedClass
+ CreateResourceReservationReply "1" *-- "0..1" StoragePoolReservedClass
+ CreateResourceReservationReply "1" *-- "0..1" NetworkReservedClass
+ @enduml
+
+.. -*
+
+Update Resource Reservation
+___________________________
+
+**UpdateResourceReservationRequest (NFVO ->VIM)**
+
+.. uml::
+
+ @startuml
+ class UpdateResourceReservationRequest {
+ + reservationId [1]: Identifier
+ + start [0..1]: DateTime
+ + end [0..1]: DateTime
+ + expiry [0..1]: DateTime
+ + virtualizationContainerReservation [0..N]: VirtualizationContainerReservationClass
+ + computePoolReservation [0..1]: ComputePoolReservationClass
+ + storagePoolReservation [0..1]: StoragePoolReservationClass
+ + networkReservation [0..1]: NetworkReservationClass
+ + zone [0..1]: Identifier
+ }
+
+ class VirtualizationContainerReservationClass {
+ + containerId [1]: Identifier
+ + flavor [0..1]: FlavorClass
+ }
+
+ UpdateResourceReservationRequest "1" *- "0..N" VirtualizationContainerReservationClass : ""
+ VirtualizationContainerReservationClass "1" *-- "0..1" FlavorClass
+ UpdateResourceReservationRequest "1" *-- "0..1" ComputePoolReservationClass
+ UpdateResourceReservationRequest "1" *-- "0..1" StoragePoolReservationClass
+ UpdateResourceReservationRequest "1" *-- "0..1" NetworkReservationClass
+ @enduml
+
+.. -*
+
+**UpdateResourceReservationReply (VIM -> NFVO)**
+
+.. uml::
+
+ @startuml
+ class UpdateResourceReservationReply {
+ + reservationId [1]: Identifier
+ + virtualizationContainerReserved [0..N]: VirtualizationContainerReservedClass
+ + computePoolReserved [0..1]: ComputePoolReservedClass
+ + storagePoolReserved [0..1]: StoragePoolReservedClass
+ + networkReserved [0..1]: NetworkReservedClass
+ + reservationStatus [1]: String
+ + message [0..1]: String
+ }
+
+ class VirtualizationContainerReservedClass {
+ + containerId [1]: Identifier
+ + flavor [0..1]: FlavorClass
+ }
+
+ UpdateResourceReservationReply "1" *- "0..N" VirtualizationContainerReservedClass : ""
+ VirtualizationContainerReservedClass "1" *-- "0..1" FlavorClass
+ UpdateResourceReservationReply "1" *-- "0..1" ComputePoolReservedClass
+ UpdateResourceReservationReply "1" *-- "0..1" StoragePoolReservedClass
+ UpdateResourceReservationReply "1" *-- "0..1" NetworkReservedClass
+ @enduml
+
+.. -*
+
+Release Resource Reservation
+____________________________
+
+**ReleaseResourceReservationRequest (NFVO -> VIM)**
+
+.. uml::
+
+ @startuml
+ class ReleaseResourceReservationRequest {
+ + reservationId [1]: Identifier
+ }
+ @enduml
+
+**ReleaseResourceReservationReply (VIM -> NFVO)**
+
+.. uml::
+
+ @startuml
+ class ReleaseResourceReservationReply {
+ + reservationId [1]: Identifier
+ + message [0..1]: String
+ }
+ @enduml
+
+
+Detailed Message Flows
+----------------------
+
+Resource Capacity Management
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. figure:: images/figure5.png
+ :width: 90%
+
+ Capacity Management Scenario
+
+Figure 5 shows a detailed message flow between the consumers and the
+functionalblocks 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
+
+Resource Reservation
+^^^^^^^^^^^^^^^^^^^^
+
+.. figure:: images/figure6.png
+ :width: 90%
+
+ Resource Reservation for Future Use Scenario
+
+Figure 6 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