diff options
-rw-r--r-- | docs/sections/architecture.rst | 41 | ||||
-rw-r--r-- | docs/sections/example.rst | 433 | ||||
-rw-r--r-- | docs/sections/homingspecification.rst | 483 | ||||
-rw-r--r-- | docs/sections/release-notes.rst | 25 |
4 files changed, 685 insertions, 297 deletions
diff --git a/docs/sections/architecture.rst b/docs/sections/architecture.rst index 88507fc..cfbd535 100644 --- a/docs/sections/architecture.rst +++ b/docs/sections/architecture.rst @@ -6,32 +6,35 @@ Architecture Introduction ------------------ -OOF-HAS is an policy-driven placement optimizing service (or homing service) that allows ONAP to deploy services -automatically across multiple sites and multiple clouds. It enables placement based on a wide variety of policy -constraints including capacity, location, platform capabilities, and other service specific constraints. - -HAS is a distributed resource broker that enables automated policy-driven optimized placement of services on a -global heterogeneous platform using ONAP. Given a set of service components (based on SO decomposition flows) -and requirements for placing these components (driven by policies), HAS finds optimal resources (cloud regions -or existing service instances) to home these service components such that it meets all the service requirements. -HAS is architected as an extensible homing service that can accommodate a growing set of homing objectives, policy -constraints, data sources and placement algorithms. It is also service-agnostic by design and can easily onboard -new services with minimal effort. Therefore, HAS naturally extends to a general policy-driven optimizing placement -platform for wider range of services, e.g., DCAE micro-services, ECOMP control loops, server capacity, etc. -Finally, HAS provides an traceable mechanism for what-if analysis which is critical for ease of understanding a +OOF-HAS is an policy-driven placement optimizing service (or homing service) that allows ONAP to deploy services +automatically across multiple sites and multiple clouds. It enables placement based on a wide variety of policy +constraints including capacity, location, platform capabilities, and other service specific constraints. In +Frankfurt release, it is also used for the E2E Network Slicing use case to select an appropriate existing Network +Slice Instance (NSI) / Network Slice Sub-net Instances (NSSIs), and/or provide the Slice Profile for creating a +new NSSI which shall be part of a new NSI. + +HAS is a distributed resource broker that enables automated policy-driven optimized placement of services on a +global heterogeneous platform using ONAP. Given a set of service components (based on SO decomposition flows) +and requirements for placing these components (driven by policies), HAS finds optimal resources (cloud regions +or existing service instances) to home these service components such that it meets all the service requirements. +HAS is architected as an extensible homing service that can accommodate a growing set of homing objectives, policy +constraints, data sources and placement algorithms. It is also service-agnostic by design and can easily onboard +new services with minimal effort. Therefore, HAS naturally extends to a general policy-driven optimizing placement +platform for wider range of services, e.g., DCAE micro-services, ECOMP control loops, server capacity, etc. +Finally, HAS provides an traceable mechanism for what-if analysis which is critical for ease of understanding a homing recommendation and resolving infeasibility scenarios. HAS in Service Instantiation workflows -------------------------------------------- -Below is an illustration of HAS interactions with other ONAP components to enable Policy driven homing. The homing +Below is an illustration of HAS interactions with other ONAP components to enable Policy driven homing. The homing policy constraints have been expanded (and categorized) to highlight the range of constraints that could be provided -to HAS for determining the homing solution. The figure also shows how HAS uses a plugin-based approach to allow an -extensible set of constraints and data models. +to HAS for determining the homing solution. The figure also shows how HAS uses a plugin-based approach to allow an +extensible set of constraints and data models. .. image:: ./diagrams/HAS_PolicyDrivenHoming.png -More information on how homing constraints are specified can be found at OOF-HAS Homing Specification Guide, and a -sample homing template has been drawn up for residential vCPE Homing Use Case. +More information on how homing constraints are specified can be found at OOF-HAS Homing Specification Guide, and a +sample homing template has been drawn up for residential vCPE Homing Use Case. HAS Architecture (R2) ---------------------- @@ -49,6 +52,8 @@ Residential vCPE: https://wiki.onap.org/display/DW/vCPE+Homing+Use+Case 5G RAN: https://wiki.onap.org/display/DW/Homing+5G+RAN+VNFs +E2E Network Slicing: https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R6+Frankfurt + A sample heuristic greedy algorithm of HAS (using a vCPE as example) ------------------------------------------------------------------------ diff --git a/docs/sections/example.rst b/docs/sections/example.rst index a3dd55b..c2254e0 100644 --- a/docs/sections/example.rst +++ b/docs/sections/example.rst @@ -4,142 +4,315 @@ Example Conductor Templates Example 1 --------- -.. code:: yaml +.. code:: json - name: yyy-yyy-yyyy - files: {} - timeout: 600 - limit: 1 - template: - homing_template_version: '2018-02-01' - parameters: - service_name: '' - service_id: d61b2543-5914-4b8f-8e81-81e38575b8ec - customer_lat: 32.89748 - customer_long: -97.040443 - locations: - customer_loc: - latitude: - get_param: customer_lat - longitude: - get_param: customer_long - demands: - vGMuxInfra: - - inventory_provider: aai - inventory_type: service - service_type: vGMuxInfra-xx - attributes: - customer-id: '' - orchestration-status: '' - model-invariant-id: b3dc6465-942c-42af-8464-2bf85b6e504b - model-version-id: ba3b8981-9a9c-4945-92aa-486234ec321f - service-type: vGMuxInfra-xx - equipment-role: '' - global-customer-id: SDN-ETHERNET-INTERNET - vG: - - inventory_provider: aai - inventory_type: cloud - service_type: 71d563e8-e714-4393-8f99-cc480144a05e - constraints: - affinity_vCPE: - type: zone - demands: - - vGMuxInfra - - vG - properties: - category: complex - qualifier: same - optimization: - minimize: - sum: - - product: - - '1' - - distance_between: - - customer_loc - - vGMuxInfra - - product: - - '1' - - distance_between: - - customer_loc - - vG + { + "name": "yyy-yyy-yyyy", + "files": {}, + "timeout": 600, + "limit": 1, + "num_solutions": 10, + "template": { + "homing_template_version": "2018-02-01", + "parameters": { + "service_name": "", + "service_id": "d61b2543-5914-4b8f-8e81-81e38575b8ec", + "customer_lat": 32.89748, + "customer_long": -97.040443 + }, + "locations": { + "customer_loc": { + "latitude": { + "get_param": "customer_lat" + }, + "longitude": { + "get_param": "customer_long" + } + } + }, + "demands": { + "vGMuxInfra": [ + { + "inventory_provider": "aai", + "inventory_type": "service", + "service_type": "vGMuxInfra-xx", + "attributes": { + "customer-id": "", + "orchestration-status": "", + "model-invariant-id": "b3dc6465-942c-42af-8464-2bf85b6e504b", + "model-version-id": "ba3b8981-9a9c-4945-92aa-486234ec321f", + "service-type": "vGMuxInfra-xx", + "equipment-role": "", + "global-customer-id": "SDN-ETHERNET-INTERNET" + } + } + ], + "vG": [ + { + "inventory_provider": "aai", + "inventory_type": "cloud", + "service_type": "71d563e8-e714-4393-8f99-cc480144a05e" + } + ] + }, + "constraints": { + "affinity_vCPE": { + "type": "zone", + "demands": [ + "vGMuxInfra", + "vG" + ], + "properties": { + "category": "complex", + "qualifier": "same" + } + } + }, + "optimization": { + "minimize": { + "sum": [ + { + "product": [ + "1", + { + "distance_between": [ + "customer_loc", + "vGMuxInfra" + ] + } + ] + }, + { + "product": [ + "1", + { + "distance_between": [ + "customer_loc", + "vG" + ] + } + ] + } + ] + } + } + } + } -Example 1 +The example template is for the placement of vG and vGMuxInfra. It has +an affinity constraint which specifies that both the vnfs must be in +the same complex. The optimiation here is to minimize the sum of the +distances of the vnfs from the customer location. + +Example 2 +--------- + +.. code:: json + + { + "files": {}, + "limit": 1, + "num_solutions": 10, + "name": "a2e3e0cc-3a97-44fc-8a08-1b86143fbdd3", + "template": { + "constraints": { + "affinity_vCPE": { + "demands": [ + "vgMuxAR", + "vGW" + ], + "properties": { + "category": "complex", + "qualifier": "same" + }, + "type": "zone" + }, + "distance-vGMuxAR": { + "demands": [ + "vgMuxAR" + ], + "properties": { + "distance": "< 500 km", + "location": "customer_loc" + }, + "type": "distance_to_location" + }, + "distance-vGW": { + "demands": [ + "vGW" + ], + "properties": { + "distance": "< 1500 km", + "location": "customer_loc" + }, + "type": "distance_to_location" + } + }, + "demands": { + "vGW": [ + { + "attributes": { + "model-invariant-id": "782c87a6-b712-47d1-9c5b-1ea2cd9a2dd5", + "model-version-id": "9877dbbe-8ada-40a2-8adb-f6f26f1ad9ab" + }, + "inventory_provider": "aai", + "inventory_type": "cloud", + "service_type": "c3e0e82b-3367-48ce-ab00-27dc2e91a34a" + } + ], + "vgMuxAR": [ + { + "attributes": { + "global-customer-id": "SDN-ETHERNET-INTERNET", + "model-invariant-id": "565d5b75-11b8-41be-9991-ee03a0049159", + "model-version-id": "61414c6c-6082-4e03-9824-bf53c3582b78" + }, + "inventory_provider": "aai", + "inventory_type": "service", + "service_type": "46b29078-8442-4ea3-bea6-9199a7d514d4" + } + ] + }, + "homing_template_version": "2017-10-10", + "locations": { + "customer_loc": { + "latitude": { + "get_param": "customer_lat" + }, + "longitude": { + "get_param": "customer_long" + } + } + }, + "optimization": { + "minimize": { + "sum": [ + { + "product": [ + "1", + { + "distance_between": [ + "customer_loc", + "vgMuxAR" + ] + } + ] + }, + { + "product": [ + "1", + { + "distance_between": [ + "customer_loc", + "vGW" + ] + } + ] + } + ] + } + }, + "parameters": { + "customer_lat": 32.89748, + "customer_long": 97.040443, + "service_id": "0dbb9d5f-27d9-429b-bc36-293e9fab7731", + "service_name": "" + } + }, + "timeout": 600 + } + +This is similar to the first example except that it has an additional distance +constraint which specifies that the distance of each vnf from the customer +location must be less than 500km. + +Example 3 --------- -.. code:: yaml +.. code:: json + + { + "files": {}, + "limit": 10, + "name": "urllc_sample", + "num_solution": "10", + "template": { + "constraints": { + "URLLC_core_Threshold": { + "demands": [ + "URLLC_core" + ], + "properties": { + "evaluate": [ + { + "attribute": "latency", + "operator": "lte", + "threshold": 30, + "unit": "ms" + } + ] + }, + "type": "threshold" + }, + "URLLC_ran_Threshold": { + "demands": [ + "URLLC_ran" + ], + "properties": { + "evaluate": [ + { + "attribute": "latency", + "operator": "lte", + "threshold": 30, + "unit": "ms" + } + ] + }, + "type": "threshold" + } + }, + "demands": { + "URLLC_core": [ + { + "filtering_attributes": { + "model-invariant-id": "21d57d4b-52ad-4d3c-a798-248b5bb9124a", + "model-version-id": "bfba363e-e39c-4bd9-a9d5-1371c28f4d22", + "orchestration-status": "active", + "service-role": "nssi" + }, + "inventory_provider": "aai", + "inventory_type": "nssi", + "region": "RegionOne", + "unique": "true" + } + ], + "URLLC_ran": [ + { + "filtering_attributes": { + "model-invariant-id": "aa2d56ea-773d-11ea-bc55-0242ac130003", + "model-version-id": "d6296806-773d-11ea-bc55-0242ac130003", + "orchestration-status": "active", + "service-role": "nssi" + }, + "inventory_provider": "aai", + "inventory_type": "nssi", + "region": "RegionOne", + "unique": "true" + } + ] + }, + "homing_template_version": "2018-02-01" + }, + "timeout": 1200 + } + +This template is for the selecting the NSSI instances for Network +Slicing use case. The demand here is the Slice subnets and the threshold +constraint specifies that the latency of the the subnets must be less +than a particular threshold. + - files: {} - limit: 1 - name: a2e3e0cc-3a97-44fc-8a08-1b86143fbdd3 - template: - constraints: - affinity_vCPE: - demands: - - vgMuxAR - - vGW - properties: - category: complex - qualifier: same - type: zone - distance-vGMuxAR: - demands: - - vgMuxAR - properties: - distance: "< 500 km" - location: customer_loc - type: distance_to_location - distance-vGW: - demands: - - vGW - properties: - distance: "< 1500 km" - location: customer_loc - type: distance_to_location - demands: - vGW: - - attributes: - model-invariant-id: 782c87a6-b712-47d1-9c5b-1ea2cd9a2dd5 - model-version-id: 9877dbbe-8ada-40a2-8adb-f6f26f1ad9ab - inventory_provider: aai - inventory_type: cloud - service_type: c3e0e82b-3367-48ce-ab00-27dc2e91a34a - vgMuxAR: - - attributes: - global-customer-id: SDN-ETHERNET-INTERNET - model-invariant-id: 565d5b75-11b8-41be-9991-ee03a0049159 - model-version-id: 61414c6c-6082-4e03-9824-bf53c3582b78 - inventory_provider: aai - inventory_type: service - service_type: 46b29078-8442-4ea3-bea6-9199a7d514d4 - homing_template_version: '2017-10-10' - locations: - customer_loc: - latitude: - get_param: customer_lat - longitude: - get_param: customer_long - optimization: - minimize: - sum: - - product: - - '1' - - distance_between: - - customer_loc - - vgMuxAR - - product: - - '1' - - distance_between: - - customer_loc - - vGW - parameters: - customer_lat: 32.89748 - customer_long: 97.040443 - service_id: 0dbb9d5f-27d9-429b-bc36-293e9fab7731 - service_name: '' - timeout: 600 - Contact ------- Shankar Narayanan shankarpnsn@gmail.com -a
\ No newline at end of file diff --git a/docs/sections/homingspecification.rst b/docs/sections/homingspecification.rst index 0edb441..4950a9a 100644 --- a/docs/sections/homingspecification.rst +++ b/docs/sections/homingspecification.rst @@ -1,10 +1,10 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. +.. Copyright (C) 2020 Wipro Limited. All rights reserved. Homing Specification Guide ========================== -*Updated: 10 October 2017* This document describes the Homing Template format, used by the Homing service. It is a work in progress and subject to frequent revision. @@ -159,7 +159,8 @@ Placemark An address expressed in geographic region-agnostic terms (referred to as a *placemark*). -*Support for this schema is deferred.* +*This is an example as of Frankfurt release. Support for this schema is + deferred to subsequent release.* +-----------------------------------+----------------------------------+ | Key | Value | @@ -189,10 +190,10 @@ a *placemark*). | | information for the placemark. | +-----------------------------------+----------------------------------+ -**Questions** +**Note:** -- What geocoder can we use to convert placemarks to a - latitude/longitude? +- A geocoder could be used to convert placemarks to a + latitude/longitude Examples ~~~~~~~~ @@ -237,63 +238,74 @@ Demand criteria is dependent upon the inventory provider in use. **Provider-agnostic Schema** -+---------------------------------+------------------------------------+ -| Key | Value | -+=================================+====================================+ -| ``inventory_provider`` | A HAS-supported inventory | -| | provider. | -+---------------------------------+------------------------------------+ -| ``inventory_type`` | The reserved word ``cloud`` (for | -| | cloud regions) or the reserved | -| | word ``service`` (for existing | -| | service instances). Exactly one | -| | inventory type may be specified. | -+---------------------------------+------------------------------------+ -| ``attributes`` (Optional) | A list of key-value pairs, that is | -| | used to select inventory | -| | candidates that match *all* the | -| | specified attributes. The key | -| | should be a uniquely identifiable | -| | attribute at the inventory | -| | provider. | -+---------------------------------+------------------------------------+ -| ``service_type`` (Optional) | If ``inventory_type`` is | -| | ``service``, a list of one or more | -| | provider-defined service types. If | -| | only one service type is | -| | specified, it may appear without | -| | list markers (``[]``). | -+---------------------------------+------------------------------------+ -| ``service_id`` (Optional) | If ``inventory_type`` is | -| | ``service``, a list of one or more | -| | provider-defined service ids. If | -| | only one service id is specified, | -| | it may appear without list markers | -| | (``[]``). | -+---------------------------------+------------------------------------+ -| ``default_cost`` (Optional) | The default cost of an inventory | -| | candidate, expressed as currency. | -| | This must be specified if the | -| | inventory provider may not always | -| | return a cost. | -+---------------------------------+------------------------------------+ -| ``required_candidates`` | A list of one or more candidates | -| (Optional) | from which a solution will be | -| | explored. Must be a valid | -| | candidate as described in the | -| | **candidate schema**. | -+---------------------------------+------------------------------------+ -| ``excluded_candidates`` | A list of one or more candidates | -| (Optional) | that should be excluded from the | -| | search space. Must be a valid | -| | candidate as described in the | -| | **candidate schema**. | -+---------------------------------+------------------------------------+ -| ``existing_placement`` | The current placement for the | -| (Optional) | demand. Must be a valid candidate | -| | as described in the **candidate | -| | schema**. | -+---------------------------------+------------------------------------+ ++-----------------------------+------------------------------------+ +| Key | Value | ++=============================+====================================+ +| ``inventory_provider`` | A HAS-supported inventory | +| | provider. | ++-----------------------------+------------------------------------+ +| ``inventory_type`` | The reserved words ``cloud`` | +| | (cloud regions), ``service`` (for | +| | existing service instances), | +| | ``vfmodule`` (for vf instances), | +| | ``nssi`` (for slice subnet | +| | instances). Exactly one inventory | +| | type may be specified. | ++-----------------------------+------------------------------------+ +| ``filtering_attributes`` | A list of key-value pairs, that is | +| (Optional) | used to select inventory | +| | candidates that match *all* the | +| | specified attributes. The key | +| | should be a uniquely identifiable | +| | attribute at the inventory | +| | provider. | ++-----------------------------+------------------------------------+ +| ``passthrough_attributes`` | A list of key-value pairs, that | +| (Optional) | will be added to the candidate's | +| | attribute directly from template. | ++-----------------------------+------------------------------------+ +| ``service_type`` (Optional) | If ``inventory_type`` is | +| | ``service``, a list of one or more | +| | provider-defined service types. If | +| | only one service type is | +| | specified, it may appear without | +| | list markers (``[]``). | ++-----------------------------+------------------------------------+ +| ``service_id`` (Optional) | If ``inventory_type`` is | +| | ``service``, a list of one or more | +| | provider-defined service ids. If | +| | only one service id is specified, | +| | it may appear without list markers | +| | (``[]``). | ++-----------------------------+------------------------------------+ +| ``default_cost`` (Optional) | The default cost of an inventory | +| | candidate, expressed as currency. | +| | This must be specified if the | +| | inventory provider may not always | +| | return a cost. | ++-----------------------------+------------------------------------+ +| ``required_candidates`` | A list of one or more candidates | +| (Optional) | from which a solution will be | +| | explored. Must be a valid | +| | candidate as described in the | +| | **candidate schema**. | ++-----------------------------+------------------------------------+ +| ``excluded_candidates`` | A list of one or more candidates | +| (Optional) | that should be excluded from the | +| | search space. Must be a valid | +| | candidate as described in the | +| | **candidate schema**. | ++-----------------------------+------------------------------------+ +| ``existing_placement`` | The current placement for the | +| (Optional) | demand. Must be a valid candidate | +| | as described in the **candidate | +| | schema**. | ++-----------------------------+------------------------------------+ + +**Note** + +- The demand attributes in the template come from either policy or from + a northbound request scope. .. _examples-1: @@ -306,73 +318,84 @@ for ONAP. **Inventory Provider Criteria** -+---------------------------------+------------------------------------+ -| Key | Value | -+=================================+====================================+ -| ``inventory_provider`` | Examples: ``aai``, ``multicloud``. | -+---------------------------------+------------------------------------+ -| ``inventory_type`` | The reserved word ``cloud`` (for | -| | new inventory) or the reserved | -| | word ``service`` (for existing | -| | inventory). Exactly one inventory | -| | type may be specified. | -+---------------------------------+------------------------------------+ -| ``attributes`` (Optional) | A list of key-value pairs to match | -| | against inventory when drawing | -| | candidates. | -+---------------------------------+------------------------------------+ -| ``service_type`` (Optional) | Examples may include ``vG``, | -| | ``vG_MuxInfra``, etc. | -+---------------------------------+------------------------------------+ -| ``service_id`` (Optional) | Must be a valid service id. | -| | Examples may include ``vCPE``, | -| | ``VoLTE``, etc. | -+---------------------------------+------------------------------------+ -| ``default_cost`` (Optional) | The default cost of an inventory | -| | candidate, expressed as a unitless | -| | number. | -+---------------------------------+------------------------------------+ -| ``required_candidates`` | A list of one or more valid | -| (Optional) | candidates. See **Candidate | -| | Schema** for details. | -+---------------------------------+------------------------------------+ -| ``excluded_candidates`` | A list of one or more valid | -| (Optional) | candidates. See **Candidate | -| | Schema** for details. | -+---------------------------------+------------------------------------+ -| ``existing_placement`` | A single valid candidate, | -| (Optional) | representing the current placement | -| | for the demand. See **candidate | -| | schema** for details. | -+---------------------------------+------------------------------------+ ++-----------------------------+------------------------------------+ +| Key | Value | ++=============================+====================================+ +| ``inventory_provider`` | Examples: ``aai``, ``multicloud``. | ++-----------------------------+------------------------------------+ +| ``inventory_type`` | The reserved words ``cloud`` | +| | (cloud regions), ``service`` (for | +| | existing service instances), | +| | ``vfmodule`` (for vf instances), | +| | ``nssi`` (for slice subnet | +| | instances). Exactly one inventory | +| | type may be specified. | ++-----------------------------+------------------------------------+ +| ``filtering attributes`` | A list of key-value pairs to match | +| (Optional) | against inventory when drawing | +| | candidates. | ++-----------------------------+------------------------------------+ +| ``passthrough_attributes`` | A list of key-value pairs, that | +| (Optional) | will be added to the candidate's | +| | attribute directly from template. | ++-----------------------------+------------------------------------+ +| ``service_type`` (Optional) | Examples may include ``vG``, | +| | ``vG_MuxInfra``, etc. | ++-----------------------------+------------------------------------+ +| ``service_id`` (Optional) | Must be a valid service id. | +| | Examples may include ``vCPE``, | +| | ``VoLTE``, etc. | ++-----------------------------+------------------------------------+ +| ``default_cost`` (Optional) | The default cost of an inventory | +| | candidate, expressed as a unitless | +| | number. | ++-----------------------------+------------------------------------+ +| ``required_candidates`` | A list of one or more valid | +| (Optional) | candidates. See **Candidate | +| | Schema** for details. | ++-----------------------------+------------------------------------+ +| ``excluded_candidates`` | A list of one or more valid | +| (Optional) | candidates. See **Candidate | +| | Schema** for details. | ++-----------------------------+------------------------------------+ +| ``existing_placement`` | A single valid candidate, | +| (Optional) | representing the current placement | +| | for the demand. See **candidate | +| | schema** for details. | ++-----------------------------+------------------------------------+ **Candidate Schema** -The following is the schema for a valid ``candidate``: \* -``candidate_id`` uniquely identifies a candidate. Currently, it is -either a Service Instance ID or Cloud Region ID. \* ``candidate_type`` -identifies the type of the candidate. Currently, it is either ``cloud`` -or ``service``. \* ``inventory_type`` is defined as described in -**Inventory Provider Criteria** (above). \* ``inventory_provider`` -identifies the inventory from which the candidate was drawn. \* -``host_id`` is an ID of a specific host (used only when referring to -service/existing inventory). \* ``cost`` is expressed as a unitless -number. \* ``location_id`` is always a location ID of the specified -location type (e.g., for a type of ``cloud`` this will be an Cloud -Region ID). \* ``location_type`` is an inventory provider supported -location type. \* ``latitude`` is a valid latitude corresponding to the -*location_id*. \* ``longitude`` is a valid longitude corresponding to -the *location_id*. \* ``city`` (Optional) city corresponding to the -*location_id*. \* ``state`` (Optional) state corresponding to the -*location_id*. \* ``country`` (Optional) country corresponding to the -*location_id*. \* ``region`` (Optional) geographic region corresponding -to the *location_id*. \* ``complex_name`` (Optional) Name of the complex -corresponding to the *location_id*. \* ``cloud_owner`` (Optional) refers -to the *cloud owner* (e.g., ``azure``, ``aws``, ``att``, etc.). \* -``cloud_region_version`` (Optional) is an inventory provider supported -version of the cloud region. \* ``physical_location_id`` (Optional) is -an inventory provider supported CLLI code corresponding to the cloud -region. +The following is the schema for a valid ``candidate``: + +- ``candidate_id`` uniquely identifies a candidate. Currently, it is + either a Service Instance ID or Cloud Region ID. +- ``candidate_type`` identifies the type of the candidate. Currently, it + is either ``cloud`` or ``service``. \* ``inventory_type`` is defined + as described in **Inventory Provider Criteria** (above). +- ``inventory_provider`` identifies the inventory from which the + candidate was drawn. \* +- ``host_id`` is an ID of a specific host (used only when referring to + service/existing inventory). +- ``cost`` is expressed as a unitless number. +- ``location_id`` is always a location ID of the specified location type + (e.g., for a type of ``cloud`` this will be an Cloud Region ID). +- ``location_type`` is an inventory provider supported location type. +- ``latitude`` is a valid latitude corresponding to the *location_id*. +- ``longitude`` is a valid longitude corresponding to the *location_id*. +- ``city`` (Optional) city corresponding to the *location_id*. +- ``state`` (Optional) state corresponding to the *location_id*. +- ``country`` (Optional) country corresponding to the *location_id*. +- ``region`` (Optional) geographic region corresponding to the + *location_id*. +- ``complex_name`` (Optional) Name of the complex corresponding to the + *location_id*. +- ``cloud_owner`` (Optional) refers to the *cloud owner* + (e.g., ``azure``, ``aws``, ``att``, etc.). +- ``cloud_region_version`` (Optional) is an inventory provider supported + version of the cloud region. +- ``physical_location_id`` (Optional) is an inventory provider supported + CLLI code corresponding to the cloud region. **Examples** @@ -620,9 +643,122 @@ region. } } -**Questions** \* Currently, candidates are either service instances or -cloud regions. As new services are on-boarded, this can be evolved to -represent different types of resources. +**vfmodule candidate** + +.. code-block:: json + + { + "candidate_id": "d187d743-5932-4fb9-a42d-db0a5be5ba7e", + "city": "example-city-val-27150", + "cloud_owner": "CloudOwner", + "cloud_region_version": "1", + "complex_name": "clli1", + "cost": 1.0, + "country": "example-country-val-94173", + "existing_placement": "false", + "host_id": "vFW-PKG-MC", + "inventory_provider": "aai", + "inventory_type": "vfmodule", + "ipv4-oam-address": "oam_network_zb4J", + "ipv6-oam-address": "", + "latitude": "example-latitude-val-89101", + "location_id": "RegionOne", + "location_type": "att_aic", + "longitude": "32.89948", + "nf-id": "fcbff633-47cc-4f38-a98d-4ba8285bd8b6", + "nf-name": "vFW-PKG-MC", + "nf-type": "vnf", + "passthrough_attributes": { + "td-role": "anchor" + }, + "physical_location_id": "clli1", + "port_key": "vlan_port", + "region": "example-region-val-13893", + "service_instance_id": "3e8d118c-10ca-4b4b-b3db-089b5e9e6a1c", + "service_resource_id": "vPGN-XX", + "sriov_automation": "false", + "state": "example-state-val-59487", + "uniqueness": "false", + "vf-module-id": "d187d743-5932-4fb9-a42d-db0a5be5ba7e", + "vf-module-name": "vnf-pkg-r1-t2-mc", + "vim-id": "CloudOwner_RegionOne", + "vlan_key": "vlan_key", + "vnf-type": "5G_EVE_Demo/5G_EVE_PKG 0", + "vservers": [ + { + "l-interfaces": [ + { + "interface-id": "4b333af1-90d6-42ae-8389-d440e6ff0e93", + "interface-name": "vnf-pkg-r1-t2-mc-vpg_private_2_port-mf7lu55usq7i", + "ipv4-addresses": [ + "10.100.100.2" + ], + "ipv6-addresses": [], + "macaddr": "fa:16:3e:c4:07:7f", + "network-id": "59763a33-3296-4dc8-9ee6-2bdcd63322fc", + "network-name": "" + }, + { + "interface-id": "85dd57e9-6e3a-48d0-a784-4598d627e798", + "interface-name": "vnf-pkg-r1-t2-mc-vpg_private_1_port-734xxixicw6r", + "ipv4-addresses": [ + "10.0.110.2" + ], + "ipv6-addresses": [], + "macaddr": "fa:16:3e:b5:86:38", + "network-id": "cdb4bc25-2412-4b77-bbd5-791a02f8776d", + "network-name": "" + }, + { + "interface-id": "edaff25a-878e-4706-ad52-4e3d51cf6a82", + "interface-name": "vnf-pkg-r1-t2-mc-vpg_private_0_port-e5qdm3p5ijhe", + "ipv4-addresses": [ + "192.168.10.200" + ], + "ipv6-addresses": [], + "macaddr": "fa:16:3e:ff:d8:6f", + "network-id": "932ac514-639a-45b2-b1a3-4c5bb708b5c1", + "network-name": "" + } + ], + "vserver-id": "00bddefc-126e-4e4f-a18d-99b94d8d9a30", + "vserver-name": "zdfw1fwl01pgn01" + } + ] + } + +**nssi candidate** + +.. code-block:: json + + { + "candidate_id": "1a636c4d-5e76-427e-bfd6-241a947224b0", + "candidate_type": "nssi", + "conn_density": 0, + "cost": 1.0, + "domain": "cn", + "e2e_latency": 0, + "exp_data_rate": 0, + "exp_data_rate_dl": 100, + "exp_data_rate_ul": 100, + "instance_name": "nssi_test_0211", + "inventory_provider": "aai", + "inventory_type": "nssi", + "jitter": 0, + "latency": 20, + "max_number_of_ues": 0, + "nsi_id": "4115d3c8-dd59-45d6-b09d-e756dee9b518", + "nsi_model_invariant_id": "39b10fe6-efcc-40bc-8184-c38414b80771", + "nsi_model_version_id": "8b664b11-6646-4776-9f59-5c3de46da2d6", + "nsi_name": "nsi_test_0211", + "payload_size": 0, + "reliability": 99.99, + "resource_sharing_level": "0", + "survival_time": 0, + "traffic_density": 0, + "ue_mobility_level": "stationary", + "uniqueness": "true" + } **Examples** @@ -658,7 +794,11 @@ The following examples illustrate two demands: - inventory_provider: aai inventory_type: cloud -**Questions** \* Do we need to support cost as a function ? +**Note** + +- Cost could be used to specify the cost of choosing a specific + candidate. For example, choosing an existing VNF instance can be less + costlier than creating a new instance. Constraints ----------- @@ -792,9 +932,13 @@ Constraint Types | | specific | | | location/address. | +-------------------------------------------+--------------------------+ +| ``threshold`` | Constraint that checks if| +| | an attribute is within | +| | the threshold. | ++-------------------------------------------+--------------------------+ *Note: Constraint names marked “Deferred” **will not** be supported in -the initial release of HAS.* +the current release of HAS.* Threshold Values ~~~~~~~~~~~~~~~~ @@ -1589,10 +1733,10 @@ settings. **Notes** -- For ONAP Beijing release the REQUEST_DICT is of the following format as +- For the current release the REQUEST_DICT is of the following format as defined by the policy for vim_fit. The REQUEST_DICT is an opaque request object defined through policy, so it is not restricted to this format. In - ONAP Beijing release MultiCloud supports the check_vim_capacity using the + the current release MultiCloud supports the check_vim_capacity using the following grammar. .. code-block:: json @@ -1630,15 +1774,15 @@ This constraint has no properties. type: inventory_group demands: [demand_1, demand_2] -*Note: Only pair-wise groups are supported at this time. If three or -more demands are specified, only the first two will be used.* +*Note: Only pair-wise groups are supported at this time. The list must +have only two demands.* License ~~~~~~~ Constrain demands according to license availability. -*Support for this constraint is deferred.* +*Support for this constraint is deferred to a later release.* **Schema** @@ -1666,7 +1810,7 @@ Network Between Demands Constrain each pairwise combination of two or more demands by network requirements. -*Support for this constraint is deferred.* +*Support for this constraint is deferred to a later release.* **Schema** @@ -1708,7 +1852,7 @@ Network To Location Constrain one or more demands by network requirements relative to a specific location. -*Support for this constraint is deferred.* +*Support for this constraint is deferred to a later release.* **Schema** @@ -1751,7 +1895,7 @@ Constrain each demand by its cluster capability requirements. For example, as described by an OpenStack Heat template and operational environment. -*Support for this constraint is deferred.* +*Support for this constraint is deferred to a later release.* **Schema** @@ -1787,6 +1931,52 @@ environment. template: http://repository/my/stack_template environment: http://repository/my/stack_environment +Threshold +~~~~~~~~~ + +Constrain each demand by an attribute which is within a certain +threshold. + +**Schema** + ++---------------+--------------------------------------------------------+ +| Property | Value | ++===============+========================================================+ +| ``evaluate`` | List of attributes and its threshold | ++---------------+--------------------------------------------------------+ + ++-------------------------+------------------------------------------+ +| Property for evaluation | Value | ++=========================+==========================================+ +| ``attribute`` | Attribute of a candidate | ++-------------------------+------------------------------------------+ +| ``threshold`` | Threshold Value | ++-------------------------+------------------------------------------+ +| ``operator`` | Condition to check. Supported Values are | +| | ``gte``, ``lte``, ``lt``, ``gt``, ``eq`` | ++-------------------------+------------------------------------------+ +| ``unit`` (optional) | Attribute's unit of measurement | ++-------------------------+------------------------------------------+ + +.. code:: yaml + + urllc_threshold: + type: threshold + demands: ['URLLC'] + properties: + evaluate: + - attribute: latency + operator: lte + threshold: 50 + unit: ms + - attribute: reliability + operator: gte + threshold: 99.99 + +**Note:** + +- The status of the constraint support is of Frankfurt release. + Reservations ------------ @@ -1899,8 +2089,6 @@ While the template format supports any number of arrangements of numbers, operators, and functions, HAS’s solver presently expects a very specific arrangement. -Until further notice: - - Optimizations must conform to a single goal of ``minimize`` followed by a ``sum`` operator. - The sum can consist of two ``distance_between`` function calls, or @@ -1939,10 +2127,10 @@ there is a point of diminishing returns in terms of readability! **Notes** -- In the first version, we do not support more than one dimension in - the optimization (e.g., Minimize distance and cost). For supporting - multiple dimensions we would need a function the normalize the unit - across dimensions. +- We do not support more than one dimension in the optimization + (e.g., Minimize distance and cost). For supporting multiple + dimensions we would need a function the normalize the unit across + dimensions. Intrinsic Functions ------------------- @@ -2008,10 +2196,11 @@ would be of that file’s contents. - ``file:///path/to/stack_template.yaml`` - ``http://hostname/environment.yaml`` -**Questions** +**Note** - If Homing will only be accessed over DMaaP, files will need to be - embedded using the Homing API request format. + embedded using the Homing API request format. This will be a + consideration when DMaaP integration happens. get_param ~~~~~~~~~ diff --git a/docs/sections/release-notes.rst b/docs/sections/release-notes.rst index 011b4d8..fc6886e 100644 --- a/docs/sections/release-notes.rst +++ b/docs/sections/release-notes.rst @@ -27,7 +27,7 @@ Release Data | **OOF Project** | | | | | +--------------------------------------+--------------------------------------+ -| **Docker images** | - optf-has 2.0.0 | +| **Docker images** | - optf-has 2.0.4 | | | | +--------------------------------------+--------------------------------------+ | **Release designation** | 6.0.0 frankfurt | @@ -41,7 +41,24 @@ Release Data New features ------------ - +- Passthrough attributes has been added to placement request. +- HAS container to run as non-root user. +- HAS Component has be upgraded to Python 3.8. +- New inventory type NSSI is added. +- Functionality has been added to AAI plugin to get the nssi candidates + from AAI. +- New constraint named ``threshold`` has been added to the solver. + +Bug Fixes +========= + +- OPTFRA-734 Nginx failing to start as non-root user. +- OPTFRA-733 AAF authentication fails while handling API requests. +- OPTFRA-746 Add NSI id to NSSI candidate. +- OPTFRA-747 Music api not using server url in https mode. +- OPTFRA-728 HPA CSIT test failures. +- OPTFRA-726 Nginx needs to run as root. +- OPTFRA-630 Sonar failing jobs. Known Limitations, Issues and Workarounds ========================================= @@ -61,6 +78,10 @@ Workarounds Security Notes -------------- +**Fixed Security issues** + +All HAS containers were running as root user which is fixed in this +release under OPTFRA-711. References ========== |