Skip to content
Snippets Groups Projects
Commit b5a6fa26 authored by Silvia Almagia's avatar Silvia Almagia
Browse files

add md doc

parent 65c7833e
No related branches found
No related tags found
No related merge requests found
Showing
with 2842 additions and 0 deletions
# Alarms
In Openslice parts of TMF642 Alarm Management API are currently implemented. Alarms can be managed through the TMF API endpoint as well as the UI.
## Alarms and Actions
Note: Actions is an experimental feature. We expect to have a more mature solution in future. The component in the architecture is the Openslcie Assurance Services
Alarms can be automatically resolved by specific actions. Today only the following actions are offered.
* execDay2
* scaleServiceEqually
## execDay2
Usually used to perform a Day2 configuration (towards OSM). To use it, Create a New Action Specification Name=execDay2 as following
[![Openslice usage](./images/alarms_actions/day2actionspec.png)](./images/alarms_actions/day2actionspec.png)
Now make a Service Order for your service. In this example ςε used a cirros NSD
Create a New Action Rule for the running services as the following example:
[![Openslice usage](./images/alarms_actions/action_rule_exampleday2.png)](./images/alarms_actions/action_rule_exampleday2.png)
The scope is the running cirros service.
Params should be paramname=value;paramname2=value2;paramname3=value3 (must exist in the VNF otherwise OSM will raise an error).
In this case should be filename=test.txt
Primitive=touch
ServiceId = select the service which will accept the Day2. In this case is the same
To test it:
Go to the Service Inventory and select the active Service.
Note the UUID of the service (e.g. c4e7990a-e174-4cd2-9133-b10e56721e08 copy from address bar), DeploymentRequestID and NSDID from characteristics
You can either use the UUID of the service or the DeploymentRequestID and POST to the Alarms endpoint ( /tmf-api/alarmManagement/v4/alarm)
If the DeploymentRequestID is used then POST:
```
{
"alarmRaisedTime": "2021-06-29T12:30:24.675Z",
"alarmReportingTime": "2021-06-29T12:30:54.675Z",
"state": "raised",
"alarmType": "qualityOfServiceAlarm",
"probableCause": "thresholdCrossed",
"ackState": "unacknowledged",
"perceivedSeverity": "major",
"sourceSystemId": "mano-client-service",
"alarmDetails": "NSID=3;DeploymentRequestID=1",
"specificProblem": "myalram raised"
}
```
If the UUID is used then POST:
```
{
"alarmRaisedTime": "2021-06-29T12:30:24.675Z",
"alarmReportingTime": "2021-06-29T12:30:54.675Z",
"state": "raised",
"alarmType": "qualityOfServiceAlarm",
"probableCause": "thresholdCrossed",
"ackState": "unacknowledged",
"perceivedSeverity": "major",
"sourceSystemId": "mano-client-service",
"alarmDetails": "analarm",
"specificProblem": "myalram raised",
"affectedService": [
{
"id": "c4e7990a-e174-4cd2-9133-b10e56721e08"
}
]
}
```
The Alarm to be created must have the affected Service ID equal to the running service from the scope (the cirros_ns)
Go to service inventory you will see the notes and also the service characteristics for any EXEC_ACTION updates
You can also adjust the alarm conditions. They must match true so the alarm to be acknowledged
So if another external service raises an Alarm (with POST) for the running service, a Day2 will be performed on another Service
## scaleServiceEqually
This action is used from getting a scaling event from OSM. Please see the next demo for details on how it works
### Prototype demo
You can watch how we used the prototype on the following ETSI ZMS PoC #2
* ETSI ZMS PoC #2: <https://www.etsi.org/events/1905-webinar-zsm-poc-2-showcase-automated-network-slice-scaling-in-multi-site-environments/>
# Architecture
Openslice offers the following main functionalities:
* Service Catalog Management: A CSP will have the ability to manage the Service Catalog Items, their attributes , organize in categories and decide what to make available to Customers
* Services Specifications: A CSP will be able to manage Service Specifications
* Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties
* Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs
* Service Order: The Customer will be able to place a Service Order
* Service Inventory: The Customer and Provider will be able to view deployed Services status
The following figure displays the overall architecture of Openslice.
[![Openslice architecture](../images/architecture.png)](../images/architecture.png)
Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:
* Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility’s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory
* An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service
* A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics
* An authentication server implementing Oauth2 authentication scheme
* A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)
* A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog
* A microservice that is capable to interface to an issue management system. For example it raises an issue to all related stakeholders (CSP, NOP, CSC) that a new Service Order is requested
* Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster
* A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs
The following figure depicts how Openslice microservices are deployed
[![Openslice microservices network deployment](../images/microservices_network_deployment.png)](../images/microservices_network_deployment.png)
## Deploying Openslice in multi domain scenarios
A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.
TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.
The following figure shows how openslice could be used in such scenarios:
[![Openslice multi-domain-architecture](../images/multi-domain-architecture.png)](../images/multi-domain-architecture.png)
See more [Consuming Services From External Partner Organizations](./consumingServicesFromExternalPartners.md)
# Central Logging
Openslice follows the centralized log management concept, i.e. a type of logging solution system that consolidates the log data from different services and pushes it to a central, accessible and easy-to-use interface.
For that reason, Elasticsearch is elected as an open-source centralized logging solution for collecting, parsing and storing logs towards a real-time data analytics tool that provides insights from any type of structured and unstructured data source.
\ No newline at end of file
# Consuming Services From External Partner Organizations
A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.
TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.
The following figure shows how openslice could be used in such scenarios:
[![Openslice multi-domain-architecture](../images/multi-domain-architecture.png)](../images/multi-domain-architecture.png)
In Openslice we can consume services from 3rd parties via Open APIs.
We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:
- Import Service Specifications
- Create a Service Order
- Use the Service Inventory to query the status of the service ordered to the external partner organization
## Define an Organization as 3rd party to consume services East-West
An organization must have the following characteristics in openslice catalog, like for example:
"EXTERNAL_TMFAPI_BASEURL", "http://portal.openslice.io"
"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID", "authOpensliceProvider"
"EXTERNAL_TMFAPI_OAUTH2CLIENTID", "osapiWebClientId"
"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET", "secret"
"EXTERNAL_TMFAPI_OAUTH2SCOPES", scopes
"EXTERNAL_TMFAPI_OAUTH2TOKENURI", "http://portal.openslice.io/osapi-oauth-server/oauth/token"
"EXTERNAL_TMFAPI_USERNAME", "admin"
"EXTERNAL_TMFAPI_PASSWORD", "openslice"
"EXTERNAL_TMFAPI_SERVICE_CATALOG_URLS" = "/tmf-api/serviceCatalogManagement/v4/serviceSpecification?type=CustomerFacingServiceSpecification" (this is optional, fetch a list of service specs it will be relative with the BASEURL. If the url is empty then no specs will be fetched, the EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS might be used)
"EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS" = "/tmf-api/serviceCatalogManagement/v4/serviceCategory/{categoryid}" (this example will fetch all specs in a category. You may define comma separated URLs of categories API URL . This will fetch specifications of every defined category. If you want only one specific category put for example the uuid only of one category: "/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d". multiple urls should be "/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d,/tmf-api/serviceCatalogManagement/v4/serviceCategory/9b6d8bf3-abd2-43c4-8154-c8c6fe5545b2")
"EXTERNAL_TMFAPI_SERVICE_SPEC" = "/tmf-api/serviceCatalogManagement/v4/serviceSpecification"
"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS"= "/test/v1/serviceorder" (this is optional)
An example Organization defined example in json:
```
{
"uuid": "1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "Openslice.io",
"id": "1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae",
"isHeadOffice": null,
"isLegalEntity": null,
"nameType": null,
"organizationType": null,
"tradingName": null,
"contactMedium": [],
"creditRating": [],
"existsDuring": null,
"externalReference": [],
"organizationChildRelationship": [],
"organizationIdentification": [],
"organizationParentRelationship": null,
"otherName": [],
"partyCharacteristic": [
{
"uuid": "3a2f7221-e0a2-4a6b-88d1-534c8e1963f6",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_CLIENTREGISTRATIONID",
"valueType": null,
"value": {
"value": "authOpensliceProvider",
"alias": null
}
},
{
"uuid": "c24bb527-f178-4d38-9b93-2027c1732876",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_USERNAME",
"valueType": null,
"value": {
"value": "admin",
"alias": null
}
},
{
"uuid": "27e45df8-414b-44c6-a5d5-3f064e2cfd3b",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_PASSWORD",
"valueType": null,
"value": {
"value": "openslice",
"alias": null
}
},
{
"uuid": "e0e470b8-6024-4014-8a18-2333e5465ce1",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET",
"valueType": null,
"value": {
"value": "secret",
"alias": null
}
},
{
"uuid": "3e0de762-ac80-4c1e-a0a1-f265ff0899b4",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_OAUTH2SCOPES",
"valueType": null,
"value": {
"value": "admin;read",
"alias": null
}
},
{
"uuid": "0bbb8314-f7f2-420d-9fed-ba054b15f886",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_OAUTH2TOKENURI",
"valueType": null,
"value": {
"value": "http://portal.openslice.io/osapi-oauth-server/oauth/token",
"alias": null
}
},
{
"uuid": "3a567de4-79eb-4006-a500-3e5229b44175",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_OAUTH2CLIENTID",
"valueType": null,
"value": {
"value": "osapiWebClientId",
"alias": null
}
},
{
"uuid": "6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": null,
"href": null,
"name": "EXTERNAL_TMFAPI_BASEURL",
"valueType": null,
"value": {
"value": "http://portal.openslice.io",
"alias": null
}
}
],
"relatedParty": [],
"status": null,
"taxExemptionCertificate": []
}
```
\ No newline at end of file
# Issue Management
For issue management support, Openslice relies on Bugzilla. Bugzilla is a ticketing tool that allows issue reporting and tracking via tickets to all relevant stakeholders.
The figure below displays the overall issue management service architecture integrating Bugzilla as its core and how this tool interacts with other Openslice services presenting some distinctive scenarios. It should be noted that Bugzilla tickets will not only be used for bugs/errors, but also for general requests, e.g. Service Order procedure.
[![Issue management system](../images/issue_management.png)](../images/issue_management.png)
\ No newline at end of file
This diff is collapsed.
# API interaction
## OAuth token
See [oauth](./oauth.md)
## Request a protected API resource
Example: Get all vxfs (check the `Authorization:Bearer` to be correct)
```
curl -H "Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4" http://localhost:13000/osapi/admin/vxfs
```
Example response:
```
[
{
"id": 1,
"owner": {
"id": 1,
"organization": "ee",
"name": "Portal Administrator",
"email": "",
"username": "admin",
"createdAt": null
},
"uuid": "a954daf2-16da-4b7e-ae42-4825936d453c",
"name": "cirros_vnfd",
"iconsrc": "/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png",
"shortDescription": "cirros_vnfd",
"longDescription": "Simple VNF example with a cirros",
"version": "1.0",
"packageLocation": "/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz",
"dateCreated": 1568971426000,
"dateUpdated": 1568981107000,
"categories": [
{
"id": 3,
"name": "Service",
"productsCount": 1,
"appscount": 0,
"vxFscount": 1
},
{
"id": 2,
"name": "Networking",
"productsCount": 1,
"appscount": 0,
"vxFscount": 1
}
],
"extensions": [],
"validationJobs": [],
"screenshots": "",
"vendor": "OSM",
"published": false,
"termsOfUse": null,
"descriptor": "vnfd-catalog:\n vnfd:\n - connection-point:\n - name: eth0\n type: VPORT\n description: Simple VNF example with a cirros\n id: cirros_vnfd\n logo: cirros-64.png\n mgmt-interface:\n cp: eth0\n name: cirros_vnfd\n short-name: cirros_vnfd\n vdu:\n - count: 1\n description: cirros_vnfd-VM\n id: cirros_vnfd-VM\n image: cirros034\n interface:\n - external-connection-point-ref: eth0\n name: eth0\n position: '1'\n type: EXTERNAL\n virtual-interface:\n bandwidth: '0'\n type: VIRTIO\n vpci: 0000:00:0a.0\n name: cirros_vnfd-VM\n vm-flavor:\n memory-mb: 512\n storage-gb: 1\n vcpu-count: 1\n vendor: OSM\n version: '1.0'\n",
"descriptorHTML": "<h3>cirros_vnfd</h3><br><b>Vendor: </b>OSM<br><b>Version: </b>1.0<br><b>Description: </b>Simple VNF example with a cirros<br><b>VM Count: </b>1<br><b>vCPU Count: </b>1<br><b>Memory: </b>512 MB<br><b>Storage: </b>1 GB<br>",
"certified": false,
"certifiedBy": null,
"validationStatus": "UNDER_REVIEW",
"packagingFormat": "OSMvFIVE",
"supportedMANOPlatforms": [
{
"id": 1,
"name": "osm fivee",
"version": "osm fivee",
"description": "osm five"
}
],
"vxfOnBoardedDescriptors": [],
"vfimagesVDU": [
{
"id": 1,
"name": "cirros034",
"uuid": "d4549610-8abd-42ad-97f4-0a64e1c93977",
"shortDescription": "Automatically created during vxf cirros_vnfd submission. Owner must update.",
"packageLocation": null,
"publicURL": null,
"dateCreated": 1568971426000,
"dateUpdated": null,
"refVxFs": [
{
"id": 1,
"name": "cirros_vnfd"
}
],
"owner": {
"id": 1,
"organization": "ee",
"name": "Portal Administrator",
"email": "",
"username": "admin",
"active": true,
"currentSessionID": null,
"apikey": "e41c1cc4-aa56-4b7e-9f4d-64589549d768",
"createdAt": 1568711859000,
"roles": [
"ADMIN",
"MENTOR"
]
},
"published": false,
"termsOfUse": null,
"deployedInfrastructures": []
}
]
},
{
"id": 2,
"owner": {
"id": 1,
"organization": "ee",
"name": "Portal Administrator",
"email": "",
"username": "admin",
"createdAt": null
},
"uuid": "4ab80095-a63e-4fe7-8598-e1c7e880706e",
"name": "cirros_sriov_vnfd",
"iconsrc": null,
"shortDescription": "cirros_sriov_vnf",
"longDescription": "Simple VNF example with a cirros SRIOV interface",
"version": "1.0",
"packageLocation": "/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz",
"dateCreated": 1568971740000,
"dateUpdated": 1568981100000,
"categories": [
{
"id": 4,
"name": "tyu",
"productsCount": 1,
"appscount": 0,
"vxFscount": 1
},
{
"id": 5,
"name": "tyi",
"productsCount": 1,
"appscount": 0,
"vxFscount": 1
}
],
"extensions": [],
"validationJobs": [],
"screenshots": "",
"vendor": "OSM",
"published": false,
"termsOfUse": null,
"descriptor": "vnfd:vnfd-catalog:\n vnfd:\n - connection-point:\n - name: eth0\n type: VPORT\n - name: eth1\n type: VPORT\n description: Simple VNF example with a cirros SRIOV interface\n id: cirros_sriov_vnfd\n logo: cirros-64.png\n mgmt-interface:\n cp: eth0\n name: cirros_sriov_vnf\n short-name: cirros_sriov_vnf\n vdu:\n - count: 1\n description: cirros_sriov_vnfd-VM\n guest-epa:\n cpu-pinning-policy: DEDICATED\n cpu-thread-pinning-policy: PREFER\n mempage-size: SMALL\n numa-node-policy:\n mem-policy: STRICT\n node:\n - id: '1'\n node-cnt: '1'\n id: cirros_sriov_vnfd-VM\n image: cirros-0.3.6-x86_64\n interface:\n - external-connection-point-ref: eth0\n name: eth0\n position: '1'\n type: EXTERNAL\n virtual-interface:\n bandwidth: '0'\n type: VIRTIO\n vpci: 0000:00:0a.0\n - external-connection-point-ref: eth1\n name: eth1\n position: '2'\n type: EXTERNAL\n virtual-interface:\n type: SR-IOV\n name: cirros_sriov_vnfd-VM\n vm-flavor:\n memory-mb: 4096\n storage-gb: 10\n vcpu-count: 4\n vendor: OSM\n version: '1.0'\n",
"descriptorHTML": "<h3>cirros_sriov_vnf</h3><br><b>Vendor: </b>OSM<br><b>Version: </b>1.0<br><b>Description: </b>Simple VNF example with a cirros SRIOV interface<br><b>VM Count: </b>1<br><b>vCPU Count: </b>1<br><b>Memory: </b>4096 MB<br><b>Storage: </b>10 GB<br>",
"certified": false,
"certifiedBy": null,
"validationStatus": "UNDER_REVIEW",
"packagingFormat": "OSMvFIVE",
"supportedMANOPlatforms": [
{
"id": 1,
"name": "osm fivee",
"version": "osm fivee",
"description": "osm five"
}
],
"vxfOnBoardedDescriptors": [],
"vfimagesVDU": [
{
"id": 2,
"name": "cirros-0.3.6-x86_64",
"uuid": "be121176-1d62-4a1b-a3c1-7dce2e069d22",
"shortDescription": "Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.",
"packageLocation": null,
"publicURL": null,
"dateCreated": 1568971740000,
"dateUpdated": null,
"refVxFs": [
{
"id": 2,
"name": "cirros_sriov_vnfd"
}
],
"owner": {
"id": 1,
"organization": "ee",
"name": "Portal Administrator",
"email": "",
"username": "admin",
"active": true,
"currentSessionID": null,
"apikey": "e41c1cc4-aa56-4b7e-9f4d-64589549d768",
"createdAt": 1568711859000,
"roles": [
"ROLE_ADMIN",
"ROLE_MENTOR"
]
},
"published": false,
"termsOfUse": null,
"deployedInfrastructures": []
}
]
}
]
```
# Openslice NFV Web Portal
The [NFV Web Portal](http://portal.openslice.io/nfvportal) offers a domain-specific UI to manage NFV Services.
Indicatively, the portal can be used to:
- Register new a new MANO provider (e.g. OSM)
- Synchronize the onboarded VNF/NS packages, and the VIMs of the registered MANO provider
- Onboard/Delete VNF/NS packages on specific MANO provider
- Deploy a NS to a target MANO provider
More information can be found at [NFV Services](../nfvcatalogs.md).
\ No newline at end of file
# Authentication Server
Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment
API users needs to authenticate.
All APIs (except grant token request) must include Bearer token in request Authorization header.
##OAuth token
Get first an oauth token, using your username and password.
```
curl -X POST http://portal.openslice.io/auth/realms/openslice/protocol/openid-connect/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=demouser' -d 'password=demouser' -d 'grant_type=password' -d 'client_id=osapiWebClientId'
```
response:
```
{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwZjUxMDk5Yy0wNTIzLTRjNGQtODM0Zi1iNDc0YzBjOTA1MzkifQ.eyJleHAiOjE1ODgyNDIwNzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiZmViOTg5NWEtOTY5ZS00MzIzLWJjY2QtZTY2YzQ0NGE1MzJlIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0Iiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.cDTx9BE1Df8EfGYm3VLr_MNFeymxZtJhMtlK7PVbIuk","token_type":"bearer","not-before-policy":1586797346,"session_state":"3350f493-6627-4373-8544-defd27ad3c74","scope":"profile email"}
```
The `access_token` will be used next as a Bearer.
```
curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer yJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1MjQsImlhdCI6MTU4ODI0MDIyNCwianRpIjoiYjg0NGYxZDAtMzk3Mi00YTMyLThiMWEtZDAxMDY3OGZjMTQ4IiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tY2xpIiwic2Vzc2lvbl9zdGF0ZSI6ImFmMmMzZmY1LTE4YWQtNDFkNC1hYTAyLTFlMGJkNzNmOTM5MSIsImFjciI6IjEiLCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiZGVtb3VzZXIifQ.SMtgV1E44_K_MQumGXZtWsLGVhYNaoM8Pk-DiFIZtUP4Zu-ervOsxHVQMX1frgVERR4jJidBcSshy9TnJ3UjF4l33WujHltbs-1UPy-gaIufVuEpl8RmbjOti3Up70vLfLXbzb6kN6WaahgobWXlbJsSXXwaBPQP6vSX5KigCa8TmzXcuqom14lOrlU-RB2zQTlJ30p7d9ag-a7o3I5m9GZWLJCZW2UYMl1JkskTHKgilA8HFQY4C9DYwWu8YDMyzqQSNumrTlURalBFidFbZvb1kp4dAyct8TysSWSbxxiwaL2RX1PWUqk-5Fpc1Q6BnBC8muMheiukFuoSkuADAg'^C
ubuntu@portal:~$ curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw'
Response:
[{"uuid":"9e186cd5-b2b2-4a06-b1d6-895720193bc9","lastUpdate":"2020-03-11T23:19:05Z","@baseType":"BaseEntity","@schemaLocation":null,"@type":"ServiceCatalog","href":null,"name":"Example Facility Services","description":"Example Facility Services","lifecycleStatus":"Active","version":"1.0","validFor":{"endDateTime":"2039-11-20T23:07:21Z","startDateTime":"2019-11-20T23:07:21Z"},"relatedParty":null,"id":"9e186cd5-b2b2-4a06-b1d6-895720193bc9","category":[{"@baseType":"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef","@schemaLocation":null,"@type":"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef","href":null,"name":"Generic Services","@referredType":null,"id":"98b9adf1-a1d6-4165-855f-153ddc2131b1"},{"@baseType":"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef","@schemaLocation":null,"@type":"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef","href":null,"name":"External","@referredType":null,"id":"08ffdb3c-6237-45d0-9f3a-d43b5fc5f0b6"},{"@baseType":"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef","@schemaLocation":null,"@type":"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef","href":null,"name":"eMBB","@referredType":null,"id":"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b"}]}]
```
\ No newline at end of file
# Openslice Service Orchestration and Order Management - OSOM
OSOM is a service responsible for:
* Service Order Management (SOM)
* Service Orchestration (SO)
It uses open source Flowable Business process engine (https://www.flowable.org) .
A Service Order follows the states as defined in TMF641 specification:
[![Service Order state](../images/service_order_states.png)](../images/service_order_states.png)
## Initial state
When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.
[![Initial state](../images/service_order_initial_state.png)](../images/service_order_initial_state.png)
Administrators are notified usually from the Ticketing System of a new order. They login to Openslice and change the State of the order either to ACKNOWLEDGED or REJECTED. If ACKNOWLEDGED they can Propose a startDate, add Notes, and add any additional service items
## Order scheduler
A process checks every 1 minute for ACKNOWLEDGED orders.
[![Order scheduler BPM](../images/order_scheduler_bpm.png)](../images/order_scheduler_bpm.png)
[![Order scheduler](../images/order_scheduler_diagram.png)](../images/order_scheduler_diagram.png)
It retrieves all orders that are in ACKNOWLEDGED state and if the start date is in time it will initialize the process by settingn the order in IN_PROGRESS state. Finally the Start Order Process will start.
## Start order process
This process for now is a draft simple prototype to make a simple orchestration via NFVO. Here the actual Services (TMF638/640 model) are created and attached to Service Order and Service Inventory.
[![Start Order BPM](../images/start_order_process_bpm.png)](../images/start_order_process_bpm.png)
[![Start Order interactions](../images/start_order_process_diagram.png)](../images/start_order_process_diagram.png)
We expect here to check which tasks can be orchestrated by NFVO and which by human. We create the equivalent Services(TMF638/640 model) for this order.
1. During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory
2. The Services(TMF638 model) are assigned to the Order O1 In supportService List
3. Each OrderItem OI1 is related to one serviceSpecification
4. Each ServiceSpecification has also related serviceSpecRelationships
5. So if we receive an order O1 for a ServiceSpec A which relates to (a bundle of) 3 specs(2 CFS, 1 RFS) we do the following:
1. Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1
2. We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS)
3. At this point the order will have 1 Local Service Orchestration Process(S_A), 2 supportingServices refs(S_C1, S_C2) and 1 supportingResource(S_R1)
4. The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory
5. Service S_A will have:
1. startMode 1: Automatically by the managed environment
2. State: RESERVED and the Lifecycle will be handled by OSOM
6. Services S_C1 and S_C2 we decide that cannot be orchestrated then they have
1. startMode: 3: Manually by the Provider of the Service
2. State: RESERVED and the Lifecycle will be handled by OSOM
3. If the CFS is a bundle spec it is further recursively orchestrated
7. Service S_R1 will have
1. startMode 1: Automatically by the managed environment.
2. State: RESERVED
3. IF The Service has the characteristic CharacteristicByName( "NSDID") it will be further processed by the NFVO
There will be two instances of task "User Task Manual Complete Service" each for Services S_C1 and S_C2. The task is Transient for now. It displays only the services that are not automated!
Here is a flow for future:
1. We wait here for human decision.
2. From API we get a result:
a. If set to ACTIVE/TERMINATED then we complete the task
b. In any other state we stay in this task until it is resolved as in step a
c. The Status of ORDER O1 is also updated to PARTIAL
There will be an instance of NFVODeploymentRequest process each for Service S_R1. (see later)
1. This process is related with the NFVO orchestration
2. It will send a msg to NFVO(s?) for a specific deployment request
All services in "Order Complete" are in a status:
1. Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED
2. The Status of ORDER O1 is also updated to COMPLETED or PARTIAL (in case we have some services running) or FAILED (in cases we have errors)
A Service follows the states as defined in TMF638 Service Inventory specification:
[![Service state](../images/service_states.png)](../images/service_states.png)
## NFVODeploymentRequest process
[![NFVODeploymentRequest BPM](../images/NFVODeploymentReq_process.png)](../images/NFVODeploymentReq_process.png)
This process is related with the NFVO orchestration
It will send a msg to NFVO(s?) for a specific deployment request
Then it checks the deployment status. It will wait 30 secs each time until the deployment is running (or failed)
## Check In Progress orders process
Every 1 minute the "Check In Progress Orders" process is executed checking if a supported Service changed state (i.e. to ACTIVE) then the whole Order will change state (e.g. go to COMPLETED)
[![Check In Progress BPM](../images/check_inProgress_orders.png)](../images/check_inProgress_orders.png)
## External Service Provider Deployment Request process
[![External Service Provider Deployment Request process BPM](../images/externalSPDeploymentReq.png)](../images/externalSPDeploymentReq.png)
This process contains tasks for submitting order requests to external partners.
- Submit Order To External Service Provider Task: This task creates automatically a Service Order request to a 3rd party provider SO that hosts the Service Specification
- Check external service order fulfillment task: This task Check external partner for Service creations and updates our local inventory of services the service characteristics of remote Service Inventory
## Fetch Partner Services Process
[![Fetch Partner Services Process BPM](../images/fetchPartnerServices.png)](../images/fetchPartnerServices.png)
Every 2 minutes the "fetchPartnerServicesProcess" process is executed checking remote Partner Organizations for changes in the published catalogues.
The Fetch and Update External Partner Services Task is executed in paralle l for each Partner Organization
## Local Service Orchestration Process
[![Local Service Orchestration Process BPM](../images/LocalServiceOrchestrationProcess.png)](../images/LocalServiceOrchestrationProcess.png)
This process handles automatically services that need to be further orchestrated or processed by OSOM. For example, for a CFS Bundled service we create such automated service instances that just aggregate the underlying services.
\ No newline at end of file
# TMF OpenAPI specification
PLease check the complete specification [here](http://portal.openslice.io/tmf-api/swagger-ui/index.html).
## API interaction
### OAuth token
See [oauth](./oauth.md)
### Request a protected API resource
Example: Get all Service Catalogs (check the `Authorization:Bearer` to be correct)
```
curl -H "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTc4NTA1MDcyLCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiMTFlNGYxYTUtZDY0Ny00YzA1LWE0ZGMtYWFhYzUyMjk4YzMwIiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.gm7cKdusDrdMRkxEiFU5sENKGRC1xwVj2SgPRmE9xxx" -H "accept: application/json;charset=utf-8" -X GET "http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog"
```
response:
```
[
{
"uuid": "9e186cd5-b2b2-4a06-b1d6-895720193bc9",
"lastUpdate": "2019-12-19T10:45:55Z",
"@baseType": "BaseEntity",
"@schemaLocation": null,
"@type": "ServiceCatalog",
"href": null,
"name": "Example Facility Services",
"description": "Example Facility Services",
"lifecycleStatus": "Active",
"version": "1.0",
"validFor": {
"endDateTime": "2039-11-20T23:07:21Z",
"startDateTime": "2019-11-20T23:07:21Z"
},
"relatedParty": null,
"id": "9e186cd5-b2b2-4a06-b1d6-895720193bc9",
"category": [
{
"@baseType": "org.etsi.osl.tmf.scm633.model.ServiceCategoryRef",
"@schemaLocation": null,
"@type": "org.etsi.osl.tmf.scm633.model.ServiceCategoryRef",
"href": null,
"name": "eMBB",
"@referredType": null,
"id": "ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b"
},
{
"@baseType": "org.etsi.osl.tmf.scm633.model.ServiceCategoryRef",
"@schemaLocation": null,
"@type": "org.etsi.osl.tmf.scm633.model.ServiceCategoryRef",
"href": null,
"name": "Generic Services",
"@referredType": null,
"id": "98b9adf1-a1d6-4165-855f-153ddc2131b1"
}
]
}
]
```
\ No newline at end of file
# Openslice TMF Web Portal
Openslice comprises of a [web landing page](http://portal.openslice.io/) that navigates to the respective TMF Portal.
- [Services Portal](http://portal.openslice.io/services)
- [Products Portal](http://portal.openslice.io/products)
- [Testing Portal](http://portal.openslice.io/testing)
- [Resources Portal](http://portal.openslice.io/resources)
The landing page and the TMF portals (Services, Products, Testing, Resources) are written in Angular and are maintained under the same Angular project.
Following you may find the scope each portal focuses on and the main TMF APIs it supports.
**Services Portal** is a designated portal for the:
- Service Designer - To design Customer Facing Services as bundles of Resource Facing Services that map to specific Resourses (e.g. NFV, Testing, General Resources). Then, it is charged with the designed Services' exposure to public Service Catalogs.
- Service Customer - To browse the public Service Catalogs and order the offered Services. The fulfilment process of the Service Order is also captured and the final deployed Services are exposed to the Customer.
**Products Portal** is a designated portal for the:
- Product Designer - To design Products as bundles of available Services. Then, it is charged with the designed Products' exposure to public Product Catalogs.
- Product Customer - To browse the public Product Catalogs and navigate to the respective offered Services.
**Testing Portal** is a designated portal for the:
- Testing Designer - To design Tests and provide the testing scripts as attachments to the latter. The Tests can be imported as Services at the Services Portal, and can be included in a Service Bundle.
**Resources Portal** is a designated portal for the:
- Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure.
| | TMF620 | TMF632 | TMF633 | TMF634 | TMF638 | TMF639 | TMF640 | TMF641 | TMF642 | TMF653 | TMF685 |
| ------------- |:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|
|**Services Portal** | |x |x | |x | |x |x |x | | |
|**Products Portal** |x |x | | | | | | | | | |
|**Testing Portal** | |x | | | | | | | |x | |
|**Resources Portal** | |x | |x | |x | | | | |x |
From the landing page, the user can also navigate towards the NFV portal. See [NFV WEB](./nfvweb.md).
\ No newline at end of file
# Catalogs and Templates
The Openslice Service Catalogue (accessible through the API or Services portal) contains the representation of Service Specifications, either created from the provider defining service attributes, or by supporting the GSMA Generic Slice Templates (GST) as well as the VINNI Service Blueprint. The following scenarios are supported by the Openslice Service Catalogue.
## Create/Design a Service Specification
### First Import some Resources as Resource Facing Services (RFSs)
If you have any NSDs as NFV artifacts, import them through the UI menu (Import from NSD list). Then an NSD is imported as a resource and an RFS automatically is created. RFSs then later are used to design a Customer Facing Service Specification
### Create/Design a Customer Facing Service Specification
Customer Facing Service Specification are the services offered to customers.
You can create a new Service Specification from the menu. The services created through the UI are Customer Facing Services (CFS). Usually you create a CFS as a bundle and then you include Service Specification Relationships with RFSs or/and CFSs.
Any Service Specification Characteristics from the RFS are copied to the CFS specification. A CFS can include multiple RFS or/and CFSs.
For example you can create a CFS spec called "A 5G Service" which is a bundle of two other services (include them in Service Specification Relationships) such as 5G eMBB Slice and a Customer VPN. So when the user orders "A 5G Service" services from 5G eMBB Slice and a Customer VPN will be created during the order.
### Initial configuration for OSM deployment
if you have an initial configuration that needs to be applied in the NSD deployment, then you go to the RFS (or CFS) and in Service Specification Characteristics go and edit the OSM_CONFIG characteristic.
You can add in the Service Characteristic Value, in the Value field something like the following example which gives a floating IP to a VNF:
```
{ "nsdId": "e855be91-567b-45cf-9f86-18653e7ea", "vimAccountId": "4efd8bf4-5292-4634-87b7-7b3d49108" , "vnf": [ {"member-vnf-index": "1", "vdu": [ {"id": "MyCharmedVNF-VM", "interface": [{"name": "eth0", "floating-ip-required": true }]}]}]}
```
or a more complex example (beautify it first if you want to view it, but in the parameter OSM_CONFIG must be minified like the example):
```
{"nsdId":"e855be91-567b-45cf-9f86-18653e7","vimAccountId":"4efd8bf4-5292-4634-87b7-7b3d491","vnf":[{"member-vnf-index":"1","vdu":[{"id":"haproxy_vdu","interface":[{"name":"haproxy_vdu_eth1","floating-ip-required":true}]}]}],"vld":[{"name":"pub_net","vim-network-name":"OSMFIVE_selfservice01"},{"name":"management","vim-network-name":"OSMFIVE_selfservice01"},{"name":"lba_net","vim-network-name":"lba_net","vnfd-connection-point-ref":[{"member-vnf-index-ref":"1","vnfd-connection-point-ref":"haproxy_private","ip-address":"192.168.28.2"}]},{"name":"backend_net","vim-network-name":"backend_net","vnfd-connection-point-ref":[{"member-vnf-index-ref":"3","vnfd-connection-point-ref":"haproxy_public","ip-address":"192.168.20.2"}]},{"name":"lb_sb_net","vim-network-name":"lb_sb_net","vnfd-connection-point-ref":[{"member-vnf-index-ref":"3","vnfd-connection-point-ref":"haproxy_private","ip-address":"192.168.28.2"}]},{"name":"breaking_point_Spain","vim-network-name":"sb_repo_net"},{"name":"breaking_point_Greece","vim-network-name":"5TONICexternal"}],"additionalParamsForVnf":[{"member-vnf-index":"2","additionalParams":{"target_IP":"192.168.20.2"}},{"member-vnf-index":"4","additionalParams":{"target1_IP":"192.168.21.2","target2_IP":"10.154.252.10"}}]}
```
You can leave the Alias and Unit of Measure as is. Check also the is Default.
### Day 2 Primitive Actions
NFVOs like OSM allow to perform actions while a service is running, for example change attributes or make actions on a specific VNF. To design this do something similar to the following example:
- Go to the RFS related to the NSD that contains VNFs with primitives
- create a characteristic named Primitive::<primitive> , e.g. Primitive::touch
- select Value Type: ARRAY
- add Service Characteristic Value: i) alias=primitive, value=<primitivename> (e.g. touch), ii) alias=member_vnf_index, value=<vnf index> (e.g. 1), iii) add the params that the user will change in alias the name of param and in value an initial value (e.g. alias=filename, value=myfile.txt)
In the above example, when the service is running and the user goes to service inventory to MODIFY it, changes the value of the alias=filename, value=myfile.txt, to value =secondfile.txt. Then inside the VNF a file will be created called secondfile.txt
### Generic Slice Templates (GST)
(Offered only as a design for now. THere is no direct implementation to NFV)
On October 16th 2019 GSMA published NG.116 Version 2.0 which defines the Generic Network Slice Template (GST). GST is a set of attributes that can characterise a type of network slice/service. GST is generic and is not tied to any specific network deployment. Here is a list of the various attributes of the template:
- Availability
- Area of Service
- Delay tolerance
- Deterministic communication
- Downlink throughput per network slice
- Downlink throughput per UE
- Energy efficiency
- Group communication support
- Isolation level
- Location based message delivery
- Maximum supported packet size
- Mission critical support
- MMTel support
- NB-IoT support
- Network Slice Customer network functions
- Number of connections
- Number of terminals
- Performance monitoring
- Performance prediction
- Positioning support
- Radio spectrum
- Reliability
- Root cause investigation
- Session and Service Continuity support
- Simultaneous use of the network slice
- Slice quality of service parameters
- Support for non-IP traffic
- Supported access technologies
- Supported device velocity
- Synchronicity
- Terminal density
- Uplink throughput per network slice
- Uplink throughput per UE
- User management openness
- User data access
- V2X communication mode
Openslice offers the GST in a format that is machine readable and aligned with the TMF SID model. Here is a tentative approach in JSON : <https://github.com/openslice/org.etsi.osl.tmf.api/blob/master/src/main/resources/gst.json>
Providers can clone a GST as e NEST directly in Openslice Web portal and the adjust the default attributes to their Service Specification
### 5G-VINNI Service Blueprint
(Offered only as a design for now. THere is no direct implementation to NFV)
5G-VINNI Service Blueprint is a special Service Specification defined by teh 5G-VINNI project. Many details can be found in document <https://zenodo.org/record/3345612>
5G-VINNI Service Blueprint is a reusable self-contained specification of required network slice service (instances). As described in GST mapping VINNI-SB is also machine readable.
Here is a tentative approach in JSON : <https://github.com/openslice/org.etsi.osl.tmf.api/tree/master/src/main/resources/vinnisb>
5G-VINNI SB has many commonalities with GST as well as it offers Testing as a Service attributes.
Next figure presents the high-level object model of a 5G-VINNI service blueprint.
The 5G-VINNI SB as a first prototype approach is conceived as a CFS of a ‘bundle’ of services. It has some characteristics, like name, description, service type (eMBB, etc) and others. The constituent services are:
- A “Service Topology” Service Specification which is related to a Network Service Resource topology (a Logical Resource Spec). It is considered at this stage as an RFS but is subject to change in future
- A “VINNI SB Service Requirements” Service Specification which is related to Service requirements. This is very similar to GST. It is considered at this stage a CFS.
- A “VINNI SB Service Exposure Level 1” Service Specification which contains characteristics for service exposure on level 1 ( see D3.1 for details). It is considered at this stage a CFS.
- A “VINNI SB Service Exposure Level 2” Service Specification which contains characteristics for service exposure on level 2. It is considered at this stage a CFS.
- A “VINNI SB Service Exposure Level 3” Service Specification which contains characteristics for service exposure on level 3. It is considered at this stage a CFS.
- A “VINNI SB Service Exposure Level 4” Service Specification which contains characteristics for service exposure on level 4. It is considered at this stage a CFS.
- A “VINNI SB Service 3rd part VNF” Service Specification which contains characteristics for support 3rd party VNFs to be included in the service. It is considered at this stage as an RFS but is subject to change in future
- A “VINNI SB Service 3rd part NSD” Service Specification which contains characteristics for support 3rd party NSDs to be included in the service. It is considered at this stage as an RFS but is subject to change in future
- A “VINNI SB Service Monitoring” Service Specification which contains characteristics for offering Monitoring capabilities on the requested Service. It is considered at this stage a CFS.
- A “VINNI SB Service Testing” Service Specification which contains characteristics for offering Testing capabilities on the requested Service. It is considered at this stage a CFS.
[![VINNI SB Template Model diagram](../images/vinni_sb_model_diagram.png)](../images/vinni_sb_model_diagram.png)
## Manage a Service Specification
You can manage them though the Web UI
## Assign a Service Specification to Service Categories and Publish
Just create categories and from the menu select the category and add services
## Retire/Remove a Service Specification
Delete it from the category
## Consume and expose Service Specifications from other Service Catalogues
See more on [Consuming Services From External Partner Organizations](./architecture/consumingServicesFromExternalPartners.md)
# Developing
Openslice backend services are mainly implemented with Java 17 or above and Spring boot.
Openslice uses various subsystems and depending on the module would you like to work, other subsystems must be present (you can disable them though in the code, e.g. at application.yml file)
To get the latest development branch:
```
wget https://raw.githubusercontent.com/openslice/org.etsi.osl.main/develop/compose/deploy.sh
sudo ./deploy.sh develop [or replace develop with other branch name]
```
## Slack
* Slack: https://openslice.slack.com
## General subsystems
- Docker and Docker Compose should be installed in your development environment
### Consul
consul service registry should be up and running. You can launch consul with docker:
`sudo docker run -d --name consul -p 8500:8500 -p 8600:8600 consul`
### ActiveMQ
ActiveMQ is our messaging system. You can launch an instance of ActiveMQ:
`sudo docker run --name='activemq' -d -e 'ACTIVEMQ_NAME=amqp-srv1' -e 'ACTIVEMQ_REMOVE_DEFAULT_ACCOUNT=true' -e 'ACTIVEMQ_ADMIN_LOGIN=admin' -e 'ACTIVEMQ_ADMIN_PASSWORD=admin' -e 'ACTIVEMQ_WRITE_LOGIN=producer_login' -e 'ACTIVEMQ_WRITE_PASSWORD=producer_password' -e 'ACTIVEMQ_READ_LOGIN=consumer_login' -e 'ACTIVEMQ_READ_PASSWORD=consumer_password' -e 'ACTIVEMQ_JMX_LOGIN=jmx_login' -e 'ACTIVEMQ_JMX_PASSWORD=jmx_password' -e 'ACTIVEMQ_STATIC_TOPICS=topic1;topic2;topic3' -e 'ACTIVEMQ_STATIC_QUEUES=queue1;queue2;queue3' -e 'ACTIVEMQ_MIN_MEMORY=1024' -e 'ACTIVEMQ_MAX_MEMORY=4096' -e 'ACTIVEMQ_ENABLED_SCHEDULER=true' -v /home/ctranoris/testcompose/data/activemq:/data/activemq -v /var/log/activemq:/var/log/activemq -p 8161:8161 -p 61616:61616 -p 61613:61613 webcenter/activemq:5.14.3`
### MySQL server
We use mysql as a storage DB. Please make sure that you have it installed in your system. There are instructions on internet how to install it. Check also our docker-compose installation script
## Oauth server
Keycloak is used as the authentication server.
> Note: Please check the Post installation steps -> Keycloak at localhost, at [Deployment/Installation](../deployment.md), if you are developing in a local environment
## VNF/NSD Catalog Management and NSD Deployment API service
Clone the repository: https://github.com/openslice/org.etsi.osl.portal.api
Check the application.yml file. Default port is 13080. Especially the datasource username/password, server port.
make sure that the General subsystems are up and running as well as the OAuth server
run it with `mvn spring-boot:run`
You can check your consul server if it registered.
### Swagger API
Swagger API of the service is at `http://localhost:13000/osapi/swagger-ui/`. You can try there various REST actions and authenticate via the OAuth server
## VNF/NSD Catalog Management and NSD Deployment WEB UI service
The Web UI is written in AngularJS
Clone the repository: https://github.com/openslice/org.etsi.osl.portal.web
by default the project org.etsi.osl.portal.api exposes the folder ../org.etsi.osl.portal.web/src/ in a folder testweb (Check class MvcConfig.java in org.etsi.osl.portal.api) for development. (In production nginx is used). Point your browser to `http://localhost:13000/osapi/testweb/index.html/`
---
## Version/release management
Check this nice article on how we develop and release versions
https://nvie.com/posts/a-successful-git-branching-model/
We develop in the develop branch
---
## Wishlist
Check also our wishlist of new features. You can add your own
See [Wishlist](./wishlist.md)
# TMF API
- RBAC of API endpoints
- TMF Ticketing API support
- TMF Product
- HATEOAS integration
- Select Specs that can be exposed to partners (maybe with a characteristic?)
## resource management
- Resource Activation and Configuration API TMF702 (NEW) (https://projects.tmforum.org/wiki/pages/viewpage.action?pageId=128855518)
# TMF WEB
# OSOM
- Actions on service order item and acknowledge order status will define the lifecycle
- action shutdown on specific date for service order
- action edit on service order item
## Dynamic attribute transformation
- DTM decision tables support per Service Specification
- Schedule Termination of completed order on running services
# NFVO connectivity
## OSM Client
- VNF/NSD config params Day 2
- NSD Lifcecylce
- NST support
# NFV API
# NFV WEB
# 3rd party connectivity
## FlowOne connector
## Openstack connector
## Kubernetes connector
# CentralLog
- Events from TMF to be written to Central Log
# Authentication
This diff is collapsed.
This diff is collapsed.
doc/images/LocalServiceOrchestrationProcess.png

12.6 KiB

doc/images/NFVODeploymentReq_process.png

11.9 KiB

doc/images/alarms_actions/action_rule_exampleday2.png

54.6 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment