From c136454efe394e33efb2fa256ec2aaa178c9fde0 Mon Sep 17 00:00:00 2001 From: Dimitrios <dimit.giannopoulos@upnet.gr> Date: Sat, 6 Jul 2024 09:00:53 +0000 Subject: [PATCH] Deployed 91750aa to develop in public with MkDocs 1.6.0 and mike 2.1.2 --- public/develop/naas/lcm/img01.png | Bin 0 -> 425695 bytes public/develop/naas/lcm_intro/index.html | 433 ++++++++++++++++++++++- public/develop/search/search_index.json | 2 +- 3 files changed, 431 insertions(+), 4 deletions(-) create mode 100644 public/develop/naas/lcm/img01.png diff --git a/public/develop/naas/lcm/img01.png b/public/develop/naas/lcm/img01.png new file mode 100644 index 0000000000000000000000000000000000000000..145c8976ccf2b3f60304a74d59138f00eb88b3ce GIT binary patch literal 425695 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	Y_BYgdg-tE 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%0A;=3o^HqVWUO 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 literal 0 HcmV?d00001 diff --git a/public/develop/naas/lcm_intro/index.html b/public/develop/naas/lcm_intro/index.html index 9ed4b4a8..6145628f 100644 --- a/public/develop/naas/lcm_intro/index.html +++ b/public/develop/naas/lcm_intro/index.html @@ -75,6 +75,11 @@ <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> + + <a href="#lifecycle-management-lcm" class="md-skip"> + Skip to content + </a> + </div> <div data-md-component="announce"> @@ -1110,6 +1115,19 @@ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> + + + + <label class="md-nav__link md-nav__link--active" for="__toc"> + + + <span class="md-ellipsis"> + Service Lifecycle management + </span> + + + <span class="md-nav__icon md-icon"></span> + </label> <a href="./" class="md-nav__link md-nav__link--active"> @@ -1121,6 +1139,172 @@ </a> + + +<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> + + + + + + + <label class="md-nav__title" for="__toc"> + <span class="md-nav__icon md-icon"></span> + Table of contents + </label> + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> + + <li class="md-nav__item"> + <a href="#intended-audience-service-designers" class="md-nav__link"> + <span class="md-ellipsis"> + Intended Audience: Service Designers + </span> + </a> + +</li> + + <li class="md-nav__item"> + <a href="#introduction-in-openslice-lcm" class="md-nav__link"> + <span class="md-ellipsis"> + Introduction in OpenSlice LCM + </span> + </a> + + <nav class="md-nav" aria-label="Introduction in OpenSlice LCM"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#0-preparation-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 0. Preparation Phase + </span> + </a> + + <nav class="md-nav" aria-label="0. Preparation Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-design" class="md-nav__link"> + <span class="md-ellipsis"> + Service Design: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#1-instantiation-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 1. Instantiation Phase + </span> + </a> + + <nav class="md-nav" aria-label="1. Instantiation Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-instantiation" class="md-nav__link"> + <span class="md-ellipsis"> + Service Instantiation: + </span> + </a> + +</li> + + <li class="md-nav__item"> + <a href="#service-deployment" class="md-nav__link"> + <span class="md-ellipsis"> + Service Deployment: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#2-operation-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 2. Operation Phase + </span> + </a> + + <nav class="md-nav" aria-label="2. Operation Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-operation" class="md-nav__link"> + <span class="md-ellipsis"> + Service Operation: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#3-decommissioning-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 3. Decommissioning Phase + </span> + </a> + + <nav class="md-nav" aria-label="3. Decommissioning Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-decommissioning" class="md-nav__link"> + <span class="md-ellipsis"> + Service Decommissioning: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#high-level-example-enhanced-mobile-broadband-embb-service-lifecycle" class="md-nav__link"> + <span class="md-ellipsis"> + High level example: Enhanced Mobile Broadband (eMBB) Service Lifecycle + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#probe-further" class="md-nav__link"> + <span class="md-ellipsis"> + Probe further + </span> + </a> + +</li> + + </ul> + +</nav> + </li> @@ -2614,6 +2798,163 @@ + + + + <label class="md-nav__title" for="__toc"> + <span class="md-nav__icon md-icon"></span> + Table of contents + </label> + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> + + <li class="md-nav__item"> + <a href="#intended-audience-service-designers" class="md-nav__link"> + <span class="md-ellipsis"> + Intended Audience: Service Designers + </span> + </a> + +</li> + + <li class="md-nav__item"> + <a href="#introduction-in-openslice-lcm" class="md-nav__link"> + <span class="md-ellipsis"> + Introduction in OpenSlice LCM + </span> + </a> + + <nav class="md-nav" aria-label="Introduction in OpenSlice LCM"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#0-preparation-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 0. Preparation Phase + </span> + </a> + + <nav class="md-nav" aria-label="0. Preparation Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-design" class="md-nav__link"> + <span class="md-ellipsis"> + Service Design: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#1-instantiation-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 1. Instantiation Phase + </span> + </a> + + <nav class="md-nav" aria-label="1. Instantiation Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-instantiation" class="md-nav__link"> + <span class="md-ellipsis"> + Service Instantiation: + </span> + </a> + +</li> + + <li class="md-nav__item"> + <a href="#service-deployment" class="md-nav__link"> + <span class="md-ellipsis"> + Service Deployment: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#2-operation-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 2. Operation Phase + </span> + </a> + + <nav class="md-nav" aria-label="2. Operation Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-operation" class="md-nav__link"> + <span class="md-ellipsis"> + Service Operation: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#3-decommissioning-phase" class="md-nav__link"> + <span class="md-ellipsis"> + 3. Decommissioning Phase + </span> + </a> + + <nav class="md-nav" aria-label="3. Decommissioning Phase"> + <ul class="md-nav__list"> + + <li class="md-nav__item"> + <a href="#service-decommissioning" class="md-nav__link"> + <span class="md-ellipsis"> + Service Decommissioning: + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#high-level-example-enhanced-mobile-broadband-embb-service-lifecycle" class="md-nav__link"> + <span class="md-ellipsis"> + High level example: Enhanced Mobile Broadband (eMBB) Service Lifecycle + </span> + </a> + +</li> + + </ul> + </nav> + +</li> + + <li class="md-nav__item"> + <a href="#probe-further" class="md-nav__link"> + <span class="md-ellipsis"> + Probe further + </span> + </a> + +</li> + + </ul> </nav> </div> @@ -2628,10 +2969,96 @@ - <h1>Service Lifecycle management</h1> - +<h1 id="lifecycle-management-lcm">Lifecycle Management - LCM</h1> +<p>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</p> +<h2 id="intended-audience-service-designers">Intended Audience: Service Designers</h2> +<p>In OpenSlice the Lifecycle of a service follows in general the concept of Network Slice lifecycle as defined by 3GPP.</p> +<p><a href="../lcm/img01.png"><img alt="lcm" src="../lcm/img01.png" /></a></p> +<h2 id="introduction-in-openslice-lcm">Introduction in OpenSlice LCM</h2> +<p>OpenSlice Adopted adopted the LCM model by 3GPP and mapped to the TMF model service state. Next we discuss briefly the process and the relationships.</p> +<p>The lifecycle of a service, particularly in the context of Network Service lifecycleencompasses several stages that ensure the service is effectively planned, deployed, managed, and eventually decommissioned. </p> +<p>Here is an overview of these stages and relationships with OpenSlice:</p> +<h3 id="0-preparation-phase">0. Preparation Phase</h3> +<p>This phase is performed by Service Designers</p> +<h4 id="service-design">Service Design:</h4> +<ul> +<li><strong>Requirements Gathering:</strong> Collect service requirements from stakeholders, including performance metrics, quality of service (QoS), security needs, and geographical coverage.</li> +<li><strong>Service Specification:</strong> Define the service in terms of functionalities, attributes, and dependencies. This can be formalized using standardized templates such as the GSMA Generic Slice Template (GST).</li> +<li><strong>Resource Planning:</strong> Identify and plan the required resources, including network functions, computing power, storage, and connectivity, inclluding network function configurations.</li> +<li><strong>Expose to Service Catalog</strong>: Expose to service catalog for user ordering.</li> +</ul> +<p><strong>Next phases are handled by the Service Orchestrator after a service is scheduled for instantiation</strong></p> +<p><strong>If it is a bundle of services, each services follows its own Lifecycle!</strong></p> +<h3 id="1-instantiation-phase">1. Instantiation Phase</h3> +<h4 id="service-instantiation">Service Instantiation:</h4> +<ul> +<li><strong>Configuration:</strong> Configure the network service according to the specifications includin the user requirements from the service order, ensuring that all components are correctly set up to provide the desired service.</li> +<li><strong>Resource Allocation - Feasibility check:</strong> Allocate the necessary physical and virtual resources based on the service specification. This includes any containerized resources, virtual network functions (VNFs) and software-defined networking (SDN) components. (This step is not perfromed in OpenSlice)</li> +<li>OpenSlice Service Orchestrator creates the services at "RESERVED" state</li> +<li><strong>User Notification:</strong> There could be an email notification from the system (if Bugzilla is configured)</li> +</ul> +<h4 id="service-deployment">Service Deployment:</h4> +<ul> +<li><strong>Activation:</strong> OpenSlice Service Orchestrator activates the network service and makes the service available to the end-users. This may involve:</li> +<li>Create any related services that the service depends on</li> +<li>Contacting all related controllers during provisioning, e.g. Kubernetes controllers, Kubernetes operators, MANO Orchestrators, RAN controllers, SDN Controlles, or other external services (e.g. via REST calls)</li> +<li>Scheduling instantiation, Resolving dependencies and passing paramemters between controllers,</li> +<li>setting up user accounts, provisioning access credentials -this is performed either offline or via other services.</li> +<li>OpenSlice Service Orchestrator if everything is succesful put the service at "ACTIVE" state</li> +<li><strong>User Notification:</strong> There could be an email notification from the system (if Bugzilla is configured)</li> +</ul> +<h3 id="2-operation-phase">2. Operation Phase</h3> +<h4 id="service-operation">Service Operation:</h4> +<ul> +<li><strong>Lifecycle Management:</strong> Manage the network slice throughout its lifecycle, including scaling, reconfiguration, and adaptation to changing requirements. </li> +<li>In OpenSlice this is performed with Lifecycle management Rules (see next)</li> +</ul> +<p>In this phase the Service Designer can define several aspects. <strong>Be aware that these are NOT performed automatically by OpenSlice - further examples and future enhancements will address these</strong>. This could include:</p> +<ul> +<li><strong>Monitoring:</strong> Continuously monitor the service for performance, availability, and compliance with SLAs. Utilize tools for real-time tracking and alerts for any anomalies or performance degradation.</li> +<li><strong>Maintenance:</strong> Conduct regular maintenance activities, including software updates, patching, and optimization to ensure the service runs smoothly.</li> +<li><strong>Scaling:</strong> Dynamically scale the resources up or down based on the demand and performance requirements.</li> +<li><strong>Fault Management:</strong> Detect and resolve faults in the network slice to minimize downtime and maintain service quality.</li> +</ul> +<h3 id="3-decommissioning-phase">3. Decommissioning Phase</h3> +<h4 id="service-decommissioning">Service Decommissioning:</h4> +<p><strong>Service Termination:</strong> Service Orchestrator terminates the network service . This may involve: + - Terminate any related services that the service depends on + - Contacting all related controllers during termination to release resources, e.g. Kubernetes controllers, Kubernetes operators, MANO Orchestrators, RAN controllers, SDN Controlles, or other external services (e.g. via REST calls) + - Scheduling termination, Resolving dependencies and passing paramemters between controllers +- OpenSlice Service Orchestrator if everything is succesful put the service at "TERMINATED" state +- <strong>User Notification:</strong> There could be an email notification from the system (if Bugzilla is configured)</p> +<h3 id="high-level-example-enhanced-mobile-broadband-embb-service-lifecycle">High level example: Enhanced Mobile Broadband (eMBB) Service Lifecycle</h3> +<ol> +<li><strong>Preparation:</strong></li> +<li>Define eMBB service requirements for high bandwidth and low latency.</li> +<li>Create an eMBB service specification template specifying related services and resources to Kubernetes Operators, VNFs for content delivery and traffic management.</li> +<li> +<p>Expose to catalog</p> +</li> +<li> +<p><strong>Instantiation:</strong></p> +</li> +<li>Instantiate other services and allocate resources such as edge computing nodes and high-capacity links.</li> +<li> +<p>Configure the service to prioritize video streaming traffic.</p> +</li> +<li> +<p><strong>Operation:</strong></p> +</li> +<li>Monitor the service to ensure it meets high-bandwidth requirements.</li> +<li> +<p>Scale up resources during peak usage periods, such as live sports events.</p> +</li> +<li> +<p><strong>Decommissioning:</strong></p> +</li> +<li>Notify users about service termination.</li> +<li>Decommission the network service, reclaiming resources for other services.</li> +</ol> +<h2 id="probe-further">Probe further</h2> <ul> -<li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> +<li>See 3GPP <a href="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3091">Lifecycle</a></li> </ul> diff --git a/public/develop/search/search_index.json b/public/develop/search/search_index.json index bf03c486..7a9e0fda 100644 --- a/public/develop/search/search_index.json +++ b/public/develop/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"<p>version: 2024Q2 - SNAPSHOT</p> <p>The ETSI Software Development Group for OpenSlice (SDG OSL) is developing an open-source service-based Operations Support System (OSS) to deliver Network as a Service (NaaS) following specifications from major SDOs including ETSI, TM Forum and GSMA.</p>"},{"location":"#usage","title":"Usage","text":"<p>OpenSlice can be used in managing 5G network services from the user device to the core network and cloud as well as for Orchestrating cloud resources across private and public clouds for enterprise applications. OpenSlice is capable of supporting most of the features of an end-to-end (E2E) service orchestration framework while many of them will be more mature in future releases. The following figure displays the general usage of OpenSlice. </p> <p></p> <p>The image illustrates how OpenSlice supports the idea of an E2E network service orchestration framework by integrating multiple network components and layers, from user devices at the edge to radio, transport networks, core and public cloud services, ensuring seamless, secure, and efficient delivery of network services. Assuming that there are domain controllers for all the above domains OpenSlice can create the end-to-end service via the domain controllers by following the process of creating and deploying the end-to-end service by implementing transformations, and consuming APIs from various network entities. OpenSlice, in a nutchell, offers user interfaces where users can interact with the framework to order, expose, and manage service catalogs, services and resources that can be ordered, following business logic and policies and exposed through the APIs. </p>"},{"location":"#an-end-to-end-e2e-service-orchestration-framework","title":"An end-to-end (E2E) service orchestration framework","text":"<p>An end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, especially, Network as a Service (NaaS) a comprehensive system is needed that automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers. Such E2E frameworks enable users to consume network services on-demand, similar to how cloud computing services are consumed. Some key components and features of such frameworks are:</p> <ul> <li>Service Catalogs including predefined Network Services based on service templates for common network services like 5G core functions, 5G slices, VPNs, SD-WAN, firewalls, load balancers, etc. as well as custom Network services with Options for users to define their own network configurations.</li> <li>User Interface (UI) and APIs exposure, offering both a Self-Service Portal that allows users to request, configure, and manage network services as well as APIs for enabling programmatic access to network services for integration with other systems and automation scripts.</li> <li>Service Design and Creation tharough service templates based on predefined models for creating services.</li> <li>Automation and Workflow Management via Orchestration Engines, supporting Process Automation for automating repetitive tasks and processes, workflow management and orchestration for automating the provisioning, configuration, and management of network services while coordinating multiple workflows to ensure services are delivered efficiently, ensuring that services comply with predefined policies and standards.</li> <li>Standardized API exposure for seamless integration with different systems and services and APIs transformation support for converting data formats and protocols to ensure compatibility and information exhange between systems during workflows orchestration</li> <li>Service and Resource management and Orchestration while including the capability of multi-domain coordination in managing services/resources across different domains like cloud, 5G core, radios, transport network, and edge including dynamic allocation with adjusting resources based on demand and service requirements. To accomplish the above advanced technologies need to be exploited like, Containerized workloads, Network Function Virtualization (NFV) which uses virtualized network functions to provide services like routing, switching, and security and Software-Defined Networking (SDN) which Controls the network programmatically to dynamically manage traffic and resources.</li> <li>Monitoring and Analytics including Service Monitoring while continuously tracking the performance and health of services with capabilities to analyse data to optimize service delivery and predict issues. Real-Time Monitoring is also needed for tracking the performance and health of network services enabling analytics that provide insights for optimization and troubleshooting.</li> <li>Security and Access Control for ensuring only authorized users and systems can access network services. while implementing rules and policies to comply with regulatory requirements.</li> </ul>"},{"location":"#an-e2e-service-orchestration-workflow","title":"An E2E service orchestration workflow","text":"<p>In general an E2E service orchestration workflow includes the following phases:</p> <ul> <li>Service Request: Users or systems request a network service through the self-service portal or API. The request can specify details such as bandwidth, security features, geographic coverage, and duration.</li> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with the underlying components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> <li>Provisioning and Configuration: Services, network resources and network functions (VNFs) are instantiated and configured according to the service request during Service Orchestration through the orchestration engine. Other controllers manage their own domains, for example SDN controllers, manage the flow of data through the network to ensure optimal performance and adherence to policies, RAN controllers manage the RAN resoruces, Containerized controllers manage their workload, etc</li> <li>Service Delivery: The E2E network service is activated and made available to the user. Continuous monitoring ensures the service operates as expected, with automatic adjustments made as necessary.</li> <li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> <li>At the end of the service period, resources are decommissioned and reclaimed.</li> </ul>"},{"location":"#openslice-for-service-providers","title":"OpenSlice for Service Providers","text":"<p>OpenSlice is used by Service Providers to design Network Services, expose them in Service Catalogues and make them available for Service Orders. OpenSlice then can perform the E2E service orchestration workflow.</p> <p>There are various portals offering UI friendly access to users acting as Service Providers:</p> <ul> <li>The Services portal allows Service Providers to design and expose services.</li> <li>The Resource portal allows users to access resource specifications and running resources in resource inventory.</li> <li>The NFV portal allows users to manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Providers to manage test artifacts</li> <li>The Products portal allows Service Providers to expose services as products</li> </ul>"},{"location":"#openslice-for-service-consumers","title":"OpenSlice for Service Consumers","text":"<p>OpenSlice allows Service Consumers to browse the available offered service specifications in a self-service manner. It also supports TMFORUM Northbound APIs regarding Service Catalog Management, Ordering, Resource, etc. There are various portals offering UI friendly access to users acting as Service Consumers:</p> <ul> <li>The Services portal allows Service Consumers to select and order predefined services.</li> <li>The Resource portal allows users to access running resources in resource inventory.</li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Consumers to manage test artifacts</li> <li>The Products portal allows Service Consumers to expose services as products</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>"},{"location":"#live-demo","title":"Live Demo","text":"<p>Check a live demo of OpenSlice in the following pages:</p> <p>(username=admin, password=openslice or username=admin, password=changeme)</p> <ul> <li>OpenSlice demo: http://portal.openslice.io/</li> <li>OpenSlice Service Catalogs and ordering: http://portal.openslice.io/services/</li> <li>OpenSlice NFV Services onboarding: http://portal.openslice.io/nfvportal </li> </ul>"},{"location":"#probe-further","title":"Probe further","text":"<ul> <li>Installing OpenSlice. See the Deployment of OpenSlice</li> <li>Learn more on [how OpenSlice supports Network as a Service(NaaS)](./naas/introduction</li> <li>Who is implementing OpenSlice? See OSL ETSI SDG</li> <li>How OpenSlice works? See the Architecture of OpenSlice</li> </ul>"},{"location":"OpenSlice_deployment_examples/","title":"OpenSlice deployment examples","text":"<p>Here are some examples from past and current efforts that use OpenSlice in various cases.</p>"},{"location":"OpenSlice_deployment_examples/#5ginfire-eu-project2018","title":"5GinFIRE EU project(2018)","text":"<ul> <li>MultiVIM approach</li> <li>9 Testbeds</li> <li>Automotive, Smart City, eHeath, \u000bPPDR, Media, SDR, Cloud</li> <li>22 Experiment proposals from Verticals</li> <li>100+ Users</li> <li>VxF catalog: </li> <li>150+ ONBOARDED VxFs</li> <li>OSM TWO, FOUR, FIVE</li> <li>50+ are public to be reused</li> <li>NSD catalog: </li> <li>90+ ONBOARDED NSDs</li> <li>30+ are public to be reused</li> <li>500+ Deployment requests \u000b(orchestrations) performed</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5g-vinni-eu-project-2020","title":"5G-VINNI EU project (2020)","text":"<ul> <li>Multi-vendor challenge \u2013 Commercial and opensource</li> <li>5G services on multiple sites</li> <li>Introduction of TMFORUM models and APIs </li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5gasp-eu-project-2021-2024","title":"5GASP EU project (2021-2024)","text":"<ul> <li>Support a multi-site CI/CD testing automated DevOps cycle for network Applications</li> <li>Multiple NFVOs</li> <li>Introducing Service Test models</li> <li>Introducing the Product models for a network application marketplace</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#fidal-eu-project-2023-","title":"FIDAL EU project (2023-)","text":"<ul> <li>Support multi-site automated testing</li> <li>Multiple testbeds/ different APIs</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#across-eu-project-2023-","title":"ACROSS EU project (2023-)","text":"<ul> <li>Used as a cross-domain orchestrator</li> <li>Support the multi-domain orchestrator</li> <li>Support Zero-touch provisioning concepts</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#incode-eu-project-2023-","title":"INCODE EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#imagineb5g-eu-project-2023-","title":"IMAGINEB5G EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul>"},{"location":"OpenSlice_deployment_examples/#etsi-zsm-poc-2","title":"ETSI ZSM PoC #2","text":"<ul> <li>Automated Network Slice Scaling in Multi-Site Environments</li> </ul> <p>[</p>"},{"location":"alarms_actions/","title":"Alarms","text":"<p>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.</p>"},{"location":"alarms_actions/#alarms-and-actions","title":"Alarms and Actions","text":"<p>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</p> <p>Alarms can be automatically resolved by specific actions. Today only the following actions are offered.</p> <ul> <li>execDay2</li> <li>scaleServiceEqually</li> </ul>"},{"location":"alarms_actions/#execday2","title":"execDay2","text":"<p>Usually used to perform a Day2 configuration (towards OSM). To use it, Create a New Action Specification Name=execDay2 as following</p> <p></p> <p>Now make a Service Order for your service. In this example \u03c2\u03b5 used a cirros NSD</p> <p>Create a New Action Rule for the running services as the following example:</p> <p></p> <p>The scope is the running cirros service. </p> <p>Params should be paramname=value;paramname2=value2;paramname3=value3 (must exist in the VNF otherwise OSM will raise an error).</p> <p>In this case should be filename=test.txt</p> <p>Primitive=touch</p> <p>ServiceId = select the service which will accept the Day2. In this case is the same</p> <p>To test it:</p> <p>Go to the Service Inventory and select the active Service.</p> <p>Note the UUID of the service (e.g. c4e7990a-e174-4cd2-9133-b10e56721e08 copy from address bar), DeploymentRequestID and NSDID from characteristics</p> <p>You can either use the UUID of the service or the DeploymentRequestID and POST to the Alarms endpoint ( /tmf-api/alarmManagement/v4/alarm)</p> <p>If the DeploymentRequestID is used then POST:</p> <pre><code>\n{\n \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n \"state\": \"raised\",\n \"alarmType\": \"qualityOfServiceAlarm\",\n \"probableCause\": \"thresholdCrossed\",\n \"ackState\": \"unacknowledged\",\n \"perceivedSeverity\": \"major\",\n \"sourceSystemId\": \"mano-client-service\",\n \"alarmDetails\": \"NSID=3;DeploymentRequestID=1\",\n \"specificProblem\": \"myalram raised\"\n}\n\n</code></pre> <p>If the UUID is used then POST:</p> <pre><code>\n{\n \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n \"state\": \"raised\",\n \"alarmType\": \"qualityOfServiceAlarm\",\n \"probableCause\": \"thresholdCrossed\",\n \"ackState\": \"unacknowledged\",\n \"perceivedSeverity\": \"major\",\n \"sourceSystemId\": \"mano-client-service\",\n \"alarmDetails\": \"analarm\",\n \"specificProblem\": \"myalram raised\",\n \"affectedService\": [\n {\n \"id\": \"c4e7990a-e174-4cd2-9133-b10e56721e08\"\n }\n ]\n\n}\n\n</code></pre> <p>The Alarm to be created must have the affected Service ID equal to the running service from the scope (the cirros_ns)</p> <p>Go to service inventory you will see the notes and also the service characteristics for any EXEC_ACTION updates</p> <p>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</p>"},{"location":"alarms_actions/#scaleserviceequally","title":"scaleServiceEqually","text":"<p>This action is used from getting a scaling event from OSM. Please see the next demo for details on how it works</p>"},{"location":"alarms_actions/#prototype-demo","title":"Prototype demo","text":"<p>You can watch how we used the prototype on the following ETSI ZMS PoC #2</p> <ul> <li>ETSI ZMS PoC #2: https://www.etsi.org/events/1905-webinar-zsm-poc-2-showcase-automated-network-slice-scaling-in-multi-site-environments/</li> </ul>"},{"location":"catalogs/","title":"Catalogs and Templates","text":"<p>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.</p>"},{"location":"catalogs/#createdesign-a-service-specification","title":"Create/Design a Service Specification","text":""},{"location":"catalogs/#first-import-some-resources-as-resource-facing-services-rfss","title":"First Import some Resources as Resource Facing Services (RFSs)","text":"<p>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</p>"},{"location":"catalogs/#createdesign-a-customer-facing-service-specification","title":"Create/Design a Customer Facing Service Specification","text":"<p>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.</p> <p>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.</p>"},{"location":"catalogs/#initial-configuration-for-osm-deployment","title":"Initial configuration for OSM deployment","text":"<p>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:</p> <pre><code>{ \"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 }]}]}]}\n\n</code></pre> <p>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):</p> <pre><code>{\"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\"}}]}\n</code></pre> <p>You can leave the Alias and Unit of Measure as is. Check also the is Default.</p>"},{"location":"catalogs/#day-2-primitive-actions","title":"Day 2 Primitive Actions","text":"<p>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:</p> <ul> <li>Go to the RFS related to the NSD that contains VNFs with primitives</li> <li>create a characteristic named Primitive:: , e.g. Primitive::touch <li>select Value Type: ARRAY</li> <li>add Service Characteristic Value: i) alias=primitive, value= (e.g. touch), ii) alias=member_vnf_index, value= (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) <p>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</p>"},{"location":"catalogs/#generic-slice-templates-gst","title":"Generic Slice Templates (GST)","text":"<p>(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:</p> <ul> <li>Availability</li> <li>Area of Service</li> <li>Delay tolerance</li> <li>Deterministic communication</li> <li>Downlink throughput per network slice</li> <li>Downlink throughput per UE</li> <li>Energy efficiency</li> <li>Group communication support</li> <li>Isolation level</li> <li>Location based message delivery</li> <li>Maximum supported packet size</li> <li>Mission critical support</li> <li>MMTel support</li> <li>NB-IoT support</li> <li>Network Slice Customer network functions</li> <li>Number of connections</li> <li>Number of terminals</li> <li>Performance monitoring</li> <li>Performance prediction</li> <li>Positioning support</li> <li>Radio spectrum</li> <li>Reliability</li> <li>Root cause investigation</li> <li>Session and Service Continuity support </li> <li>Simultaneous use of the network slice</li> <li>Slice quality of service parameters</li> <li>Support for non-IP traffic </li> <li>Supported access technologies </li> <li>Supported device velocity </li> <li>Synchronicity</li> <li>Terminal density </li> <li>Uplink throughput per network slice </li> <li>Uplink throughput per UE</li> <li>User management openness</li> <li>User data access </li> <li>V2X communication mode</li> </ul> <p>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</p> <p>Providers can clone a GST as e NEST directly in Openslice Web portal and the adjust the default attributes to their Service Specification</p>"},{"location":"catalogs/#5g-vinni-service-blueprint","title":"5G-VINNI Service Blueprint","text":"<p>(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</p> <p>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. </p> <p>Here is a tentative approach in JSON : https://github.com/openslice/org.etsi.osl.tmf.api/tree/master/src/main/resources/vinnisb</p> <p>5G-VINNI SB has many commonalities with GST as well as it offers Testing as a Service attributes.</p> <p>Next figure presents the high-level object model of a 5G-VINNI service blueprint.</p> <p>The 5G-VINNI SB as a first prototype approach is conceived as a CFS of a \u2018bundle\u2019 of services. It has some characteristics, like name, description, service type (eMBB, etc) and others. The constituent services are:</p> <ul> <li>A \u201cService Topology\u201d 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</li> <li>A \u201cVINNI SB Service Requirements\u201d Service Specification which is related to Service requirements. This is very similar to GST. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 1\u201d Service Specification which contains characteristics for service exposure on level 1 ( see D3.1 for details). It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 2\u201d Service Specification which contains characteristics for service exposure on level 2. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 3\u201d Service Specification which contains characteristics for service exposure on level 3. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 4\u201d Service Specification which contains characteristics for service exposure on level 4. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service 3rd part VNF\u201d 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</li> <li>A \u201cVINNI SB Service 3rd part NSD\u201d 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</li> <li>A \u201cVINNI SB Service Monitoring\u201d Service Specification which contains characteristics for offering Monitoring capabilities on the requested Service. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Testing\u201d Service Specification which contains characteristics for offering Testing capabilities on the requested Service. It is considered at this stage a CFS.</li> </ul> <p></p>"},{"location":"catalogs/#manage-a-service-specification","title":"Manage a Service Specification","text":"<p>You can manage them though the Web UI</p>"},{"location":"catalogs/#assign-a-service-specification-to-service-categories-and-publish","title":"Assign a Service Specification to Service Categories and Publish","text":"<p>Just create categories and from the menu select the category and add services</p>"},{"location":"catalogs/#retireremove-a-service-specification","title":"Retire/Remove a Service Specification","text":"<p>Delete it from the category</p>"},{"location":"catalogs/#consume-and-expose-service-specifications-from-other-service-catalogues","title":"Consume and expose Service Specifications from other Service Catalogues","text":"<p>See more on Consuming Services From External Partner Organizations</p>"},{"location":"config_intro/","title":"Configuring and managing OpenSlice","text":""},{"location":"config_intro/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This section provides information on how to configure and manage different aspect of OpenSlice while in operation. For example:</p> <ul> <li>Manage user roles and access in Keycloak</li> <li>Configure/Manage NFVOs</li> <li>Advanced configuration scenarios</li> </ul>"},{"location":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>Following, you may thorough guides depending on the installation type of your choice:</p> <ul> <li>Installing via Docker Compose guide</li> <li>Installing via Kubernetes guide</li> </ul>"},{"location":"deploymentCompose/","title":"OpenSlice Deployment Guide with Docker Compose","text":""},{"location":"deploymentCompose/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":""},{"location":"deploymentCompose/#requirements","title":"Requirements","text":""},{"location":"deploymentCompose/#hardware-requirements","title":"Hardware requirements:","text":"Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 30 GB storage 50 GB storage"},{"location":"deploymentCompose/#software-requirements","title":"Software Requirements:","text":"<ul> <li>Docker: A running environment for Docker Compose services</li> </ul>"},{"location":"deploymentCompose/#preparing-the-environment","title":"Preparing the environment","text":""},{"location":"deploymentCompose/#1-backup-your-previous-database-if-necessary","title":"1. Backup your previous database if necessary:","text":"<pre><code>sudo docker exec amysql /usr/bin/mysqldump -u root --password=letmein ostmfdb > backup_ostmfdb.sql\n</code></pre>"},{"location":"deploymentCompose/#2-install-docker","title":"2. Install docker","text":"<p>Since July 2023 Docker Compose V1 stopped receiving updates. OpenSlice fully reverted to Compose V2, which is integrated in the Docker installation.</p>"},{"location":"deploymentCompose/#3-configure-containers-to-properly-resolve-the-dns-of-your-domain-optional","title":"3. Configure containers to properly resolve the DNS of your domain (optional)","text":"<pre><code>sudo nano /etc/docker/daemon.json\n</code></pre> <p>and add:</p> <pre><code>{ \n \"dns\": [\"8.8.8.8\", \"8.8.4.4\"]\n}\n</code></pre> <p>After editing daemon.json restart docker daemon for the changes to take place</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deploymentCompose/#downloading-the-project","title":"Downloading the project","text":""},{"location":"deploymentCompose/#1-create-a-new-folder-to-download-the-project","title":"1. Create a new folder to download the project","text":"<pre><code>mkdir openslice\n</code></pre> <pre><code>cd openslice\n</code></pre>"},{"location":"deploymentCompose/#2-download-the-deployment-script","title":"2. Download the deployment script","text":"<p>Download the deployment / environment preparation script</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh\n</code></pre> <p>Make it executable</p> <pre><code>sudo chmod +x deploy.sh\n</code></pre>"},{"location":"deploymentCompose/#3-run-the-deployment-script","title":"3. Run the deployment script","text":"<p>OpenSlice is a multi repo project. This script selects the same branch for all repositories of the project to pull from.</p> <p>After that it builds the respective jar files locally and installs all the npm packages needed for the UI.</p> <p>If you run the script without selecting a branch the the main branch is going to be selected.</p> <p>We recommend:</p> <ul> <li>main branch for the most stable experience and</li> <li>develop branch for an experience with the latest features (for develop branch installation, it is strongly advisable that you may as well follow the develop documentation)</li> </ul> <pre><code>sudo ./deploy.sh develop #[or replace main with other branch name]\n</code></pre> <p>We recommend running the deploy.sh script with root permissions! In other case, some directories may not be accessible by the project building tools and hinder the smooth installation.</p>"},{"location":"deploymentCompose/#configure-docker-compose-services","title":"Configure Docker Compose services","text":""},{"location":"deploymentCompose/#1-create-configuration-specific-docker-compose-file-from-the-template","title":"1. Create configuration specific Docker Compose file from the template","text":"<pre><code>cd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo cp docker-compose.yaml.configure docker-compose.yaml\n</code></pre>"},{"location":"deploymentCompose/#2-configure-mysql-portal-container-optional","title":"2. Configure mysql-portal container (optional)","text":"<ol> <li>In folder <code>org.etsi.osl.main/compose/mysql-init</code> edit the file <code>01-databases.sql</code>.</li> <li>In the <code>org.etsi.osl.main/compose/docker-compose.yaml</code> edit the credentials of the users that services use to connect to the databases, if you wish.<ul> <li>portaluser (default is 12345) and</li> <li>keycloak (default is password)</li> </ul> </li> </ol>"},{"location":"deploymentCompose/#3-configure-keycloak-container-optional","title":"3. Configure keycloak container (optional)","text":"<ol> <li> <p>If you made changes to keycloak's mysql credentials:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code>.</p> </li> </ol> <pre><code>DB_DATABASE: keycloak\nDB_USER: keycloak\nDB_PASSWORD: password\n</code></pre> <ol> <li> <p>If you want to change the keycloak admin password:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> </li> </ol> <pre><code>KEYCLOAK_PASSWORD: Pa55w0rd\n</code></pre>"},{"location":"deploymentCompose/#4-configure-bugzilla-container-optional","title":"4. Configure bugzilla container (optional)","text":"<p>If you want to utilise the Bugzilla connector:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.activemq.brokerUrl\": \"tcp://anartemis:61616?jms.watchTopicAdvisories=false\",\n \"spring.activemq.user\": \"artemis\",\n \"spring.activemq.password\": \"artemis\",\n \"bugzillaurl\":\"\",\n \"bugzillakey\":\"\",\n \"main_operations_product\":\"\"\n}'\n</code></pre> <p>And add the provided Bugzilla installation information:</p> <pre><code>\"bugzillaurl\":\"bugzillaurl.xx:443/bugzilla/\",\n\"bugzillakey\":\"exampleKeyeqNNwxBlgxZgMEIne0Oeq0Bz\",\n\"main_operations_product\":\"Main Site Operations\" // this is the default product to issue tickets\n</code></pre> <p>Bugzilla should have the following components under the specified product: </p> <ul> <li>NSD Deployment Request: Component used to schedule deployment req </li> <li>Onboarding: Issues related to VNF/NSD Onboarding </li> <li>Operations Support: Default component for operations support </li> <li>Validation: Use to track validation processes of VNFs and NSDs </li> <li>VPN Credentials/Access: Used for requesting VPN Credentials/Access </li> </ul> <p>Also in the 'Main Site Operations' product, a version named 'unspecified' must be created.</p>"},{"location":"deploymentCompose/#5-configure-osportalapi-container-nfv-services-conditional","title":"5. Configure osportalapi container (NFV services) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}, as well as \"spring.portal.main.domain\" property.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"spring.portal.main.domain\": \"http://localhost\",\n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#6-osscapi-container-tmf-api-service-conditional","title":"6. osscapi container (TMF API service) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#configure-nginx","title":"Configure nginx","text":"<p>In folder <code>org.etsi.osl.main/compose/nginx</code> create a configuration specific <code>nginx.conf</code> file.</p> <pre><code>cd org.etsi.osl.main/compose/nginx/\n</code></pre> <pre><code>sudo cp nginx.conf.default nginx.conf\n</code></pre> <p>If needed, in the nginx.conf file, edit the server_name for an non-local deployment.</p>"},{"location":"deploymentCompose/#configure-web-ui","title":"Configure Web UI","text":"<p>In folder <code>org.etsi.osl.portal.web/src/js/</code> create a configuration specific <code>config.js</code> file.</p> <pre><code>cd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>sudo cp config.js.default config.js\n</code></pre> <p>Edit the <code>config.js</code> file with the information of your domain. <code>ROOTURL</code> will automatically extract the the Origin (Protocol://Domain:Port) of the deployment, but you must change <code>APIURL</code> property, if you are not aiming for a localhost installation, e.g. \"https://portal.openslice.io\".</p> <p>Example file:</p> <pre><code>{ \n BUGZILLA: \"ROOTURL/bugzilla/\",\n STATUS: \"ROOTURL/status/\",\n APIURL: \"http://localhost\",\n WEBURL: \"ROOTURL/nfvportal\",\n APIOAUTHURL: \"ROOTURL/auth/realms/openslice\",\n APITMFURL: \"ROOTURL/tmf-api/serviceCatalogManagement/v4\"\n}\n</code></pre>"},{"location":"deploymentCompose/#configure-tmf-web-ui","title":"Configure TMF Web UI","text":"<p>In the folder <code>org.etsi.osl.tmf.web/src/assets/config</code> there are 3 files available for configuration:</p> <ul> <li>config.prod.json (Basic information + API configuration)</li> <li>theming.scss (CSS color palette theming)</li> <li>config.theming.json (HTML configuration - Logo, Favicon, Footer)</li> </ul> <p>The first 2 files above (i.e. config.prod.json, theming.scss) are essential for the successful deployment of OpenSlice, thus created automatically during the initial deployment at <code>org.etsi.osl.tmf.web/src/assets/config</code> directory as a copy of the default ones from the remote repository.</p> <p>Ensure that you check the <code>config.prod.json</code> and <code>theming.scss</code> files and readjust to your deployment if needed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <p>E.g. You may edit \"TITLE\", \"WIKI\", etc properties with your domain title. Also configure TMF's API and Keycloak's location for the web application, if needed.</p> <p>Example file:</p> <pre><code>{ \n \"TITLE\": \"OpenSlice by ETSI\",\n \"PORTALVERSION\":\"2024Q2\",\n \"WIKI\": \"https://osl.etsi.org/documentation\",\n \"BUGZILLA\": \"{BASEURL}/bugzilla/\",\n \"STATUS\": \"{BASEURL}/status/\",\n \"WEBURL\": \"{BASEURL}\",\n \"PORTAL_REPO_APIURL\": \"{BASEURL}/osapi\",\n \"ASSURANCE_SERVICE_MGMT_APIURL\": \"{BASEURL}/oas-api\",\n \"APITMFURL\": \"{BASEURL}/tmf-api\",\n \"OAUTH_CONFIG\" : {\n \"issuer\": \"{BASEURL}/auth/realms/openslice\",\n \"loginUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n\n \"responseType\": \"code\",\n \"oidc\": false,\n \"clientId\": \"osapiWebClientId\",\n \"dummyClientSecret\": \"secret\",\n\n \"requireHttps\": false,\n \"useHttpBasicAuth\": true,\n \"clearHashAfterLogin\": false,\n\n \"showDebugInformation\": true\n }\n}\n</code></pre> <p>The {BASEURL} placeholder in the file automatically detects the Origin (Protocol://Domain:Port) of the deployment and applies it to every respective property. E.g. If you are attempting a local deployment of OpenSlice, then {BASEURL} is automatically translated to \"http://localhost\". Similarly, you may use {BASEURL} to translate to a public deployment configuration, e.g. \"https://portal.openslice.io\".</p> <p>If further customization, apart from the default provided, is needed for branding (Logo, Footer) then <code>config.theming.json</code> needs to be created in io.openslice.tmf.web/src/assets/config directory, as follows:</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>sudo cp config.theming.default.json config.theming.json\n</code></pre> <p>IMPORTANT NOTE: If you want to apply changes to the JSON configuration files without the need to rebuild the application, you have to apply the changes at the <code>org.etsi.osl.tmf.web/dist/io-openslice-portal-web/assets/config</code> directory. Although, it is mandatory to also apply these changes to the <code>org.etsi.osl.tmf.web/src/assets/config</code> for persistancy, as after any future rebuild of OpenSlice the <code>/dist</code> directory is being overwritten along with its contents. The OpenSlice team strongly recommends to always apply your changes to the TMF web UI configuration files at <code>org.etsi.osl.tmf.web/src/assets/config</code> and rebuild the application.</p>"},{"location":"deploymentCompose/#deploy-openslice-via-docker-compose","title":"Deploy OpenSlice via Docker Compose","text":"<p>After configuring the services, and editing the docker compose file accordingly, the docker compose instantiation command can be performed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo docker compose --profile prod down;sudo docker compose --profile prod up -d --build\n</code></pre> <p>Depending on your machine, this process might take time. if for any reason the deployment fails during first time, please rerun the above before any further measures.</p>"},{"location":"deploymentCompose/#validating-deployments-and-container-monitoring","title":"Validating deployments and container monitoring","text":"<p>You can monitor containers' status with portainer at port 9000 (http://your-ip:9000).</p> <p>Initially, you may monitor the local machine at portainer.</p> <p>Please check that all containers are in running state.</p>"},{"location":"deploymentCompose/#post-installation-steps","title":"Post installation steps","text":"<p>After the successful deployment of OpenSlice, to ensure the E2E user experience, this section is mandatory. It contains crucial configuration in regard of authentication and user creation.</p>"},{"location":"deploymentCompose/#configure-keycloak-server","title":"Configure Keycloak server","text":"<p>The Keycloack server is managing authentication and running on a container at port 8080. It is also proxied to your host via nginx under http://localhost/auth. </p> <ul> <li> <p>Navigate to http://domain.com/auth/ or https://domain.com/auth/, (http://ipaddress:8080/auth/ or https://ipaddress:8443/auth/ which are directly accessible without proxy) </p> </li> <li> <p>Navigate to Administration Console </p> </li> <li> <p>Login with the credentials from section Configure keycloak container. Default values are:</p> <ul> <li>user: admin and </li> <li>password: Pa55w0rd</li> </ul> </li> </ul> <p>if you are running in HTTP you will get a message: HTTPS required.</p> <p>To resolve this issue when running in HTTP: </p> <ul> <li>Select the master realm from top left corner</li> <li>Go to login Tab and select \"Require SSL\": None</li> <li>Repeat for realm Openslice</li> </ul> <p>If you are running in HTTPS, then \"Require SSL\" can be left unchanged to external requests.</p>"},{"location":"deploymentCompose/#1-configure-redirects","title":"1. Configure redirects","text":"<p>Navigate to realm Openslice > Clients > osapiWebClientId and change the Root URL to your domain. </p> <p>Also, insert your domain, e.g. http://example.org/*, at:</p> <ul> <li>Valid Redirect URIs</li> <li>Web Origins</li> </ul>"},{"location":"deploymentCompose/#2-configure-email","title":"2. Configure email","text":"<p>Keycloak allows new users to register. Subsequently, this will also allow new users to register to the OpenSlice portal.</p> <p>Navigate to realm Openslice > Realm Settings > Login Tab > check User registration, Verify email, Forgot password etc.</p> <p>Finally, enter the details of the mail server at the Email Tab.</p> <p>Email configuration is optional for test runs, but if not provided the above functionalities (e.g. external user registration) will not be possible.</p>"},{"location":"deploymentCompose/#3-add-an-openslice-admin-user","title":"3. Add an OpenSlice admin user","text":"<p>This step is mandatory so as to access the OpenSlice Web UI. To add an OpenSlice admin user you must:</p> <ul> <li>Navigate to realm Openslice > Users > Add user</li> <li>Set a password</li> <li>Upon creation, navigate to Role Mappings and add ADMIN to Assigned Roles list</li> </ul> <p>That user is different from the Keycloak admin user. It is required to login and browse the OpenSlice Web UI. The Role ADMIN guarantee full access through the OpenSlice UI, thus such a user is always required.</p>"},{"location":"deploymentCompose/#keycloak-at-localhost","title":"Keycloak at localhost","text":"<p>This is an important step if you run Keycloak on localhost!</p> <p>1 - Edit your Hosts File, adding the line below</p> <p><code>127.0.0.1 keycloak</code></p> <p>Hosts File Location:</p> <ul> <li> <p>In Linux/Unix, the file's location is at /etc/hosts </p> </li> <li> <p>In Windows, its location is at c:\\Windows\\System32\\Drivers\\etc\\hosts</p> </li> </ul> <p>2 - Replace http://localhost/auth/ with http://keycloak:8080/auth/ in your Keycloak config for AngularJS and Angular (see examples below).</p> <p>Explanation</p> <p>Nginx uses the http://keycloak:8080 URL, which is accessible via the internal docker system's network. The Front-end (TS/Angular) shall also use the http://keycloak:8080. This way, you will not get the invalid token error, as the API is acquiring the token from http://keycloak:8080 (internally) and the Front-end is getting verified by an issuer at the same URL, as well.</p> <p>2.1 - For the Angular configuration (TMF portal UI), navigate to org.etsi.osl.tmf.web/src/assets/config and edit config.prod.json</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>nano config.prod.json\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>{ \n \"OAUTH_CONFIG\" : {\n \"issuer\": \"http://keycloak:8080/auth/realms/openslice\",\n \"loginUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n }\n}\n</code></pre> <p>Note the difference in changing {BASEURL} -> http://keycloak:8080</p> <p>If you want the changes to take place immediately without rebuilding the project, then repeat the process for org.etsi.osl.tmf.web/dist/org.etsi.osl.tmf.web/assets/config/config.prod.json</p> <p>2.2 - For the AngularJS configuration (NVF portal UI), navigate to org.etsi.osl.portal.web/src/js and edit config.js</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>nano config.js\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>var appConfig = angular.module('portalwebapp.config',[]);\n\n\nappConfig.factory('APIEndPointService', function() {\n return { \n APIOAUTHURL: \"http://keycloak:8080/auth/realms/openslice\",\n };\n});\n</code></pre> <p>Note the difference in \"APIOAUTHURL\" property, changing ROOTURL -> http://keycloak:8080</p>"},{"location":"deploymentCompose/#nfv-orchestrator-configuration","title":"NFV Orchestrator Configuration","text":"<p>After successfully deploying and configuring OpenSlice, you may configure its environment (e.g. the NFVO) that will facilitate the deployment of NFV artifacts.</p> <p>See NFV Orchestrator Configuration.</p>"},{"location":"deploymentK8s/","title":"OpenSlice Deployment Guide with Kubernetes","text":""},{"location":"deploymentK8s/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"location":"etsi_osl/","title":"The ETSi SDG OSL","text":"<p>OpenSlice is developed by the OSL ETSI Software Development Group see more info</p>"},{"location":"history/","title":"History","text":""},{"location":"history/#history","title":"History","text":"<ul> <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project 5GinFIRE by University of Patras, Greece</li> <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project 5G-VINNI by University of Patras, Greece</li> <li>OpenSlice has been a part of OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Group since 2023</li> </ul>"},{"location":"history/#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use OpenSlice in your research</p> <pre><code>\n@misc{tranoris2021openslice,\n title={Openslice: An opensource OSS for Delivering Network Slice as a Service}, \n author={Christos Tranoris},\n year={2021},\n eprint={2102.03290},\n archivePrefix={arXiv},\n primaryClass={cs.NI}\n}\n\n\n</code></pre>"},{"location":"lcm/","title":"Lifecycle Management (LCM) Rules","text":"<ul> <li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li> </ul> <p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p> <ul> <li>PRE_PROVISION</li> <li>CREATION</li> <li>AFTER_ACTIVATION </li> <li>SUPERVISION </li> <li>AFTER_DEACTIVATION </li> </ul> <p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p> <p></p> <ul> <li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li> <li>CREATION rules: Run while the referenced service dependencies of a service are created</li> <li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li> <li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li> <li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li> </ul> <p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p> <ul> <li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li> <li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li> <li>Define complex OSM Configs based on other dependencies and passing variables</li> <li>Define any dependencies when creating the referenced services</li> <li>Dynamically include new service dependencies</li> <li>Create new service orders so include dynamically other services</li> <li>Call external (RESTful) services (via http(s), define payload, examine response)</li> </ul>"},{"location":"lcm/#examine-if-the-rules-are-executed-successfully","title":"Examine if the rules are executed successfully","text":"<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>"},{"location":"lcm/#lcm-rules-and-osom-service-orchestration","title":"LCM Rules and OSOM Service Orchestration","text":"<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p> <p></p>"},{"location":"lcm/#define-rules","title":"Define rules","text":"<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p> <p></p> <p>Execution order of rules on a specific phase is random</p> <ul> <li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li> </ul>"},{"location":"lcm/#definition-language","title":"Definition language","text":"<ul> <li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li> <li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li> </ul> <p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p> <p></p> <ul> <li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li> <li>On the right side the user can define some rule properties or observe the underlying generated java code.</li> </ul>"},{"location":"lcm/#the-blocks-library","title":"The blocks library","text":"<p>The following images describe some blocks found in the library.</p> <p>Blockly has syntax rules. It helps with colours to define them. </p> <p>So for example a parameter that is a Number cannot be \"glued\" with a String. Will need some conversion first</p> <p> </p>"},{"location":"lcm/#examples-of-rules","title":"Examples of Rules","text":"<p>The following images provide some examples of rules.</p>"},{"location":"lcm/#define-variables-according-to-cases","title":"define variables according to cases","text":"<p>In the following example we :</p> <ul> <li>define a String variable. </li> <li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li> <li>We output the value to the OSOM Log</li> <li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li> </ul> <p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p> <p></p>"},{"location":"lcm/#define-complex-osm-configs-for-day-0","title":"Define complex OSM configs for DAY 0","text":"<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p> <ul> <li> <p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p> </li> <li> <p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p> </li> <li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li> <li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li> <li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li> </ul> <p></p>"},{"location":"lcm/#define-and-instantiate-different-services-according-to-service-order-request","title":"Define and instantiate different services according to Service Order request","text":"<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p> <p>There are different ways to accomplish this:</p> <ul> <li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li> <li>change for example the VIMs that you deploy the NS</li> <li>change the NSD (that is use different VNFs)</li> </ul> <p>The following image displays for example the latter case.</p> <p></p>"},{"location":"lcm/#call-an-external-restful-service","title":"Call an external RESTful service","text":"<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p> <p></p> <p></p>"},{"location":"lcm/#create-new-service-orders","title":"Create New Service Orders","text":"<p>The following example calls to Order a New Service Specification with specific Parameter Values</p> <p></p>"},{"location":"nfvoconfig/","title":"NFV Orchestrator configuration","text":"<p>Currently we support Open Source MANO version EIGHT/NINE/TEN/ELEVEN/THIRTEEN. Later versions of OSM may also be supported by the existing configuration, as from OSM 9+ the project converged to the SOL005 interface, regarding the NBI, and SOL006 (YANG model), regarding the NFV/NS packaging. Also an implementation of a generic SOL005 interface is supported, but not extensively tested.</p> <p>Configuration of your target(s) NFVOs/MANO services with Openslice is performed through the NFV portal.</p> <ol> <li> <p>Login to {{yourdomain}}/nfvportal/</p> </li> <li> <p>Navigate to Admin > Manage MANO Platforms > Add New MANO Platform, pick one of the supported MANO platform(s), e.g. Name=OSMvTHIRTEEN, Version=OSMvTHIRTEEN and save. You may edit the saved MANO platforms after this.</p> </li> <li> <p>Navigate to Admin > Manage MANO providers > Add New MANO Provider and enter its details:</p> <ul> <li>Name and description of your choice. The selected name will supplement the NFV artifacts of this provider.</li> <li>One of the already defined MANO platforms</li> <li>API URL Endpoint, eg: https://10.10.10.10:9999 (This is the SOL005 NBI endpoint - Note the port 9999)</li> <li>Username, Password and Project of your OSM tenant.</li> </ul> </li> </ol> <p>Check EnabledForONBOARDING, if you want VNF/NS packages uploaded through the UI by the user, to also be automatically ONBOARDED to this MANO (1 step process). If left unchecked, the onboarding process must be performed manually after the VNF/NS package is uploaded to the portal, by the designated UI (2 step process).</p> <p>Check EnabledForSYNC, if you want to support the automatic synchronization of this MANO with OpenSlice. When enabled, the existing VNF/NS packages and VIMs (and any updates on them) of the registered MANO are also reflected to the portal to the respective UIs (Registered VNFs/NSDs and Manage Infrastructures). </p> <p>The synchronization is a continuous process that will confirm that the artifacts are still present in the MANO, updating the status field of the respective artifacts to <code>OSM_PRESENT</code>. If during this process, an artifact is deleted from the MANO, the respective status field will be updated to <code>OSM_MISSING</code>.</p>"},{"location":"portals_intro/","title":"OpenSlice Portals","text":"<p>Openslice comprises of a web landing page See Demo that navigates to the respective Portal:</p> <ul> <li>Services Portal See Demo</li> <li>NFV Portal See Demo</li> <li>Products Portal See Demo</li> <li>Testing Portal See Demo</li> <li>Resources Portal See Demo</li> </ul> <p>Following you may find the scope each portal focuses on and the main TMF APIs it supports.</p> <p>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.</p> <p>NFV Portal is a designated portal for the: 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</p> <p>More information can be found at NFV Services.</p> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure. - 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.</p> <p>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.</p> 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 <p>The NFV Portal uses a proprietary API</p>"},{"location":"role_keycloak_management/","title":"Role management in Keycloak","text":"<p>Some initial configuration of Keycloak happens at Installation/Deployment time. Here are some notes regarding user management</p>"},{"location":"role_keycloak_management/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>There are cases that OpenSlice administrators need to configure Keycloak:</p> <ul> <li>Change user roles, e.g. make a Simple user a Service Designer</li> <li>Domain management</li> <li>User Password reset</li> </ul>"},{"location":"service_inventory/","title":"Service Inventory","text":"<p>After a Service Order completion, active services with their additional characteristics are found:</p> <ul> <li>From the Order Items of a selected Service order</li> <li>from the menu of Service inventory and then selecting details of each service</li> <li>through the Service Inventory API (TMF 638 - Service Inventory Management ) </li> </ul> <p>Openslice creates a Service for the requested CFS. Customers make Service Orders and Openslice instantiates the requested Service Specifications for each Service Order Item of a Service Order. Running Services instantiated by Openslice, reside in Openslice Service Inventory. The following picture displays how Service Specifications are related to Running Services and how Running Services relate with instantiated running Network Services. </p> <p></p> <p>There is a hierarchy of services. Usually an Instantiated CFS has Supporting Services some Instantiated RFSs. Then an Instantiated RFS is related to some running NS managed by NFVO</p>"},{"location":"service_inventory/#interacting-with-an-active-service-day-2-config","title":"Interacting with an Active Service (Day 2 config)","text":"<p>In some cases, if the underlying service is configured with actions (for example in OSM Day 2 primitive actions), there are characteristics that can be modified. Usually they are named like : ::Primitive:: <p>The user can edit the characteristic with a new value. The value is propagated through the OSOM and NFVO down to the related VNF.</p>"},{"location":"service_inventory/#terminatinginactivating-a-service","title":"Terminating/Inactivating a service","text":"<p>You can terminate the service with one of the following processes:</p> <ul> <li>Select the related Service Order and terminate the Order Item. This will delete all the underlying related active services. The Order goes to ACKNOWLEDGED->INPROGRESS->COMPLETE</li> <li>To terminate or inactivate a service, select the specific service from the inventory, press Edit and set the State either to Inactive or Terminated</li> </ul> <p>Warning: if you terminate or inactivate a service the action cannot be undone. </p>"},{"location":"service_inventory/#uml-sequence-diagram","title":"uml: sequence diagram","text":"<p>Here I will embed PlantUML markup to generate a sequence diagram.</p> <p>I can include as many plantuml segments as I want in my Markdown, and the diagrams can be of any type supported by PlantUML.</p>"},{"location":"terminology/","title":"User Roles","text":"<ul> <li>User</li> <li>Service Designer</li> <li>OpenSlice administrator</li> </ul>"},{"location":"terminology/#terms","title":"Terms","text":"<ul> <li>Resource Facing Service Specification (RFSSpec): A Service that exposes a resource Specification as a Service.</li> <li>Customer Facing Service Specification (CFSSpec): Service exposed to users for Service Orders. Usually it exposes other CFSSpec(Service Bundle) or other RFSSpecs</li> <li>OpenSlice management cluster</li> <li>Service Specification: Detailed descriptions of services, including attributes, configurations, performance metrics, and SLAs.</li> <li>Service Catalog</li> <li>Service Categories</li> <li>Service Inventory</li> </ul>"},{"location":"under_construction/","title":"Under construction","text":"<p>under construction</p>"},{"location":"architecture/architecture/","title":"Architecture","text":"<p>Openslice offers the following main functionalities:</p> <ul> <li>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</li> <li>Services Specifications: A CSP will be able to manage Service Specifications</li> <li>Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties</li> <li>Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs</li> <li>Service Order: The Customer will be able to place a Service Order</li> <li>Service Inventory: The Customer and Provider will be able to view deployed Services status</li> </ul> <p>The following figure displays the overall architecture of Openslice.</p> <p></p> <p>Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:</p> <ul> <li>Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility\u2019s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory</li> <li>An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service</li> <li>A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics</li> <li>An authentication server implementing Oauth2 authentication scheme</li> <li>A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)</li> <li>A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog</li> <li>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</li> <li>Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster</li> <li>A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs </li> </ul> <p>The following figure depicts how Openslice microservices are deployed</p> <p></p>"},{"location":"architecture/architecture/#deploying-openslice-in-multi-domain-scenarios","title":"Deploying Openslice in multi domain scenarios","text":"<p>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.</p> <p>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.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>See more Consuming Services From External Partner Organizations</p>"},{"location":"architecture/centrallog/","title":"Central Logging","text":"<p>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. </p> <p>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.</p>"},{"location":"architecture/consumingServicesFromExternalPartners/","title":"Consuming Services From External Partner Organizations","text":"<p>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.</p> <p>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.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>In Openslice we can consume services from 3rd parties via Open APIs.</p> <p>We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:</p> <ul> <li>Import Service Specifications</li> <li>Create a Service Order</li> <li>Use the Service Inventory to query the status of the service ordered to the external partner organization</li> </ul>"},{"location":"architecture/consumingServicesFromExternalPartners/#define-an-organization-as-3rd-party-to-consume-services-east-west","title":"Define an Organization as 3rd party to consume services East-West","text":"<p>An organization must have the following characteristics in openslice catalog, like for example:</p> <p>\"EXTERNAL_TMFAPI_BASEURL\", \"http://portal.openslice.io\"</p> <p>\"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\", \"authOpensliceProvider\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTID\", \"osapiWebClientId\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\", \"secret\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2SCOPES\", scopes</p> <p>\"EXTERNAL_TMFAPI_OAUTH2TOKENURI\", \"http://portal.openslice.io/osapi-oauth-server/oauth/token\"</p> <p>\"EXTERNAL_TMFAPI_USERNAME\", \"admin\"</p> <p>\"EXTERNAL_TMFAPI_PASSWORD\", \"openslice\"</p> <p>\"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)</p> <p>\"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\")</p> <p>\"EXTERNAL_TMFAPI_SERVICE_SPEC\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS\"= \"/test/v1/serviceorder\" (this is optional)</p> <p>An example Organization defined example in json:</p> <pre><code>\n{\n \"uuid\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"Openslice.io\",\n \"id\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"isHeadOffice\": null,\n \"isLegalEntity\": null,\n \"nameType\": null,\n \"organizationType\": null,\n \"tradingName\": null,\n \"contactMedium\": [],\n \"creditRating\": [],\n \"existsDuring\": null,\n \"externalReference\": [],\n \"organizationChildRelationship\": [],\n \"organizationIdentification\": [],\n \"organizationParentRelationship\": null,\n \"otherName\": [],\n \"partyCharacteristic\": [\n {\n \"uuid\": \"3a2f7221-e0a2-4a6b-88d1-534c8e1963f6\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"authOpensliceProvider\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"c24bb527-f178-4d38-9b93-2027c1732876\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_USERNAME\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"27e45df8-414b-44c6-a5d5-3f064e2cfd3b\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_PASSWORD\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"openslice\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"e0e470b8-6024-4014-8a18-2333e5465ce1\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"secret\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3e0de762-ac80-4c1e-a0a1-f265ff0899b4\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2SCOPES\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin;read\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"0bbb8314-f7f2-420d-9fed-ba054b15f886\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2TOKENURI\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io/osapi-oauth-server/oauth/token\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3a567de4-79eb-4006-a500-3e5229b44175\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"osapiWebClientId\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_BASEURL\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io\",\n \"alias\": null\n }\n }\n ],\n \"relatedParty\": [],\n \"status\": null,\n \"taxExemptionCertificate\": []\n}\n\n</code></pre>"},{"location":"architecture/issuemgt/","title":"Issue Management","text":"<p>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. </p> <p>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.</p> <p></p>"},{"location":"architecture/messagebus/","title":"Message Bus and exchanged Messages","text":"<p>Openslice has a Message bus which allows Openslice services to exchange messages via queues and topics.</p> <p>It is based on ActiveMQ.</p> <p>3rd party services can be attached to bus and subscribe to message topics or request resources via queues.</p>"},{"location":"architecture/messagebus/#queue-messages","title":"QUEUE MESSAGES","text":"Message Alias CATALOG_GET_SERVICEORDERS Name jms:queue:CATALOG.GET.SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_BY_ID Name jms:queue:CATALOG.GET.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body String orderid Description Return a ServiceOrder as String Json Message Alias CATALOG_UPD_SERVICEORDER_BY_ID Name jms:queue:CATALOG.UPD.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body ServiceOrderUpdate serviceOrder Headers \"orderid\"= orderid Description Returns a ServiceOrder as String Message Alias CATALOG_GET_SERVICESPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICESPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceSpecification Message Alias CATALOG_ADD_SERVICESPEC Name jms:queue:CATALOG.ADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecCreate Description Creates a ServiceSpecification and returns a ServiceSpecification as String Message Alias CATALOG_UPD_SERVICESPEC Name jms:queue:CATALOG.UPD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. --- Message Alias CATALOG_UPDADD_SERVICESPEC Name jms:queue:CATALOG.UPDADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId, \"forceId\"=forceId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. If forceId is true then tries to assign the requested ID to the spec Message Alias CATALOG_ADD_SERVICEORDER Name jms:queue:CATALOG.ADD.SERVICEORDER Type queue Destination TMF API service Producers OSOM Body ServiceOrderCreate serviceOrder Headers Description Creates a ServiceOrder and returns a ServiceOrder as String Message Alias CATALOG_GET_INITIAL_SERVICEORDERS_IDS Name jms:queue:CATALOG.GET.INITIAL_SERVICEORDERS Type queue Destination TMF API service Producers Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_IDS_BY_STATE Name jms:queue:CATALOG.GET.ACKNOWLEDGED_SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Headers \"orderstate\"= orderState Description String Json ArrayList of ServiceOrders Message Alias CATALOG_ADD_SERVICE Name jms:queue:CATALOG.ADD.SERVICE Type queue Destination TMF API service Producers OSOM Body ServiceCreate String json Headers \"orderid\"=orderid, \"serviceSpecid\"= specid Description Creates Service based an a Service Spec, Returns a Service object Message Alias CATALOG_UPD_SERVICE Name jms:queue:CATALOG.UPD.SERVICE Type queue Destination TMF API service Producers Body ServiceUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICE_BY_ID Name jms:queue:CATALOG.GET.SERVICE Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service instance <p>---| Message | | | ------------- |----------------| |Alias | CATALOG_GET_SERVICE_BY_ORDERID | |Name | jms:queue:CATALOG.GET.SERVICE_BY_ORDERID | |Type | queue | |Destination | TMF API service | |Producers | | |Body | String serviceID | |Description | returns Service IDs of a specific order given then order id |</p> Message Alias CATALOG_SERVICE_QUEUE_ITEMS_GET Name jms:queue:CATALOG.SERVICEQUEUEITEMS.GET Type queue Destination TMF API service Producers OSOM Body Description returns a LIST OF Service Queue Items --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_UPD Name jms:queue:CATALOG.SERVICEQUEUEITEM.UPDATE Type queue Destination TMF API service Producers OSOM Body String SERVICEQUEUEITEM Headers \"itemid\" = SERVICEQUEUEITEM id Description ill update a service queue item by id and return the instance --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_DELETE Name jms:queue:CATALOG.SERVICEQUEUEITEM.DELETE Type queue Destination TMF API service Producers OSOM Body Headers \"itemid\" = SERVICEQUEUEITEM id Description ill delete a service queue item by id Message Alias CATALOG_SERVICES_TO_TERMINATE Name jms:queue:CATALOG.GET.SERVICETOTERMINATE Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services with END DAte in the past --- Message Alias CATALOG_SERVICES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services from the inventory of partners Message Alias NFV_CATALOG_GET_NSD_BY_ID Name jms:queue:NFVCATALOG.GET.NSD_BY_ID Type queue Destination NFV Catalog service Producers TMF API, OSOM Body NSDid Description Returns a NetworkServiceDescriptor object Message Alias NFV_CATALOG_DEPLOY_NSD_REQ Name jms:queue:NFVCATALOG.DEPLOY.NSD_REQ Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers NSD id Description Returns a DeploymentDescriptor object as json string containing deployment info Message Alias NFV_CATALOG_UPD_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.UPD.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers DeploymentDescriptor id Description Updates and Returns a DeploymentDescriptor object as json string containing deployment info Message Alias GET_USER_BY_USERNAME Name jms:queue:GET.USER_BY_USERNAME Type queue Destination NFV Catalog service (this is temproary for now) Producers TMF API Body username Headers Description Returns a PortalUser object as json string containing user info Message Alias NFV_CATALOG_GET_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.GET.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body Deployment ID Description Returns a DeploymentDescriptor object Message Alias CATALOG_GET_EXTERNAL_SERVICE_PARTNERS Name jms:queue:CATALOG.GET.EXTERNALSERVICEPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description As a String Json ArrayList of Organizaton objects containing the characteristic name EXTERNAL_TMFAPI Message Alias CATALOG_UPD_EXTERNAL_SERVICESPEC Name jms:queue:CATALOG.UPD.EXTERNAL_SERVICESPEC Type queue Destination TMF API service Producers OSOM or maybe used by others that would like to update a Service Spec Body A serviceSpecification as json string Headers servicespecification id, orgid id Description Updates (or inserts if does not exist in catalog) an external service specification) Message Alias NFV_CATALOG_NSACTIONS_SCALE Name jms:queue:NSACTIONS.SCALE Type queue Destination TMF API service Producers OSOM or maybe used by others that would like scale a NS Body A ScaleDescriptor as json string Headers none Description performs a scale Message Alias NFV_CATALOG_NS_LCMCHANGED Name NFV_CATALOG_NS_LCMCHANGED Type topic Destination any Producers MANO client Body A json string Headers none Description A NFV_CATALOG_NS_LCMCHANGED message is published when LCM of a running NS is changed"},{"location":"architecture/messagebus/#alarms","title":"ALARMS","text":"Message Alias ALARMS_ADD_ALARM Name jms:queue:ALARMS.ADD.ALARM Type queue Publishers Consumers TMF API Body AlarmCreate Headers Description Add an alarm Message Alias ALARMS_UPDATE_ALARM Name jms:queue:ALARMS.UPDATE.ALARM Type queue Publishers Consumers TMF API Body AlarmUpdate Headers alarmid = alarm id, body (AlarmUpdate object) Description Update an alarm Message Alias ALARMS_GET_ALARM Name jms:queue:ALARMS.GET.ALARM Type queue Publishers Consumers TMF API Body Headers alarmid = alarm id Description get an alarm"},{"location":"architecture/messagebus/#event-topics-in-message-bus","title":"EVENT TOPICS IN Message Bus","text":"Message Alias EVENT_SERVICE_CREATE Name jms:topic:EVENT.SERVICE.CREATE Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_STATE_CHANGED Name jms:topic:EVENT.SERVICE.STATECHANGED Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_DELETE Name jms:topic:EVENT.SERVICE.DELETE Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICE.ATTRCHANGED Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ORDER_CREATE Name jms:topic:EVENT.SERVICEORDER.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to create a new issue Message Alias EVENT_SERVICE_ORDER_STATE_CHANGED Name jms:topic:EVENT.SERVICEORDER.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to update an issue Message Alias EVENT_SERVICE_ORDER_DELETE Name jms:topic:EVENT.SERVICEORDER.DELETE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_SERVICE_ORDER_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICEORDER.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_ALARM_CREATE Name jms:topic:EVENT.ALARM.CREATE Type topic Publishers TMF API Consumers OAS, BUGZILLA Service, CentralLog Service Body AlarmCreateEvent Headers Description The Event contains the Alarm object in payload Message Alias CATALOG_ADD_RESOURCE Name jms:queue:CATALOG.ADD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceCreate Headers Description The Body contains the ResourceCreate object to add Message Alias CATALOG_UPD_RESOURCE Name jms:queue:CATALOG.UPD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceUpdate Headers resourceid , propagateToSO Description The Body contains the ResourceCreate object to update Message Alias CATALOG_GET_RESOURCE_BY_ID Name jms:queue:CATALOG.GET.RESOURCE Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceCreate object to update Message Alias CATALOG_RESOURCES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type topic Publishers TMF API Consumers any Body none Headers none Description retrieve all active services of partners Message Alias CATALOG_ADD_RESOURCESPEC Name jms:queue:CATALOG.ADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationCreate Headers Description The Body contains the ResourceSpecificationCreate object to add Message Alias CATALOG_UPD_RESOURCESPEC Name jms:queue:CATALOG.UPD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationUpdate Headers resourceSpecId Description The Body contains the ResourceSpecificationCreate object to update Message Alias CATALOG_GET_RESOURCESPEC_BY_ID Name jms:queue:CATALOG.GET.RESOURCESPEC_BY_ID Type topic Publishers TMF API Consumers any Body resourceSpecid Headers Description The Body contains the object id to find Message Alias CATALOG_UPDADD_RESOURCESPEC Name jms:queue:CATALOG.UPDADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceSpecificationCreate object to update or create if not exist Message Alias EVENT_RESOURCE_CREATE Name jms:topic:EVENT.RESOURCE.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_STATE_CHANGED Name jms:topic:EVENT.RESOURCE.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_DELETE Name jms:topic:EVENT.SERVICE.RESOURCE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.RESOURCE.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias CATALOG_GET_LCMRULE_BY_ID Name jms:queue:CATALOG.GET.LCMRULE Type topic Publishers TMF API Consumers any Body lcmid Headers Description The Body contains the LCMRuleSpec object Message Alias CATALOG_GET_LCMRULES_BY_SPECID_PHASE Name jms:queue:CATALOG.GET.LCMRULES_BY_SPECID_PHASE Type topic Publishers TMF API Consumers any Body Headers header.servicespecid, header.phasename Description The Body contains the LCMRuleSpec objects of the specific Service Spec and the specific phase Message Alias CATALOG_GET_SERVICETESTSPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICETESTSPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceTestSpecification Message Alias CATALOG_ADD_SERVICETEST Name jms:queue:CATALOG.ADD.SERVICETEST Type queue Destination TMF API service Producers OSOM Body ServiceTestCreate String json Headers \"orderid\"=orderid, \"serviceTestSpecid\"= specid Description Creates Service Test based an a Service Test Spec, Returns a ServiceTest object Message Alias CATALOG_UPD_SERVICETEST Name jms:queue:CATALOG.UPD.SERVICETEST Type queue Destination TMF API service Producers Body ServiceTestUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service test by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICETEST_BY_ID Name jms:queue:CATALOG.GET.SERVICETEST Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service TEST instance Message Alias CRD_DEPLOY_CR_REQ Name jms:queue:CRD.DEPLOY.CR_REQ Type queue Destination CRD service Producers OSOM Body CR spec as String Headers related service id Description Returns a String object containing deployment info Message Alias CRD_PATCH_CR_REQ Name jms:queue:CRD.PATCH.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing PATCH info Message Alias CRD_DELETE_CR_REQ Name jms:queue:CRD.DELETE.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing deletion info"},{"location":"architecture/nfvapi/","title":"API interaction","text":""},{"location":"architecture/nfvapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/nfvapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all vxfs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4\" http://localhost:13000/osapi/admin/vxfs\n</code></pre> <p>Example response:</p> <pre><code>[\n {\n \"id\": 1,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"a954daf2-16da-4b7e-ae42-4825936d453c\",\n \"name\": \"cirros_vnfd\",\n \"iconsrc\": \"/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png\",\n \"shortDescription\": \"cirros_vnfd\",\n \"longDescription\": \"Simple VNF example with a cirros\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz\",\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": 1568981107000,\n \"categories\": [\n {\n \"id\": 3,\n \"name\": \"Service\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 2,\n \"name\": \"Networking\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"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\",\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>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 1,\n \"name\": \"cirros034\",\n \"uuid\": \"d4549610-8abd-42ad-97f4-0a64e1c93977\",\n \"shortDescription\": \"Automatically created during vxf cirros_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 1,\n \"name\": \"cirros_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ADMIN\",\n \"MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n },\n {\n \"id\": 2,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"4ab80095-a63e-4fe7-8598-e1c7e880706e\",\n \"name\": \"cirros_sriov_vnfd\",\n \"iconsrc\": null,\n \"shortDescription\": \"cirros_sriov_vnf\",\n \"longDescription\": \"Simple VNF example with a cirros SRIOV interface\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz\",\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": 1568981100000,\n \"categories\": [\n {\n \"id\": 4,\n \"name\": \"tyu\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 5,\n \"name\": \"tyi\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"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\",\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>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 2,\n \"name\": \"cirros-0.3.6-x86_64\",\n \"uuid\": \"be121176-1d62-4a1b-a3c1-7dce2e069d22\",\n \"shortDescription\": \"Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 2,\n \"name\": \"cirros_sriov_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ROLE_ADMIN\",\n \"ROLE_MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/oauth/","title":"Authentication Server","text":"<p>Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment </p> <p>API users needs to authenticate. All APIs (except grant token request) must include Bearer token in request Authorization header.</p>"},{"location":"architecture/oauth/#oauth-token","title":"OAuth token","text":"<p>Get first an oauth token, using your username and password. </p> <pre><code>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' \n</code></pre> <p>response:</p> <pre><code> {\"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\"}\n\n</code></pre> <p>The <code>access_token</code> will be used next as a Bearer.</p> <pre><code>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\nubuntu@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'\n\nResponse:\n\n\n[{\"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\"}]}]\n\n\n</code></pre>"},{"location":"architecture/osom/","title":"Openslice Service Orchestration and Order Management - OSOM","text":"<p>OSOM is a service responsible for:</p> <ul> <li>Service Order Management (SOM)</li> <li>Service Orchestration (SO)</li> </ul> <p>It uses open source Flowable Business process engine (https://www.flowable.org) .</p> <p>A Service Order follows the states as defined in TMF641 specification: </p> <p></p>"},{"location":"architecture/osom/#initial-state","title":"Initial state","text":"<p>When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.</p> <p></p> <p>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</p>"},{"location":"architecture/osom/#order-scheduler","title":"Order scheduler","text":"<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p> <p></p> <p></p> <p>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.</p>"},{"location":"architecture/osom/#start-order-process","title":"Start order process","text":"<p>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.</p> <p></p> <p></p> <p>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.</p> <ol> <li>During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory</li> <li>The Services(TMF638 model) are assigned to the Order O1 In supportService List</li> <li>Each OrderItem OI1 is related to one serviceSpecification</li> <li>Each ServiceSpecification has also related serviceSpecRelationships</li> <li>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:<ol> <li>Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1</li> <li>We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS) </li> <li>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)</li> <li>The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory</li> <li>Service S_A will have: <ol> <li>startMode 1: Automatically by the managed environment</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> </ol> </li> <li>Services S_C1 and S_C2 we decide that cannot be orchestrated then they have <ol> <li>startMode: 3: Manually by the Provider of the Service</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> <li>If the CFS is a bundle spec it is further recursively orchestrated </li> </ol> </li> <li>Service S_R1 will have <ol> <li>startMode 1: Automatically by the managed environment.</li> <li>State: RESERVED</li> <li>IF The Service has the characteristic CharacteristicByName( \"NSDID\") it will be further processed by the NFVO </li> </ol> </li> </ol> </li> </ol> <p>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:</p> <ol> <li>We wait here for human decision.</li> <li>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</li> </ol> <p>There will be an instance of NFVODeploymentRequest process each for Service S_R1. (see later)</p> <ol> <li>This process is related with the NFVO orchestration</li> <li>It will send a msg to NFVO(s?) for a specific deployment request</li> </ol> <p>All services in \"Order Complete\" are in a status:</p> <ol> <li>Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED</li> <li>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)</li> </ol> <p>A Service follows the states as defined in TMF638 Service Inventory specification: </p> <p></p>"},{"location":"architecture/osom/#nfvodeploymentrequest-process","title":"NFVODeploymentRequest process","text":"<p>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)</p>"},{"location":"architecture/osom/#check-in-progress-orders-process","title":"Check In Progress orders process","text":"<p>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)</p> <p></p>"},{"location":"architecture/osom/#external-service-provider-deployment-request-process","title":"External Service Provider Deployment Request process","text":"<p>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</p>"},{"location":"architecture/osom/#fetch-partner-services-process","title":"Fetch Partner Services Process","text":"<p>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 </p>"},{"location":"architecture/osom/#local-service-orchestration-process","title":"Local Service Orchestration Process","text":"<p>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. </p>"},{"location":"architecture/tmfapi/","title":"TMF OpenAPI specification","text":"<p>PLease check the complete specification here.</p>"},{"location":"architecture/tmfapi/#api-interaction","title":"API interaction","text":""},{"location":"architecture/tmfapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/tmfapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all Service Catalogs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>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\"\n\n</code></pre> <p>response:</p> <pre><code>[\n {\n \"uuid\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"lastUpdate\": \"2019-12-19T10:45:55Z\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": \"ServiceCatalog\",\n \"href\": null,\n \"name\": \"Example Facility Services\",\n \"description\": \"Example Facility Services\",\n \"lifecycleStatus\": \"Active\",\n \"version\": \"1.0\",\n \"validFor\": {\n \"endDateTime\": \"2039-11-20T23:07:21Z\",\n \"startDateTime\": \"2019-11-20T23:07:21Z\"\n },\n \"relatedParty\": null,\n \"id\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"category\": [\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"eMBB\",\n \"@referredType\": null,\n \"id\": \"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"\n },\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"Generic Services\",\n \"@referredType\": null,\n \"id\": \"98b9adf1-a1d6-4165-855f-153ddc2131b1\"\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/","title":"CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster","text":""},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#intended-audience-osl-developers","title":"Intended Audience: OSL developers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>CRIDGE is a service designed to create and manage Custom Resources (CRs) based on Custom Resource Definitions (CRDs) installed on a Kubernetes cluster. By leveraging the OpenSlice (OSL), CRIDGE enables seamless integration and orchestration within Kubernetes environments, utilizing Kubernetes APIs via the TMF APIs and models. Thus, more or less, OSL exposes Kubernetes APIs as TMF APIs and models.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>CRIDGE service allows OSL to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OSL services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>CRIDGE capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <p>OSL can expose CRs in service catalogs, facilitating their deployment in complex scenarios. These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</p> </li> </ol> <p>Why the CRIDGE name? we wanted to build a service that maps TMF models to CRDs; a kind of a CRD to TMF bridge. Therefore CRIDGE was born</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#approach","title":"Approach","text":"<p>OSL in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. The OSL Orchestrator (OSOM) will manage the lifecycle of the Service Order.</li> <li>OSOM creates a Resource in OSL Resource inventory and requests (via CRIDGE) a new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol> <p></p> <p>The provided image illustrates the architecture and workflow of the CRIDGE service, showing how it interacts with other components within a Kubernetes (K8s) cluster. Here is an explanation of the key components and flow in the diagram:</p> <ul> <li>Other OSL Services: This box represents various OSL services such as Service Spec Catalogue, Resource Spec Catalogue, Service Inventory, Resource Inventory, and OSOM (OpenSlice Service Orchestration and Management).</li> <li>Service Bus: This is the communication layer that facilitates interaction between the CRIDGE service and other OSL services.</li> <li>CRIDGE: CRIDGE acts as a bridge that converts CRDs (Custom Resource Definitions) to TMF (TM Forum) APIs and models. It enables the creation and management of Custom Resources (CRs) in the Kubernetes cluster.</li> <li> <p>K8s API: The Kubernetes API server, which is the central control point for managing the Kubernetes cluster. CRIDGE interacts with the K8s API to manage CRDs and CRs.</p> <p>CRD (Custom Resource Definition): A CRD is a way to define custom resources in Kubernetes cluster-wise. It allows the extension of Kubernetes API to create and manage user-defined resources. Example :</p> </li> </ul> <pre><code> apiVersion: apiextensions.k8s.io/v1\n kind: CustomResourceDefinition\n metadata:\n name: myresource.example.com\n</code></pre> <ul> <li>Namespaces: Kubernetes namespaces provide a way to partition resources within a cluster. The diagram shows that multiple namespaces (nsxx, nsyy, nsz) can be managed by CRIDGE.</li> </ul> <p>CR (Custom Resource): A CR is an instance of a CRD. It represents the actual custom resource that is managed within the Kubernetes cluster. Example shown in different namespaces:</p> <pre><code> apiVersion: example.com/v1\n kind: Myresource\n metadata:\n name: example_resource_1\n</code></pre> <p>In a nutchell:</p> <ul> <li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> <li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> <li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> <li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>> The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n> Instances of Myresource are created in various namespaces, each with unique names like example_resource_1.\n</code></pre> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#handling-more-than-one-clusters","title":"Handling more than one clusters","text":"<p>A CRIDGE service is usually responsible for managing one cluster. In the following diagram we show how it can be used for managing multiple clusters:</p> <p></p> <p>We assume that there is an OSL Management cluster that OSL is installed. CRIDGE is also installed there if we would like to manage resources in the same management cluster. - Each CRIDGE service has for example its own configuration to connect to target cluster - Each CRIDGE can be installed either in the managed cluster or at the remote clusters. Connectivity is handled via the service bus - Important: Each CRIDGE has a different context and API endpoints. This is used to request CRDs on a different cluster</p> <p>A CRD has a globally unique name for example mycrd.example.com. So we need to somehow identify also the different cluster</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OSL Resource Inventory need to be aware of these events.</p> <p>The sync process is found in the code and explained by the following picture:</p> <p></p> <p>WatcherService is executed when the cridge service application starts (see onApplicationEvent). First things:</p> <ul> <li>KubernetesClientResource is a class that wraps fabric8\u2019s KubernetesClient<ul> <li>This fabric8 KubernetesClient is initialized from the kubeconf and default context of the machine that runs CRIDGE</li> </ul> </li> <li>On CRIDGE Start up we try to register this cluster and context to OSL catalogs.<ul> <li>See registerKubernetesClientInOSLResource method which registers the KubernetesContextDefinition in Resource Inventory as a LogicalResource via createOrUpdateResourceByNameCategoryVersion method</li> </ul> </li> <li>After the creation(or update) of this cluster as a Resource in OSL we proceed to create SharedIndexInformers for CustomResourceDefinition objects</li> <li>In this way CRIDGE is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)</li> <li>The SharedIndexInformer events notify CRIDGE, which is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)<ul> <li>NOTE: The ADD event is raised every time also we run CRIDGE. Therefore, on ADD we do the method to createORupdate resource specifications and resources</li> </ul> </li> <li>On ADD event:<ul> <li>The CRD is transformed to OSL Kubernetes domain model: method kubernetesClientResource.KubernetesCRD2OpensliceCRD</li> <li>Then the OSL Kubernetes domain model is:<ul> <li>transformed to Resource Specification and is stored to catalog (see createOrUpdateResourceSpecByNameCategoryVersion)</li> <li>Transformed to Resource and is stored to catalog (see createOrUpdateResourceByNameCategoryVersion)</li> </ul> </li> <li>Conceptually while a CRD is a new resource located in the Kubernetes cluster resource, it is transformed also as a Resource Specification (a high-level entity) which is ready to be reused as an entity to other scenarios. The same concept as in Kubernetes where a CRD is a definition ready to be used for instantiating resources of this CRD</li> <li>Then for this CRD a Watcher is added for all Resources of this Kind (fabric8\u2019s GenericKubernetesResource entity) </li> <li>When we have a newly added/updated/deleted resource of a certain CRD the method updateGenericKubernetesResourceInOSLCatalog is called for this object (fabric8\u2019s GenericKubernetesResource entity)</li> <li>We examine if the resource has label org.etsi.osl.resourceId<ul> <li>This label is added by OSOM during service orders to correlate K8S requested resources with resources in inventory</li> </ul> </li> <li>If the label exists, we update the resource by ID updateResourceById</li> <li>Else a resource is created in catalog</li> </ul> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#deployment-of-a-new-cr-based-on-a-crd","title":"Deployment of a new CR based on a CRD","text":"<ul> <li>A message arrives to deploy a CR<ul> <li>The call examines if this CRIDGE service can handle the request (based on context and masterURL)</li> </ul> </li> <li>There are headers received and a crspec in json</li> <li>The crspec is unmarshaled as GenericKubernetesResource</li> <li>Headers are in format org.etsi.osl.*</li> <li>These headers are injected as labels <ul> <li>(see later in orchestration)</li> </ul> </li> <li>A namespace is created for this resource</li> <li>Watchers are created for this namespace for e.g. new secrets, config maps etc , so that they can be available back as resources to the Inventory of OSL (Note only Secrets for now are watched)</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>See ExposingKubernetesResources</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p> <p>However, the following issue needs to be solved: ** How to map the CR lifecycle that is defined in the CRD with the TMF resource Lifecycle? ** - For this We introduced the following characteristics: _CR_CHECK_FIELD, _CR_CHECKVAL_STANDBY, _CR_CHECKVAL_ALARM, _CR_CHECKVAL_AVAILABLE, _CR_CHECKVAL_RESERVED, _CR_CHECKVAL_UNKNOWN, _CR_CHECKVAL_SUSPENDED</p> <p>OSOM sends to CRIDGE a message with the following information:</p> <ul> <li>currentContextCluster: current context of cluster </li> <li>clusterMasterURL: current master url of the cluster </li> <li>org.etsi.osl.serviceId: This is the related service id that the created resource has a reference </li> <li>org.etsi.osl.resourceId: This is the related resource id that the created CR will wrap and reference. </li> <li>org.etsi.osl.prefixName: we need to add a short prefix (default is cr) to various places. For example in K8s cannot start with a number </li> <li>org.etsi.osl.serviceOrderId: the related service order id of this deployment request </li> <li>org.etsi.osl.namespace: requested namespace name </li> <li>org.etsi.osl.statusCheckFieldName: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>org.etsi.osl.statusCheckValueStandby: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAlarm: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAvailable: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueReserved: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueUnknown: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li> <p>org.etsi.osl.statusCheckValueSuspended: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </p> </li> <li> <p>Parameters:</p> <ul> <li>aService reference to the service that the resource and the CR belongs to</li> <li>resourceCR reference the equivalent resource in TMF repo of the target CR. One to one mapping</li> <li>orderId related service order ID</li> <li>startDate start date of the deployment (not used currently)</li> <li>endDate end date of the deployment (not used currently)</li> <li>_CR_SPEC the spec that is sent to cridge (in json)</li> </ul> </li> <li> <p>Returns:</p> <ul> <li>a string response from cridge. It might return \"OK\" if everything is ok. \"SEE OTHER\" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. Any other response is handled as error</li> </ul> </li> <li> <p>CRIDGE receives the message and creates according to the labels the necessary CR</p> </li> <li>It monitors the created resource(s) in namespace (see the Sequence Diagram in previous images)</li> <li>It monitors and tries to figure out and map the Status of the CR to the TMF Status according to the provided org.etsi.osl.statusCheck* labels</li> <li>It sends to the message bus the current resource for creation or update to the TMF service inventory</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#probe-further","title":"Probe further","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> </ul>"},{"location":"contributing/developing/","title":"Developing","text":"<p>OpenSlice backend services are mainly implemented with Java 17 or above and Spring boot.</p> <p>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 docker-compose.yaml file).</p> <p>To get the latest development branch:</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh \nsudo ./deploy.sh develop #[or replace develop with other branch name]\n</code></pre> <p>You may follow the installation process, as described at \"develop\" tagged documentation.</p> <p>To work on a specific subsystem e.g. org.etsi.osl.tmf.api, you must:</p> <p>1a - Deploy only the core necessary subsystems through:</p> <pre><code>sudo docker compose --profile dev down;sudo docker compose --profile dev up -d --build\n</code></pre> <p>Note --profile dev that will only deploy the core dependency subsystems, instead of the whole OpenSlice.</p> <p>1b - Or alternatively, commend out the respective container from the docker-compose.yaml file, so as to deploy the whole OpenSlice, except the subsystem you want to work on, following the provided installation steps.</p> <p>2 - Clone the respective repository, e.g. https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/tree/develop</p> <p>3 - Code :)</p>"},{"location":"contributing/developing/#general-requirements","title":"General requirements","text":"<ul> <li>Docker should be installed in your development environment</li> <li>Run the core subsystems (see above section)</li> </ul>"},{"location":"contributing/developing/#slack","title":"Slack","text":"<p>Feel free to join OpenSlice Slack for any development oriented questions.</p>"},{"location":"contributing/developing/#examples-of-developing-on-specific-subsystems","title":"Examples of developing on specific subsystems","text":""},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-api-service","title":"VNF/NSD Catalog Management and NSD Deployment API service","text":"<p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.api/-/tree/develop</p> <p>Check the docker-compose.yml file. Default port is 13080. Check specifically the datasource username/password, server port.</p> <p>Make sure that the core subsystems are up and running.</p> <p>Execute it with </p> <pre><code>mvn spring-boot:run\n</code></pre> <p>For verification, Swagger API of the service is at <code>http://localhost:13000/osapi/swagger-ui/index.html</code>. </p> <p>There, you may try there various REST actions and authenticate via the OAuth server without the use of the UI.</p>"},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-web-ui-service","title":"VNF/NSD Catalog Management and NSD Deployment WEB UI service","text":"<p>The Web UI is written in AngularJS.</p> <p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.web/-/tree/develop</p> <p>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 <code>http://localhost:13000/osapi/testweb/index.html/</code></p>"},{"location":"contributing/developing/#versionrelease-management","title":"Version/release management","text":"<p>Check this nice article on how we develop and release versions.</p> <p>https://nvie.com/posts/a-successful-git-branching-model/</p> <p>We develop in the develop branch and follow a issue driven development model.</p>"},{"location":"contributing/developing/#wishlist","title":"Wishlist","text":"<p>Check also our wishlist of new features. You can add your own.</p> <p>See Wishlist.</p>"},{"location":"contributing/wishlist/","title":"TMF API","text":"<ul> <li>RBAC of API endpoints</li> <li>TMF Ticketing API support</li> <li>TMF Product</li> <li>HATEOAS integration</li> <li>Select Specs that can be exposed to partners (maybe with a characteristic?)</li> </ul>"},{"location":"contributing/wishlist/#resource-management","title":"resource management","text":"<ul> <li>Resource Activation and Configuration API TMF702 (NEW) (https://projects.tmforum.org/wiki/pages/viewpage.action?pageId=128855518)</li> </ul>"},{"location":"contributing/wishlist/#tmf-web","title":"TMF WEB","text":""},{"location":"contributing/wishlist/#osom","title":"OSOM","text":"<ul> <li>Actions on service order item and acknowledge order status will define the lifecycle</li> <li>action shutdown on specific date for service order</li> <li>action edit on service order item</li> </ul>"},{"location":"contributing/wishlist/#dynamic-attribute-transformation","title":"Dynamic attribute transformation","text":"<ul> <li>DTM decision tables support per Service Specification</li> <li>Schedule Termination of completed order on running services</li> </ul>"},{"location":"contributing/wishlist/#nfvo-connectivity","title":"NFVO connectivity","text":""},{"location":"contributing/wishlist/#osm-client","title":"OSM Client","text":"<ul> <li>VNF/NSD config params Day 2</li> <li>NSD Lifcecylce</li> <li>NST support</li> </ul>"},{"location":"contributing/wishlist/#nfv-api","title":"NFV API","text":""},{"location":"contributing/wishlist/#nfv-web","title":"NFV WEB","text":""},{"location":"contributing/wishlist/#3rd-party-connectivity","title":"3rd party connectivity","text":""},{"location":"contributing/wishlist/#flowone-connector","title":"FlowOne connector","text":""},{"location":"contributing/wishlist/#openstack-connector","title":"Openstack connector","text":""},{"location":"contributing/wishlist/#kubernetes-connector","title":"Kubernetes connector","text":""},{"location":"contributing/wishlist/#centrallog","title":"CentralLog","text":"<ul> <li>Events from TMF to be written to Central Log</li> </ul>"},{"location":"contributing/wishlist/#authentication","title":"Authentication","text":""},{"location":"naas/exposed_apis/","title":"Supported TMFORUM exposed APIs","text":"Endpoint Title Description Version /tmf-api/serviceCatalogManagement/v4 633 Service Catalog Management Provides a catalog of services. 4.0.0 /tmf-api/productCatalogManagement/v4/ 620 Product Catalog Management Provides a catalog of products. 4.0.0 /tmf-api/productOrderingManagement/v4/ v622 Product Ordering Provides a standardized mechanism for placing a product order. 4.0.0 /tmf-api/resourceCatalogManagement/v4 634 Resource Catalog Management This is Swagger UI environment generated for the TMF Resource Catalog Management specification. 4.0.0 /tmf-api/serviceInventory/v4 638 Service Inventory Management Provides a consistent/standardized mechanism to query and manipulate the Service inventory. 4.0.0 /tmf-api/serviceOrdering/v4 641 API ServiceOrdering Provides a standardized mechanism for managing Service Order. 4.0.0 /tmf-api/serviceQualityManagement/v2 657 Service Quality Management This is Swagger UI environment generated for the TMF Service Quality Management specification. 2.0.0 /tmf-api/partyRoleManagement/v4/ 669 Party Role Management This is Swagger UI environment generated for the TMF Party Role Management specification. 4.0.0 /tmf-api/party/v4/organization 632 API Party Provides standardized mechanism for party management such as creation, update, retrieval, deletion and notification of events. 4.0.0 /tmf-api/agreementManagement/v2/ 651 Agreement Management T his is Swagger UI environment generated for the TMF Agreement Management specification. 2.0.0 /tmf-api/resourceOrderingManagement/v4 652 Resource Order Management-v4.0.0 This is Swagger UI environment generated for the TMF 652-Resource Order Management-v4.0.0 specification. 4.0.0 /tmf-api/accountManagement/v4 666 Account Management This is Swagger UI environment generated for the TMF Account Management specification. 4.0.0 /tmf-api/customerManagement/v4 629 Customer Management TMF Customer Management 4.0.0 /tmf-api/userinfo 691 Federated ID TMF Federated ID 1.0.0 /tmf-api/ServiceActivationAndConfiguration/v3/ 640 API Service Activation and Configuration Provides the ability to activate and configure Services. 3.0.0 /tmf-api/alarmManagement/v4/ 642 API Alarm 4.0.0 /tmf-api/serviceTestManagement/v4 653 Service Test Management Provides the ability to manage tests of provisioned Services. 4.0.0 /tmf-api/resourceInventoryManagement/v4 639 API Resource Inventory Management Provides the ability to manage Resources. 4.0.0 /tmf-api/lcmrulesmanagement/v1/ LCM Rules Custom API environment for LCM Rules 1.0.0 /tmf-api/resourcePoolManagement/v1 685 Resource Pool Management Resources that can be reserved are only in one pool. 1.0.0 /tmf-api/geographicSiteManagement/v5 674 Geographic Site Management Covers the operations to manage sites that can be associated with entities 5.0.0"},{"location":"naas/gst_to_tmf/","title":"Generic Slice Template as a Service Specification","text":""},{"location":"naas/gst_to_tmf/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>GSMA Generic Slice Template (GST) Defines customer-oriented service requirements, E.g. Availability, Area of service, delay tolerance, etc. and attempts to narrow down the gap between (network) service customers and vendors</p> <p>Moreove it Proposes standardized Network Slice Templates (NESTs) to target specific use cases</p> <p>In OpenSlice we made an effort and translated the GST to a Service Specification model. So Service Designers can use it as a template to design a new Service.</p> <p>The image illustrates the relationship between the GSMA Generic Slice Template (GST), TM Forum Service Specification, and how they are utilized within OpenSlice to offer network services.</p> <p></p> <p>The GST to TM Forum via OpenSlice:</p> <pre><code> * GST Attributes List: A comprehensive list of service attributes, such as availability, delay tolerance, downlink throughput, energy efficiency, isolation level, mission-critical support, and many others.\n * TMF Service Specification: Demonstrates the transformation of GST attributes into a TM Forum service specification, showing JSON code snippets that define service parameters.\n * Offered Service based on GST: Represents the final offered service, an example of a GST-based service shown as an entry in a catalog, ready to be consumed by customers.\n</code></pre> <p>What was our flow:</p> <pre><code>* Started with defining service requirements and attributes using GST.\n* Translated these GST attributes into a formal TM Forum service specification.\n* Service Offering in OpenSlice: The service specification is then used to create and offer a specific network service within OpenSlice, available for customer selection and deployment.\n</code></pre>"},{"location":"naas/gst_to_tmf/#probe-further","title":"Probe further","text":"<p>See v9 of the GST model in GSMA here</p>"},{"location":"naas/introduction/","title":"Network as a Service (NaaS)","text":"<p>This section describes some core concepts for Delivering Network as a Service in OpenSlice. There are many articles and reports on the subject like:</p> <ul> <li>TMF909 API Suite Specification for NaaS</li> <li>TMF926A Connectivity_as_a_Service </li> <li>TMF931-Open_Gateway_Onboarding_and_Ordering_Component_Suite</li> <li>GSMA Open Gatewy initiative</li> </ul> <p>In general Network as a Service (NaaS) is a service model that allows users to consume network infrastructure and services , similar to how they would consume other cloud services like Software as a Service (SaaS) or Infrastructure as a Service (IaaS). NaaS abstracts the complexity of managing physical network infrastructure, providing users with virtualized network resources that can be dynamically allocated and managed through software.</p>"},{"location":"naas/introduction/#openslice-and-naas","title":"OpenSlice and NaaS","text":"<p>OpenSlice makes extensive use of TMFORUM's models and APIs. Therefore if one is familiar with TMF APIs the terminology and ideas are the same.</p> <p>To deliver NaaS we need to incorporate various APIs (see TMF909 API Suite Specification for NaaS). OpenSlice implements various TMF APIs to deliver NaaS and support the lifecycle functions required to manage the network capabilities exposed as Network as a Service and managed by operational domains.</p>"},{"location":"naas/introduction/#probe-further","title":"Probe further","text":"<ul> <li>For a complete list of supported APIs, see Supported APIs</li> <li>Check the defined user roles of OpenSlice in our Terminology</li> </ul>"},{"location":"naas/lcm_intro/","title":"Service Lifecycle management","text":"<ul> <li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> </ul>"},{"location":"naas/resource_catalog/","title":"OpenSlice Resource Catalog:","text":"<pre><code>* Resource Specifications: Defines the underlying resources required to deliver services, such as network components, servers, and software.\n* Resource Availability: Tracks the availability and status of resources to ensure efficient service delivery.\n</code></pre>"},{"location":"naas/service_catalog/","title":"OpenSlice Service Catalogs","text":"<p>OpenSlice offers complete management of Service Catalogs.</p>"},{"location":"naas/service_catalog/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>OpenSlice offers complete management of Service Catalogs which offer to end users:</p> <ul> <li>Service categories: Lists the available services, including their specifications and performance metrics.</li> <li>Service Bundles: Combines multiple services into a single offering to provide added value to customers.</li> </ul> <p>Service Catalogs contain Service Specifications (organized in Service Categories) exposed to users for Service Orders.</p>"},{"location":"naas/service_catalog/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following. Service catalogs and categories exposed in Service marketplace. </p> <p>In the menu the administrator can manage the Service Catalogs and Categories.</p> <p></p>"},{"location":"naas/service_catalog/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n\nendpoint examples:\n\n/serviceCatalogManagement/v4/serviceCatalog List or find ServiceCatalog objects\n/serviceCatalogManagement/v4/serviceCategory List or find ServiceCategory objects\n\n</code></pre>"},{"location":"naas/service_catalog/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition: Service Template thus create a template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> <li>Service Catalog Integration: Add to Service Catalog the XXXX service with all relevant details.</li> <li>Service Delivery/Order: Provision Service by Using the orchestration system to provision and configure the XXXX service based on customer orders.</li> </ul>"},{"location":"naas/service_catalog/#probe-further","title":"Probe further","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Catalog and Categories here</li> </ul>"},{"location":"naas/service_inventory/","title":"Service Inventory","text":"<p>Service Inventory contains refences to running services that realize a Service Order</p>"},{"location":"naas/service_inventory/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>The Service Inventory is a repository that maintains detailed records of all active services and the underlying resources that support them. It acts as a central repository, tracking the lifecycle of each service from provisioning to decommissioning, and includes references to the specific virtual and physical resources that realize the service, such as servers, network components, storage, and software instances. </p> <p>This inventory enables real-time visibility into the status, configuration, and dependencies of each service, facilitating effective management, troubleshooting, and optimization. </p> <p>By providing a view of the active services, the Service Inventory includes services/resource allocation, and ensures that services are delivered in alignment with the inital requst. </p>"},{"location":"naas/service_inventory/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Inventory and any active Services (reconfigure or terminate).Various examples in this document will guide you to the usage and the management of the Services in Service Inventory.</p>"},{"location":"naas/service_inventory/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-638-ServiceInventoryManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceInventory/v4/service List or find Service objects</p>"},{"location":"naas/service_inventory/#probe-further","title":"Probe further","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_ordering/","title":"Service Ordering","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders.</p>"},{"location":"naas/service_ordering/#intended-audience-service-designers-openslice-administrators","title":"Intended Audience: Service Designers, OpenSlice administrators","text":"<p>The Service Order process is a structured sequence of steps initiated by a customer's Service Order request for a specific service, aimed at delivering and activating the desired service or services (if it is a service bunlde), as well as its related services. It begins with the customer submitting a service request through OpenSlice Services portal or the Service Order API, specifying the necessary details such as service specification, configurations, and any specific requirements.</p> <p>The request is then validated and verified for completeness and eligibility by an administrator which marks the Service Order as ACKNOWLEDGED otherwise it rejects it. </p> <p>Once ACKNOWLEDGED, the service order is processed by OpenSlice orchestration system (OSOM), which schedules/automates the provisioning of the required resources and configurations, coordinating across various components such as MANO controlers for virtual network functions (VNFs), or Containerized controllers or any 3rd party controllers or services or even physical infrastructure. The OpenSlice orchestration system ensures that all dependencies are managed and that the service is correctly configured.</p> <p>After provisioning, the service is activated and handed over to the customer, . This end-to-end process ensures a seamless, efficient, and automated delivery of services, enhancing customer satisfaction and operational efficiency.</p> <p>Ongoing monitoring and other actions can be performed by the Life Cycle management rules</p> <p>Future developments: In future releases it might be possible the ongoing monitoring and support provided to ensure continuous performance and reliability. The service could undergoe a series of tests to ensure it meets the specified performance metrics and SLAs before delivering</p>"},{"location":"naas/service_ordering/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Orders. Various examples in this document will guide you to the usage and the management of the Service Orders.</p>"},{"location":"naas/service_ordering/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-641-ServiceOrdering-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceOrdering/v4/serviceOrder List or find ServiceOrder objects</p>"},{"location":"naas/service_ordering/#probe-further","title":"Probe further","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_spec/","title":"OpenSlice Service Specification","text":"<p>OpenSlice offers complete management of Service Specifications.</p>"},{"location":"naas/service_spec/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Specification is an entity that describes a service offering. There are two types of Service Specifications:</p> <ul> <li>Resource Facing Service Specification</li> <li>Customer Facing Service Specification</li> </ul>"},{"location":"naas/service_spec/#resource-facing-service-specification","title":"Resource Facing Service Specification","text":"<p>Is a Service that It exposes a resource Specification as a Service. (For example expose a Network Service Descriptor as a Service)</p>"},{"location":"naas/service_spec/#customer-facing-service-specification","title":"Customer Facing Service Specification","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders. Usually it exposes other CFSSpec(as a Service Bundle) or other RFSSpecs</p>"},{"location":"naas/service_spec/#definition","title":"Definition","text":"<p>Usually a Service Specification has the following aspects:</p> <ul> <li>Name, Description, Version</li> <li>Marked as a Service Bundle: Combines multiple services into a single offering to provide added value to customers.</li> <li>if is is a Bundle then you must add Related Service Specifications</li> <li>If it is a Resource Facing Service Specification has multiple related Resource Facing Service Specifications</li> <li>Characteristics: a list of service characteristics and their type (TEXT, INTEGER, etc)</li> <li>Also they can be exposed as \"Configurable\" so to allow to end-users during the Service Order to select or type values</li> <li>A logo, displayed if needed in the Service Marketplace</li> <li>Any attachments that further help the user</li> <li>Life Cycle Rules that determine the behavior of the Service and instrument the Service Orchestrator. More on Life Cycle Rules here</li> </ul> <p>Service Designers can create a Service Specification from scratch or use some templates:</p> <pre><code>* Create a Service based from a Network Service Descriptor (NSD)\n* Create a Service based on a Kubernetes Operator\n* Create a Service based on the GSMA GST - Generic Slice Template\n</code></pre>"},{"location":"naas/service_spec/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following.</p> <p>Through the menu and dedicated forms the administrator can manage the Service Specifications. Various examples in this document will guide you to the usage and the design of the services.</p>"},{"location":"naas/service_spec/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceCatalogManagement/v4/serviceSpecification List or find ServiceSpecification objects</p>"},{"location":"naas/service_spec/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition: Create a service specification template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> </ul>"},{"location":"naas/service_spec/#probe-further","title":"Probe further","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Service Specifications in Catalog and Categories here (You need to login - see main guide page)</li> <li>Check the GSMA GST</li> </ul>"},{"location":"naas/so_intro/","title":"Service Orchestration","text":"<ul> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with underlying controller components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> </ul>"},{"location":"naas/so_intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>OpenSlice end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, Network as a Service (NaaS) OpenSlice automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers.</p> <p>This section provides an overview of the Service Orchestration process</p>"},{"location":"naas/nfv/nfvservices/","title":"NFV Services","text":"<p>NFV Services are managed through a dedicate UI the NFV portal (eg http://portal.openslice.io/nfvportal)</p> <p>Users are able through this portal to manage their NFV artifacts towards the NFVO, ( for example onboard VNFs and NSDs to a target OSM)</p> <p>Openslice NFV Services target to accommodate the following envisaged user roles. All users are assumed to be Authenticated:</p> <ul> <li>NFV developer: This role is responsible to upload VNF and NSD Descriptors in the Openslice services towards NFVO like OSM</li> <li>Services administrator: This role represents the user that are responsible for maintenance of the Openslice services</li> </ul> <p>(obsolete: )</p> <ul> <li>Testbed provider: This role represents users that are responsible for testbed administration, configuration, integration, adaptation, support, etc</li> <li>Experimenter: This role represents the user that will utilize our services and tools to deploy an experiment. That is the experiment description in terms of e.g.: NSD (Network Service Descriptor) or TOSCA Specification (in future versions)</li> </ul> <p>Finally an anonymous user role exists who has some really simple usage scenarios (e.g. signup through the portal)</p> <p>During the onboarding process the following occurs:</p> <p>\u2022 A NFV developer submits a NFV archive (VNF or NSD) (he can later manage if needed some metadata) \u2022 The administrator can manage the NFV artifact (e.g. edit it) \u2022 The administrator On-Boards the NFV artifact to the target MANO \u2022 The administrator can optionally mark the NFV: o As public in order to be publicly visible by all portal users o As Certified which means this is certified by a certain entity</p>"},{"location":"naas/nfv/nfvservices/#request-a-new-nsd-deployment-this-is-different-in-comparison-to-services","title":"Request a new NSD deployment (this is different in comparison to Services)","text":"<p>A developer requests a new network service deployment (which NSD, tentative dates, target infrastructure, etc.). The request is marked as UNDER_REVIEW</p> <ul> <li>The administrator is notified about the new request and he has the following options:</li> <li>Schedule the deployment for the requested dates or propose other dates. The request is marked as SCHEDULED</li> <li>Reject the request for some reason. The Request is marked as REJECTED</li> <li>Deploy the request to target VIM(s). The Request is marked as RUNNING</li> <li>Finalize the deployment and release resources. The Request is marked as COMPLETED</li> <li>every change of the request-lifecycle the experimenter is notified.</li> </ul>"},{"location":"service_design/intro/","title":"Service Design in OpenSlice","text":"<p>This section offers details on how to design Service Specifications and expose them in Service Catalogs</p>"},{"location":"service_design/intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Designers create detailed service specifications, which are then managed and exposed in service catalogs. These services are integrated into OpenSlice E2E service orchestration framework to automate and optimize the delivery of network services.</p> <p>OpenSlice can be used to design service specifications for various services, even not networking related services. Here we cover how service designers can expose services related to the NFV world and the containerized world.</p>"},{"location":"service_design/intro/#probe-further","title":"Probe further","text":"<ul> <li>Design and expose services based on containerized resources via the Kubernetes Operator pattern</li> <li>Design and expose services based on NFV artifacts</li> </ul>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/","title":"Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>To illustrate the powerful concept of Kubernetes operators and how they can be utilized to offer a service through OpenSlice, let's provide an example of a \"Calculator as a Service.\" </p> <p>This example will demonstrate the flexibility and capabilities of Kubernetes operators in managing custom resources and automating operational tasks.</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#offering-calculator-as-a-service-through-openslice","title":"Offering \"Calculator as a Service\" through OpenSlice","text":"<ul> <li>We have a service that can accept two integers and an action (SUM, SUB, etc) and returns a result</li> <li>We would like to offer it as a Service through OpenSlice</li> <li>So when a user orders it with some initial parameters, OpenSlice will create it and return the result</li> <li>Also while the service is active, we can do further calculations, until we destroy it.</li> </ul> <p>Assume the following simple CRD of a calculator model accepting two params (spec section) and an action and returning a result (status section)</p> <p>The controller (the calculator code) is implemented in any language and is installed in a Kubernetes cluster</p> <pre><code>\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n name: mycalculators.examples.osl.etsi.org\nspec:\n group: examples.osl.etsi.org\n names:\n kind: MyCalculator\n plural: mycalculators\n singular: mycalculator\n scope: Namespaced\n versions:\n - name: v1alpha1\n schema:\n openAPIV3Schema:\n properties:\n spec:\n properties:\n parama:\n type: integer\n paramb:\n type: integer\n action:\n type: string\n type: object\n status:\n properties:\n result:\n type: integer\n status:\n type: string\n type: object\n type: object\n served: true\n storage: true\n subresources:\n status: {}\n</code></pre> <p>Request to the cluster (through e.g. kubectl apply)</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p>Response</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n\u00a0 creationTimestamp: '2023-12-05T12:26:07Z\u2019\n\n<snip>\n\nstatus:\n\u00a0 result: 350\n\u00a0 status: CALCULATED\nspec:\n\u00a0 action: SUM\n\u00a0 parama: 170\n\u00a0 paramb: 180\n\n</code></pre> <p>To perform this through OpenSlice as a Service Specification ready to be ordered we need to do the following:</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#crd-is-saved-automatically-as-resource-specification","title":"CRD is saved automatically as Resource Specification","text":"<p>As soon as the CRD is deployed in the cluster (e.g. by your admin via kubctl or via any installation through the internet) it is automatically transformed and is available in OpenSlice catalogs as a Resource Specification.</p> <ul> <li>See also the fully qualified name of the resource specification. <ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@docker-desktop@https://kubernetes.docker.internal:6443/</li> <li>The resource specification name is quite unique, so you can install the CRD in many clusters around the internet. Each CRD on each cluster will appear here, for example:<ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@default_cluster@https://10.10.10.8:6443/</li> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@edge1_cluster@https://172.16.10.10:6443/</li> </ul> </li> <li>Having this OpenSlice can manage resources in multiple clusters</li> </ul> </li> </ul> <p></p> <p>See also the detailed characteristics. See how OpenSlice makes all characteristics automatically flat and expanded with key-value style</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-to-users","title":"Expose to Users","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#start-by-creating-a-resourcefacingservicespecification","title":"Start by Creating a ResourceFacingServiceSpecification","text":"<p>From the UI menu create a new Service Specification</p> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#creation-of-crd-related-characteristics","title":"Creation of CRD-related characteristics","text":"<ul> <li>We need now to adjust some characteristics of this CRD as Resource Specification.</li> <li>OpenSlice transalted automatically the CRD spec in a flat list of characteristics.So the \"spec\" section from the original yaml for example, is now unfold into: spec, spec.parama, spec.paramb, etc. the same for \"status\" object</li> <li> <p>We need to make OpenSlice aware of when the service will be active. </p> <ul> <li>So we go to characteristic _CR_CHECK_FIELD and we define that the field that shows the status of the service is the characteristic \"status.status\" (is a text field) </li> <li>Then we go to _CR_CHECKVAL_AVAILABLE and we define the value CALCULATED, which signals the following: When the characteristic \"status.status\" has the value \"CALCULATED\" then OpenSlice will mark the underlying service as \"ACTIVE\"</li> <li>We need also to define the yaml file that OpenSLice will use to create the new resource in the kubernetes cluster</li> <li>We insert the YAML in the characteristic _CR_SPEC</li> </ul> <p>the _CR_SPEC is: </p> </li> </ul> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p></p> <p>However the values are fixed. How do we allow a user to pass parameters through OpenSlice</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-in-catalog","title":"Expose in Catalog","text":"<p>Create a new CustomerFacingServiceSpecification</p> <pre><code>- Go to the menu Service Specification>New Service Specification\n- Create a service My Calulator and mark it as a Bundle\n- Go to Service Specification Relationships and add MyCalculatorRFS\n- The service will be automatically transformed to a \"CustomerFacingServiceSpecification\"\n- Add the following characteristics as the image shows:\n</code></pre> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#allow-users-to-pass-new-values-through-openslice","title":"Allow users to pass new values through OpenSlice","text":"<p>We need to Create LCM rules in CustomerFacingServiceSpecification:</p> <pre><code>- The goal of the rules is to allow the user to pass parameters to the actual resource towards the cluster.\n- we will create one rule that will pass the parameters just before creating the service (PRE_PROVISION phase)\n- we will create one rule that will pass the parameters while the service is active (SUPERVISION phase)\n- The rules will be the same\n</code></pre> <p></p> <p>If we see one rule it will look like the following:</p> <p></p> <ul> <li>We need to change the _CR_SPEC characteristic of the referenced ResourceFacingServiceSpecification</li> <li>First bring a block from Service>Relationships>Service Refs and drop the \"Service MyCalculatorRFS\" block</li> <li>Then add a list block from Lists</li> <li>Then add the block that modifies a referenced characteristic from Service>Relationships>Service Refs the block \"Set value to characteristic of a Referenced Service\"</li> <li>Add a block for text _CR_SPEC </li> <li>We use a block that changes a String according to variables Text>\"A formatted text replacing variables from List\"</li> <li>See that we have as Input string the YAML string lines<ul> <li>see that parama, paramb has a %d (they accept integers), action is %s (accepts a string)</li> <li>See that the variables tha will replace the %d, %d and %s are an list<ul> <li>the first %d will be replaced with the value from characteristic spec.parama</li> <li>the second %d will be replaced with the value from characteristic spec.paramb</li> <li>the %s will be replaced with the value from characteristic spec.action</li> </ul> </li> </ul> </li> </ul> <p>If we see the SUPERVISION rule it will look like the following:</p> <ul> <li>It contains also the Result field, which takes the value from the referenced service</li> <li>Add a block for the Result field from Service>Number blocks</li> <li>Add a str to int block from Number blocks</li> <li>Add Service>Relationships>Service Refs and drop the input block [Service MyCalculatorRFS] \"Get Service details from current context running service\" and select from the drop down the \"serviceCharacteristicValue\"</li> <li>Add as name the \"status.result\" </li> </ul> <p></p> <p></p> <p>Expose it then to a catalogue for orders through the Service Categories and Service Catalogs</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#order-the-service","title":"Order the Service","text":"<p>When a user orders the service, it will look like this:</p> <p></p> <ul> <li>After the Service Order we have 2 services in service inventory on CFS and on RFS. Both have references to values</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The Actual resources are running in the Kubernetes cluster managed by OpenSlice</li> <li>The result is in the characteristic status.result of the running service</li> </ul> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#modify-the-running-service","title":"Modify the running service","text":"<p>The user can modify the service</p> <p></p> <ul> <li>After a while the update is applied to the cluster, the controller will pick up the resource update and patch the resource</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The result will be available to the respective characteristic \"Result\" after a few seconds, as need to go through various steps (OpenSlice orchestrator, down to kubernetes, to Calculator controller and back)</li> </ul> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/","title":"Expose and manage Kubernetes Custom Resource Definitions (Operators) in a Kubernetes Cluster","text":"<p>OpenSlice is capable of exposing Kubernetes Resources and Definitions as Service Specifications</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>OpenSlice is capable to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OpenSlice services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>OpenSlice capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <ul> <li>OpenSlice can expose CRs in service catalogs, facilitating their deployment in complex scenarios.</li> <li>These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#approach","title":"Approach","text":"<p>OpenSlice in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. </li> <li>OSOM creates a Resource in OSL Resource inventory and requests new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OpenSlice Resource Inventory need to be aware of these events.</p> <p>When installing OpenSlice you can configure at least one management cluster. OpenSlice connects via a provided kubeconf</p> <ul> <li>On Start up OSL tries to register this cluster and context to OSL catalogs.</li> <li>After the registration of this cluster as a Resource in OSL OSL is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL</li> <li>Resources created by OpenSlice have labels, e.g. (org.etsi.osl.*)</li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>A CRD by default is exposed as a Resource Specification</p> <p>To ensure unique names across the clusters that OpenSlice can manage, the name of a CRD is constructed as follows:</p> <p><code>Kind @ ApiGroup/version @ ContextCluster @ masterURL</code></p> <p>For example you might see resource Specifications like:</p> <pre><code>- ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n- ```IPAddressPool@metallb.io/v1beta1@kubernetes@https://10.10.10.144:6443/```\n- ```Provider@pkg.crossplane.io/v1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p>All attributes of the CRD are translated into characteristics</p> <p>The following specific characteristics are added:</p> <pre><code> - _CR_SPEC: Used for providing the json Custom Resource description to apply\n - _CR_CHECK_FIELD: Used for providing the field that need to be checked for the resource status\n - _CR_CHECKVAL_STANDBY: Used for providing the equivalent value from resource to signal the standby status\n - _CR_CHECKVAL_ALARM: Used for providing the equivalent value from resource to signal the alarm status\n - _CR_CHECKVAL_AVAILABLE: Used for providing the equivalent value from resource to signal the available status\n - _CR_CHECKVAL_RESERVED: Used for providing the equivalent value from resource to signal the reserved status\n - _CR_CHECKVAL_UNKNOWN: Used for providing the equivalent value from resource to signal the unknown status\n - _CR_CHECKVAL_SUSPENDED: Used for providing the equivalent value from resource to signal the suspended status\n</code></pre> <ol> <li> <p>Create a new Service Specification and use this Resource Specification in Resource Specification Relationships</p> <ul> <li>Then the Service Specification is saved as ResourceFacingServiceSpecification</li> </ul> <p>1.1. You can give at this stage values to the characteristics:</p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>1.2. You can now create LCM rules if you wish</p> </li> <li> <p>Create a new Service Specification and use the Resource Facing Service Specification in Service Specification Relationships</p> <ul> <li>Then the Service Specification is saved as CustomerFacingServiceSpecification</li> </ul> <p>2.1. You can give at this stage values to the characteristics: </p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>2.2. You We can create LCM rules for this new Service Specification</p> <p>2.3. You Expose configurable values for users to configure during service order</p> </li> </ol> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM - OpenSlice Service Orchestrator, checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#mapping-the-cr-lifecycle-that-is-defined-in-the-crd-with-the-openslice-tmf-based-resource-lifecycle","title":"Mapping the CR lifecycle that is defined in the CRD with the OpenSLice (TMF-based) resource Lifecycle","text":"<p>OpenSlice adds automatically as we see the following characteristics: </p> <pre><code> - _CR_CHECK_FIELD\n - _CR_CHECKVAL_STANDBY\n - _CR_CHECKVAL_ALARM\n - _CR_CHECKVAL_AVAILABLE\n - _CR_CHECKVAL_RESERVED\n - _CR_CHECKVAL_UNKNOWN\n - _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>These characteristics instrument OpenSlice services to manage and reflect the lifecycle of a kubernetes resource to OpenSlice's (TMF based) lifecycle</p> <ul> <li>_CR_CHECK_FIELD: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>_CR_CHECKVAL_STANDBY: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_ALARM: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_AVAILABLE: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_RESERVED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_UNKNOWN: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#probe-further","title":"Probe further","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> <li>Learn more about CRIDGE, the service in OSL that manages CRDs/CRs</li> </ul>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/","title":"Example: Offer Jenkins as a Service via Openslice","text":"<p>Before reading this example please make sure that you went through the Design Helm as a Service </p> <p>We will use the <code>Kind: Application</code> of ArgoCD and create a ResourceFacingServiceSpecification for Jenkins</p> <pre><code>1. Go to Service Specifications\n2. Create New Specification\n3. Give a Name, eg. jenkinsrfs\n4. Go to Resource Specification Relationships\n5. Assign ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p></p> <p>Focus now on the characteristics configuration.</p> <p>First we need to map the lifecycle of ArgoCD Application to TMF Resource State</p> <p></p> <p>In ArgoCD the field health.status has the value that we need to check (Healty, Progressing, etc)</p> <p>The _CR_SPEC can be designed first in a YAML or json editor. Let's see a YAML definition:</p> <p>```</p> <p>apiVersion: argoproj.io/v1alpha1 kind: Application metadata: finalizers: - resources-finalizer.argocd.argoproj.io name: openslice-jenkins namespace: argocd spec: project: default destination: namespace: opencrdtest name: in-cluster source: repoURL: https://charts.jenkins.io targetRevision: 4.6.1 chart: jenkins helm: values: | controller: service: type: ClusterIP syncPolicy: automated: prune: true selfHeal: true allowEmpty: false syncOptions: - Validate=false - CreateNamespace=true - PrunePropagationPolicy=foreground - PruneLast=true - RespectIgnoreDifferences=true ```</p> <p>NOTICE</p> <p>On each installation OSOM will change the name of the resource in order to be unique (will have a UUID)</p> <p><code>name: openslice-jenkins</code> </p> <p>destination namespace that ArgoCD will use is the name <code>opencrdtest</code></p> <p><code>destination: namespace: opencrdtest</code></p> <p>This implies that ArgoCD installs the Jenkins always in the same namespace</p> <p>To avoid this we will create a simple pre-provision rule to change the namespace properly</p> <p>See the following image: </p> <p></p> <ol> <li>Drag-Drop the _CR_SPEC characteristic of jenkinsrfs from the Service>Text blocks</li> <li>Drag-Drop Text>Formatted text block</li> <li>Drag-Drop Text>Multi-line text input block</li> <li>Copy paste the YAML text</li> <li>Change the spec: destination:namespace to the value %s</li> <li>Drag-Drop Lists>Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context>Current Service Order block and select the id. Connect it to the List</li> <li>Save the PRE_PROVISION Rule</li> </ol>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#expose-the-service-to-your-users","title":"Expose the service to your users","text":"<p>Expose then as CustomerFacingServiceSpecification by using the previous RFSS as Service Specification Relationship 1. Create a Jenkins service and mark as Bundle and save it 2. Go to Service Specification Relationships and assign Jenkinsrfs 3. Add also a Logo if you wish</p> <p></p> <p></p> <p>Expose it now to a Category and a Catalog to be available for ordering.</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#order-the-service","title":"Order the service","text":"<p>Order the service from the catalog. </p> <p>Soon the order will be completed and the Services will be active</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#how-to-access-the-jenkins-installation","title":"How to access the Jenkins installation:","text":"<p>From the Supporting services of the Service Order, select the ResourceFacingService (jenkinsrfs)</p> <p>The ResourceFacingService has also supporting resources in resource inventory.</p> <p></p> <p>One is the resource reference to the application (e.g. cr_tmpname...), the other is a secret (e.g. cr87893...). </p> <p>Click to go to the secret resource (This is in the Resource inventory of OpenSlice)</p> <p></p> <p>Use them to login in your Jenkins.</p> <p>Exposing Jenkins to you external is a matter of cluster configuration and request (nodeport, load balancing, etc)! This is not a topic for this example</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/","title":"Expose HELM charts as Service Specifications","text":"<p>Manage Helm charts installations via OpenSlice Service Specifications and Service Orders.</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. </p> <p>Helm is a tool that automates the creation, packaging, configuration, and deployment of Kubernetes applications by combining your configuration files into a single reusable package</p> <p>At the heart of Helm is the packaging format called charts. Each chart comprises one or more Kubernetes manifests -- and a given chart can have child charts and dependent charts, as well. Using Helm charts:</p> <pre><code> - Reduces the complexity of deploying Microservices\n - Enhances deployment speed\n - Developers already know the technology\n</code></pre> <p>There are many Helm charts and Helm repositories there that are ready to be used</p> <p>Enable loose coupling and more orchestration scenarios</p> <p>Developers create and deploy applications in things they already know (e.g. Helm charts)</p> <p>Use the TMF models as wrapper entities around Helm charts</p> <p>Use OpenSlice to expose them in service catalogs and deploy them in complex scenarios (service bundles) involving also other systems:</p> <pre><code>- Include e.g. RAN controllers, \n- Pass values through life cycle rules from one service to another, \n- Manage multiple Helms in multiple clusters\n</code></pre>"},{"location":"service_design/kubernetes/helm/design_helmaas/#the-installation-of-helm-charts-is-based-on-openslice-crd-support","title":"The installation of HELM charts is based on OpenSlice CRD support","text":"<p>Please read more here</p> <p>For installing HELM charts we will use ArgoCD a well known Kubernetes-native continuous deployment (CD) tool </p> <p>ArgoCD is a Kubernetes-native continuous deployment (CD) tool</p> <p>While just deploying Heml charts is just a scenario for ArgoCD , in future one can exploit it for many things</p> <p>Despite some other tools like FluxCD, it provides also a UI which is useful for management and troubleshooting</p> <p>We will mainly use the CRD of <code>Kind: Application</code> that ArgoCD can manage</p> <p>Before proceeding, install ArgoCD in your management cluster, by following ArgoCD instructions</p> <p>As soon as you install ArgoCD, OpenSlice is automatically aware for specific new Kinds. The one we will use is is the <code>Kind: Application</code> that ArgoCD can manage under the apiGroup argoproj.io</p> <p>Browse to Resource Specifications. You will see an entry like the following:</p> <p><code>Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/</code></p> <p>see image: </p> <p></p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#whats-next","title":"What's next","text":"<p>See the Example: Offer Jenkins as a Service via Openslice </p>"},{"location":"service_ordering/ordering_services/","title":"Service Ordering","text":""},{"location":"service_ordering/ordering_services/#intended-audience-users","title":"Intended Audience: Users","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"<p>version: 2024Q2 - SNAPSHOT</p> <p>The ETSI Software Development Group for OpenSlice (SDG OSL) is developing an open-source service-based Operations Support System (OSS) to deliver Network as a Service (NaaS) following specifications from major SDOs including ETSI, TM Forum and GSMA.</p>"},{"location":"#usage","title":"Usage","text":"<p>OpenSlice can be used in managing 5G network services from the user device to the core network and cloud as well as for Orchestrating cloud resources across private and public clouds for enterprise applications. OpenSlice is capable of supporting most of the features of an end-to-end (E2E) service orchestration framework while many of them will be more mature in future releases. The following figure displays the general usage of OpenSlice. </p> <p></p> <p>The image illustrates how OpenSlice supports the idea of an E2E network service orchestration framework by integrating multiple network components and layers, from user devices at the edge to radio, transport networks, core and public cloud services, ensuring seamless, secure, and efficient delivery of network services. Assuming that there are domain controllers for all the above domains OpenSlice can create the end-to-end service via the domain controllers by following the process of creating and deploying the end-to-end service by implementing transformations, and consuming APIs from various network entities. OpenSlice, in a nutchell, offers user interfaces where users can interact with the framework to order, expose, and manage service catalogs, services and resources that can be ordered, following business logic and policies and exposed through the APIs. </p>"},{"location":"#an-end-to-end-e2e-service-orchestration-framework","title":"An end-to-end (E2E) service orchestration framework","text":"<p>An end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, especially, Network as a Service (NaaS) a comprehensive system is needed that automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers. Such E2E frameworks enable users to consume network services on-demand, similar to how cloud computing services are consumed. Some key components and features of such frameworks are:</p> <ul> <li>Service Catalogs including predefined Network Services based on service templates for common network services like 5G core functions, 5G slices, VPNs, SD-WAN, firewalls, load balancers, etc. as well as custom Network services with Options for users to define their own network configurations.</li> <li>User Interface (UI) and APIs exposure, offering both a Self-Service Portal that allows users to request, configure, and manage network services as well as APIs for enabling programmatic access to network services for integration with other systems and automation scripts.</li> <li>Service Design and Creation tharough service templates based on predefined models for creating services.</li> <li>Automation and Workflow Management via Orchestration Engines, supporting Process Automation for automating repetitive tasks and processes, workflow management and orchestration for automating the provisioning, configuration, and management of network services while coordinating multiple workflows to ensure services are delivered efficiently, ensuring that services comply with predefined policies and standards.</li> <li>Standardized API exposure for seamless integration with different systems and services and APIs transformation support for converting data formats and protocols to ensure compatibility and information exhange between systems during workflows orchestration</li> <li>Service and Resource management and Orchestration while including the capability of multi-domain coordination in managing services/resources across different domains like cloud, 5G core, radios, transport network, and edge including dynamic allocation with adjusting resources based on demand and service requirements. To accomplish the above advanced technologies need to be exploited like, Containerized workloads, Network Function Virtualization (NFV) which uses virtualized network functions to provide services like routing, switching, and security and Software-Defined Networking (SDN) which Controls the network programmatically to dynamically manage traffic and resources.</li> <li>Monitoring and Analytics including Service Monitoring while continuously tracking the performance and health of services with capabilities to analyse data to optimize service delivery and predict issues. Real-Time Monitoring is also needed for tracking the performance and health of network services enabling analytics that provide insights for optimization and troubleshooting.</li> <li>Security and Access Control for ensuring only authorized users and systems can access network services. while implementing rules and policies to comply with regulatory requirements.</li> </ul>"},{"location":"#an-e2e-service-orchestration-workflow","title":"An E2E service orchestration workflow","text":"<p>In general an E2E service orchestration workflow includes the following phases:</p> <ul> <li>Service Request: Users or systems request a network service through the self-service portal or API. The request can specify details such as bandwidth, security features, geographic coverage, and duration.</li> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with the underlying components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> <li>Provisioning and Configuration: Services, network resources and network functions (VNFs) are instantiated and configured according to the service request during Service Orchestration through the orchestration engine. Other controllers manage their own domains, for example SDN controllers, manage the flow of data through the network to ensure optimal performance and adherence to policies, RAN controllers manage the RAN resoruces, Containerized controllers manage their workload, etc</li> <li>Service Delivery: The E2E network service is activated and made available to the user. Continuous monitoring ensures the service operates as expected, with automatic adjustments made as necessary.</li> <li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> <li>At the end of the service period, resources are decommissioned and reclaimed.</li> </ul>"},{"location":"#openslice-for-service-providers","title":"OpenSlice for Service Providers","text":"<p>OpenSlice is used by Service Providers to design Network Services, expose them in Service Catalogues and make them available for Service Orders. OpenSlice then can perform the E2E service orchestration workflow.</p> <p>There are various portals offering UI friendly access to users acting as Service Providers:</p> <ul> <li>The Services portal allows Service Providers to design and expose services.</li> <li>The Resource portal allows users to access resource specifications and running resources in resource inventory.</li> <li>The NFV portal allows users to manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Providers to manage test artifacts</li> <li>The Products portal allows Service Providers to expose services as products</li> </ul>"},{"location":"#openslice-for-service-consumers","title":"OpenSlice for Service Consumers","text":"<p>OpenSlice allows Service Consumers to browse the available offered service specifications in a self-service manner. It also supports TMFORUM Northbound APIs regarding Service Catalog Management, Ordering, Resource, etc. There are various portals offering UI friendly access to users acting as Service Consumers:</p> <ul> <li>The Services portal allows Service Consumers to select and order predefined services.</li> <li>The Resource portal allows users to access running resources in resource inventory.</li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Consumers to manage test artifacts</li> <li>The Products portal allows Service Consumers to expose services as products</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>"},{"location":"#live-demo","title":"Live Demo","text":"<p>Check a live demo of OpenSlice in the following pages:</p> <p>(username=admin, password=openslice or username=admin, password=changeme)</p> <ul> <li>OpenSlice demo: http://portal.openslice.io/</li> <li>OpenSlice Service Catalogs and ordering: http://portal.openslice.io/services/</li> <li>OpenSlice NFV Services onboarding: http://portal.openslice.io/nfvportal </li> </ul>"},{"location":"#probe-further","title":"Probe further","text":"<ul> <li>Installing OpenSlice. See the Deployment of OpenSlice</li> <li>Learn more on [how OpenSlice supports Network as a Service(NaaS)](./naas/introduction</li> <li>Who is implementing OpenSlice? See OSL ETSI SDG</li> <li>How OpenSlice works? See the Architecture of OpenSlice</li> </ul>"},{"location":"OpenSlice_deployment_examples/","title":"OpenSlice deployment examples","text":"<p>Here are some examples from past and current efforts that use OpenSlice in various cases.</p>"},{"location":"OpenSlice_deployment_examples/#5ginfire-eu-project2018","title":"5GinFIRE EU project(2018)","text":"<ul> <li>MultiVIM approach</li> <li>9 Testbeds</li> <li>Automotive, Smart City, eHeath, \u000bPPDR, Media, SDR, Cloud</li> <li>22 Experiment proposals from Verticals</li> <li>100+ Users</li> <li>VxF catalog: </li> <li>150+ ONBOARDED VxFs</li> <li>OSM TWO, FOUR, FIVE</li> <li>50+ are public to be reused</li> <li>NSD catalog: </li> <li>90+ ONBOARDED NSDs</li> <li>30+ are public to be reused</li> <li>500+ Deployment requests \u000b(orchestrations) performed</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5g-vinni-eu-project-2020","title":"5G-VINNI EU project (2020)","text":"<ul> <li>Multi-vendor challenge \u2013 Commercial and opensource</li> <li>5G services on multiple sites</li> <li>Introduction of TMFORUM models and APIs </li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5gasp-eu-project-2021-2024","title":"5GASP EU project (2021-2024)","text":"<ul> <li>Support a multi-site CI/CD testing automated DevOps cycle for network Applications</li> <li>Multiple NFVOs</li> <li>Introducing Service Test models</li> <li>Introducing the Product models for a network application marketplace</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#fidal-eu-project-2023-","title":"FIDAL EU project (2023-)","text":"<ul> <li>Support multi-site automated testing</li> <li>Multiple testbeds/ different APIs</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#across-eu-project-2023-","title":"ACROSS EU project (2023-)","text":"<ul> <li>Used as a cross-domain orchestrator</li> <li>Support the multi-domain orchestrator</li> <li>Support Zero-touch provisioning concepts</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#incode-eu-project-2023-","title":"INCODE EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#imagineb5g-eu-project-2023-","title":"IMAGINEB5G EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul>"},{"location":"OpenSlice_deployment_examples/#etsi-zsm-poc-2","title":"ETSI ZSM PoC #2","text":"<ul> <li>Automated Network Slice Scaling in Multi-Site Environments</li> </ul> <p>[</p>"},{"location":"alarms_actions/","title":"Alarms","text":"<p>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.</p>"},{"location":"alarms_actions/#alarms-and-actions","title":"Alarms and Actions","text":"<p>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</p> <p>Alarms can be automatically resolved by specific actions. Today only the following actions are offered.</p> <ul> <li>execDay2</li> <li>scaleServiceEqually</li> </ul>"},{"location":"alarms_actions/#execday2","title":"execDay2","text":"<p>Usually used to perform a Day2 configuration (towards OSM). To use it, Create a New Action Specification Name=execDay2 as following</p> <p></p> <p>Now make a Service Order for your service. In this example \u03c2\u03b5 used a cirros NSD</p> <p>Create a New Action Rule for the running services as the following example:</p> <p></p> <p>The scope is the running cirros service. </p> <p>Params should be paramname=value;paramname2=value2;paramname3=value3 (must exist in the VNF otherwise OSM will raise an error).</p> <p>In this case should be filename=test.txt</p> <p>Primitive=touch</p> <p>ServiceId = select the service which will accept the Day2. In this case is the same</p> <p>To test it:</p> <p>Go to the Service Inventory and select the active Service.</p> <p>Note the UUID of the service (e.g. c4e7990a-e174-4cd2-9133-b10e56721e08 copy from address bar), DeploymentRequestID and NSDID from characteristics</p> <p>You can either use the UUID of the service or the DeploymentRequestID and POST to the Alarms endpoint ( /tmf-api/alarmManagement/v4/alarm)</p> <p>If the DeploymentRequestID is used then POST:</p> <pre><code>\n{\n \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n \"state\": \"raised\",\n \"alarmType\": \"qualityOfServiceAlarm\",\n \"probableCause\": \"thresholdCrossed\",\n \"ackState\": \"unacknowledged\",\n \"perceivedSeverity\": \"major\",\n \"sourceSystemId\": \"mano-client-service\",\n \"alarmDetails\": \"NSID=3;DeploymentRequestID=1\",\n \"specificProblem\": \"myalram raised\"\n}\n\n</code></pre> <p>If the UUID is used then POST:</p> <pre><code>\n{\n \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n \"state\": \"raised\",\n \"alarmType\": \"qualityOfServiceAlarm\",\n \"probableCause\": \"thresholdCrossed\",\n \"ackState\": \"unacknowledged\",\n \"perceivedSeverity\": \"major\",\n \"sourceSystemId\": \"mano-client-service\",\n \"alarmDetails\": \"analarm\",\n \"specificProblem\": \"myalram raised\",\n \"affectedService\": [\n {\n \"id\": \"c4e7990a-e174-4cd2-9133-b10e56721e08\"\n }\n ]\n\n}\n\n</code></pre> <p>The Alarm to be created must have the affected Service ID equal to the running service from the scope (the cirros_ns)</p> <p>Go to service inventory you will see the notes and also the service characteristics for any EXEC_ACTION updates</p> <p>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</p>"},{"location":"alarms_actions/#scaleserviceequally","title":"scaleServiceEqually","text":"<p>This action is used from getting a scaling event from OSM. Please see the next demo for details on how it works</p>"},{"location":"alarms_actions/#prototype-demo","title":"Prototype demo","text":"<p>You can watch how we used the prototype on the following ETSI ZMS PoC #2</p> <ul> <li>ETSI ZMS PoC #2: https://www.etsi.org/events/1905-webinar-zsm-poc-2-showcase-automated-network-slice-scaling-in-multi-site-environments/</li> </ul>"},{"location":"catalogs/","title":"Catalogs and Templates","text":"<p>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.</p>"},{"location":"catalogs/#createdesign-a-service-specification","title":"Create/Design a Service Specification","text":""},{"location":"catalogs/#first-import-some-resources-as-resource-facing-services-rfss","title":"First Import some Resources as Resource Facing Services (RFSs)","text":"<p>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</p>"},{"location":"catalogs/#createdesign-a-customer-facing-service-specification","title":"Create/Design a Customer Facing Service Specification","text":"<p>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.</p> <p>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.</p>"},{"location":"catalogs/#initial-configuration-for-osm-deployment","title":"Initial configuration for OSM deployment","text":"<p>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:</p> <pre><code>{ \"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 }]}]}]}\n\n</code></pre> <p>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):</p> <pre><code>{\"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\"}}]}\n</code></pre> <p>You can leave the Alias and Unit of Measure as is. Check also the is Default.</p>"},{"location":"catalogs/#day-2-primitive-actions","title":"Day 2 Primitive Actions","text":"<p>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:</p> <ul> <li>Go to the RFS related to the NSD that contains VNFs with primitives</li> <li>create a characteristic named Primitive:: , e.g. Primitive::touch <li>select Value Type: ARRAY</li> <li>add Service Characteristic Value: i) alias=primitive, value= (e.g. touch), ii) alias=member_vnf_index, value= (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) <p>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</p>"},{"location":"catalogs/#generic-slice-templates-gst","title":"Generic Slice Templates (GST)","text":"<p>(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:</p> <ul> <li>Availability</li> <li>Area of Service</li> <li>Delay tolerance</li> <li>Deterministic communication</li> <li>Downlink throughput per network slice</li> <li>Downlink throughput per UE</li> <li>Energy efficiency</li> <li>Group communication support</li> <li>Isolation level</li> <li>Location based message delivery</li> <li>Maximum supported packet size</li> <li>Mission critical support</li> <li>MMTel support</li> <li>NB-IoT support</li> <li>Network Slice Customer network functions</li> <li>Number of connections</li> <li>Number of terminals</li> <li>Performance monitoring</li> <li>Performance prediction</li> <li>Positioning support</li> <li>Radio spectrum</li> <li>Reliability</li> <li>Root cause investigation</li> <li>Session and Service Continuity support </li> <li>Simultaneous use of the network slice</li> <li>Slice quality of service parameters</li> <li>Support for non-IP traffic </li> <li>Supported access technologies </li> <li>Supported device velocity </li> <li>Synchronicity</li> <li>Terminal density </li> <li>Uplink throughput per network slice </li> <li>Uplink throughput per UE</li> <li>User management openness</li> <li>User data access </li> <li>V2X communication mode</li> </ul> <p>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</p> <p>Providers can clone a GST as e NEST directly in Openslice Web portal and the adjust the default attributes to their Service Specification</p>"},{"location":"catalogs/#5g-vinni-service-blueprint","title":"5G-VINNI Service Blueprint","text":"<p>(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</p> <p>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. </p> <p>Here is a tentative approach in JSON : https://github.com/openslice/org.etsi.osl.tmf.api/tree/master/src/main/resources/vinnisb</p> <p>5G-VINNI SB has many commonalities with GST as well as it offers Testing as a Service attributes.</p> <p>Next figure presents the high-level object model of a 5G-VINNI service blueprint.</p> <p>The 5G-VINNI SB as a first prototype approach is conceived as a CFS of a \u2018bundle\u2019 of services. It has some characteristics, like name, description, service type (eMBB, etc) and others. The constituent services are:</p> <ul> <li>A \u201cService Topology\u201d 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</li> <li>A \u201cVINNI SB Service Requirements\u201d Service Specification which is related to Service requirements. This is very similar to GST. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 1\u201d Service Specification which contains characteristics for service exposure on level 1 ( see D3.1 for details). It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 2\u201d Service Specification which contains characteristics for service exposure on level 2. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 3\u201d Service Specification which contains characteristics for service exposure on level 3. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 4\u201d Service Specification which contains characteristics for service exposure on level 4. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service 3rd part VNF\u201d 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</li> <li>A \u201cVINNI SB Service 3rd part NSD\u201d 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</li> <li>A \u201cVINNI SB Service Monitoring\u201d Service Specification which contains characteristics for offering Monitoring capabilities on the requested Service. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Testing\u201d Service Specification which contains characteristics for offering Testing capabilities on the requested Service. It is considered at this stage a CFS.</li> </ul> <p></p>"},{"location":"catalogs/#manage-a-service-specification","title":"Manage a Service Specification","text":"<p>You can manage them though the Web UI</p>"},{"location":"catalogs/#assign-a-service-specification-to-service-categories-and-publish","title":"Assign a Service Specification to Service Categories and Publish","text":"<p>Just create categories and from the menu select the category and add services</p>"},{"location":"catalogs/#retireremove-a-service-specification","title":"Retire/Remove a Service Specification","text":"<p>Delete it from the category</p>"},{"location":"catalogs/#consume-and-expose-service-specifications-from-other-service-catalogues","title":"Consume and expose Service Specifications from other Service Catalogues","text":"<p>See more on Consuming Services From External Partner Organizations</p>"},{"location":"config_intro/","title":"Configuring and managing OpenSlice","text":""},{"location":"config_intro/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This section provides information on how to configure and manage different aspect of OpenSlice while in operation. For example:</p> <ul> <li>Manage user roles and access in Keycloak</li> <li>Configure/Manage NFVOs</li> <li>Advanced configuration scenarios</li> </ul>"},{"location":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>Following, you may thorough guides depending on the installation type of your choice:</p> <ul> <li>Installing via Docker Compose guide</li> <li>Installing via Kubernetes guide</li> </ul>"},{"location":"deploymentCompose/","title":"OpenSlice Deployment Guide with Docker Compose","text":""},{"location":"deploymentCompose/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":""},{"location":"deploymentCompose/#requirements","title":"Requirements","text":""},{"location":"deploymentCompose/#hardware-requirements","title":"Hardware requirements:","text":"Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 30 GB storage 50 GB storage"},{"location":"deploymentCompose/#software-requirements","title":"Software Requirements:","text":"<ul> <li>Docker: A running environment for Docker Compose services</li> </ul>"},{"location":"deploymentCompose/#preparing-the-environment","title":"Preparing the environment","text":""},{"location":"deploymentCompose/#1-backup-your-previous-database-if-necessary","title":"1. Backup your previous database if necessary:","text":"<pre><code>sudo docker exec amysql /usr/bin/mysqldump -u root --password=letmein ostmfdb > backup_ostmfdb.sql\n</code></pre>"},{"location":"deploymentCompose/#2-install-docker","title":"2. Install docker","text":"<p>Since July 2023 Docker Compose V1 stopped receiving updates. OpenSlice fully reverted to Compose V2, which is integrated in the Docker installation.</p>"},{"location":"deploymentCompose/#3-configure-containers-to-properly-resolve-the-dns-of-your-domain-optional","title":"3. Configure containers to properly resolve the DNS of your domain (optional)","text":"<pre><code>sudo nano /etc/docker/daemon.json\n</code></pre> <p>and add:</p> <pre><code>{ \n \"dns\": [\"8.8.8.8\", \"8.8.4.4\"]\n}\n</code></pre> <p>After editing daemon.json restart docker daemon for the changes to take place</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deploymentCompose/#downloading-the-project","title":"Downloading the project","text":""},{"location":"deploymentCompose/#1-create-a-new-folder-to-download-the-project","title":"1. Create a new folder to download the project","text":"<pre><code>mkdir openslice\n</code></pre> <pre><code>cd openslice\n</code></pre>"},{"location":"deploymentCompose/#2-download-the-deployment-script","title":"2. Download the deployment script","text":"<p>Download the deployment / environment preparation script</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh\n</code></pre> <p>Make it executable</p> <pre><code>sudo chmod +x deploy.sh\n</code></pre>"},{"location":"deploymentCompose/#3-run-the-deployment-script","title":"3. Run the deployment script","text":"<p>OpenSlice is a multi repo project. This script selects the same branch for all repositories of the project to pull from.</p> <p>After that it builds the respective jar files locally and installs all the npm packages needed for the UI.</p> <p>If you run the script without selecting a branch the the main branch is going to be selected.</p> <p>We recommend:</p> <ul> <li>main branch for the most stable experience and</li> <li>develop branch for an experience with the latest features (for develop branch installation, it is strongly advisable that you may as well follow the develop documentation)</li> </ul> <pre><code>sudo ./deploy.sh develop #[or replace main with other branch name]\n</code></pre> <p>We recommend running the deploy.sh script with root permissions! In other case, some directories may not be accessible by the project building tools and hinder the smooth installation.</p>"},{"location":"deploymentCompose/#configure-docker-compose-services","title":"Configure Docker Compose services","text":""},{"location":"deploymentCompose/#1-create-configuration-specific-docker-compose-file-from-the-template","title":"1. Create configuration specific Docker Compose file from the template","text":"<pre><code>cd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo cp docker-compose.yaml.configure docker-compose.yaml\n</code></pre>"},{"location":"deploymentCompose/#2-configure-mysql-portal-container-optional","title":"2. Configure mysql-portal container (optional)","text":"<ol> <li>In folder <code>org.etsi.osl.main/compose/mysql-init</code> edit the file <code>01-databases.sql</code>.</li> <li>In the <code>org.etsi.osl.main/compose/docker-compose.yaml</code> edit the credentials of the users that services use to connect to the databases, if you wish.<ul> <li>portaluser (default is 12345) and</li> <li>keycloak (default is password)</li> </ul> </li> </ol>"},{"location":"deploymentCompose/#3-configure-keycloak-container-optional","title":"3. Configure keycloak container (optional)","text":"<ol> <li> <p>If you made changes to keycloak's mysql credentials:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code>.</p> </li> </ol> <pre><code>DB_DATABASE: keycloak\nDB_USER: keycloak\nDB_PASSWORD: password\n</code></pre> <ol> <li> <p>If you want to change the keycloak admin password:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> </li> </ol> <pre><code>KEYCLOAK_PASSWORD: Pa55w0rd\n</code></pre>"},{"location":"deploymentCompose/#4-configure-bugzilla-container-optional","title":"4. Configure bugzilla container (optional)","text":"<p>If you want to utilise the Bugzilla connector:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.activemq.brokerUrl\": \"tcp://anartemis:61616?jms.watchTopicAdvisories=false\",\n \"spring.activemq.user\": \"artemis\",\n \"spring.activemq.password\": \"artemis\",\n \"bugzillaurl\":\"\",\n \"bugzillakey\":\"\",\n \"main_operations_product\":\"\"\n}'\n</code></pre> <p>And add the provided Bugzilla installation information:</p> <pre><code>\"bugzillaurl\":\"bugzillaurl.xx:443/bugzilla/\",\n\"bugzillakey\":\"exampleKeyeqNNwxBlgxZgMEIne0Oeq0Bz\",\n\"main_operations_product\":\"Main Site Operations\" // this is the default product to issue tickets\n</code></pre> <p>Bugzilla should have the following components under the specified product: </p> <ul> <li>NSD Deployment Request: Component used to schedule deployment req </li> <li>Onboarding: Issues related to VNF/NSD Onboarding </li> <li>Operations Support: Default component for operations support </li> <li>Validation: Use to track validation processes of VNFs and NSDs </li> <li>VPN Credentials/Access: Used for requesting VPN Credentials/Access </li> </ul> <p>Also in the 'Main Site Operations' product, a version named 'unspecified' must be created.</p>"},{"location":"deploymentCompose/#5-configure-osportalapi-container-nfv-services-conditional","title":"5. Configure osportalapi container (NFV services) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}, as well as \"spring.portal.main.domain\" property.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"spring.portal.main.domain\": \"http://localhost\",\n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#6-osscapi-container-tmf-api-service-conditional","title":"6. osscapi container (TMF API service) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#configure-nginx","title":"Configure nginx","text":"<p>In folder <code>org.etsi.osl.main/compose/nginx</code> create a configuration specific <code>nginx.conf</code> file.</p> <pre><code>cd org.etsi.osl.main/compose/nginx/\n</code></pre> <pre><code>sudo cp nginx.conf.default nginx.conf\n</code></pre> <p>If needed, in the nginx.conf file, edit the server_name for an non-local deployment.</p>"},{"location":"deploymentCompose/#configure-web-ui","title":"Configure Web UI","text":"<p>In folder <code>org.etsi.osl.portal.web/src/js/</code> create a configuration specific <code>config.js</code> file.</p> <pre><code>cd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>sudo cp config.js.default config.js\n</code></pre> <p>Edit the <code>config.js</code> file with the information of your domain. <code>ROOTURL</code> will automatically extract the the Origin (Protocol://Domain:Port) of the deployment, but you must change <code>APIURL</code> property, if you are not aiming for a localhost installation, e.g. \"https://portal.openslice.io\".</p> <p>Example file:</p> <pre><code>{ \n BUGZILLA: \"ROOTURL/bugzilla/\",\n STATUS: \"ROOTURL/status/\",\n APIURL: \"http://localhost\",\n WEBURL: \"ROOTURL/nfvportal\",\n APIOAUTHURL: \"ROOTURL/auth/realms/openslice\",\n APITMFURL: \"ROOTURL/tmf-api/serviceCatalogManagement/v4\"\n}\n</code></pre>"},{"location":"deploymentCompose/#configure-tmf-web-ui","title":"Configure TMF Web UI","text":"<p>In the folder <code>org.etsi.osl.tmf.web/src/assets/config</code> there are 3 files available for configuration:</p> <ul> <li>config.prod.json (Basic information + API configuration)</li> <li>theming.scss (CSS color palette theming)</li> <li>config.theming.json (HTML configuration - Logo, Favicon, Footer)</li> </ul> <p>The first 2 files above (i.e. config.prod.json, theming.scss) are essential for the successful deployment of OpenSlice, thus created automatically during the initial deployment at <code>org.etsi.osl.tmf.web/src/assets/config</code> directory as a copy of the default ones from the remote repository.</p> <p>Ensure that you check the <code>config.prod.json</code> and <code>theming.scss</code> files and readjust to your deployment if needed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <p>E.g. You may edit \"TITLE\", \"WIKI\", etc properties with your domain title. Also configure TMF's API and Keycloak's location for the web application, if needed.</p> <p>Example file:</p> <pre><code>{ \n \"TITLE\": \"OpenSlice by ETSI\",\n \"PORTALVERSION\":\"2024Q2\",\n \"WIKI\": \"https://osl.etsi.org/documentation\",\n \"BUGZILLA\": \"{BASEURL}/bugzilla/\",\n \"STATUS\": \"{BASEURL}/status/\",\n \"WEBURL\": \"{BASEURL}\",\n \"PORTAL_REPO_APIURL\": \"{BASEURL}/osapi\",\n \"ASSURANCE_SERVICE_MGMT_APIURL\": \"{BASEURL}/oas-api\",\n \"APITMFURL\": \"{BASEURL}/tmf-api\",\n \"OAUTH_CONFIG\" : {\n \"issuer\": \"{BASEURL}/auth/realms/openslice\",\n \"loginUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n\n \"responseType\": \"code\",\n \"oidc\": false,\n \"clientId\": \"osapiWebClientId\",\n \"dummyClientSecret\": \"secret\",\n\n \"requireHttps\": false,\n \"useHttpBasicAuth\": true,\n \"clearHashAfterLogin\": false,\n\n \"showDebugInformation\": true\n }\n}\n</code></pre> <p>The {BASEURL} placeholder in the file automatically detects the Origin (Protocol://Domain:Port) of the deployment and applies it to every respective property. E.g. If you are attempting a local deployment of OpenSlice, then {BASEURL} is automatically translated to \"http://localhost\". Similarly, you may use {BASEURL} to translate to a public deployment configuration, e.g. \"https://portal.openslice.io\".</p> <p>If further customization, apart from the default provided, is needed for branding (Logo, Footer) then <code>config.theming.json</code> needs to be created in io.openslice.tmf.web/src/assets/config directory, as follows:</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>sudo cp config.theming.default.json config.theming.json\n</code></pre> <p>IMPORTANT NOTE: If you want to apply changes to the JSON configuration files without the need to rebuild the application, you have to apply the changes at the <code>org.etsi.osl.tmf.web/dist/io-openslice-portal-web/assets/config</code> directory. Although, it is mandatory to also apply these changes to the <code>org.etsi.osl.tmf.web/src/assets/config</code> for persistancy, as after any future rebuild of OpenSlice the <code>/dist</code> directory is being overwritten along with its contents. The OpenSlice team strongly recommends to always apply your changes to the TMF web UI configuration files at <code>org.etsi.osl.tmf.web/src/assets/config</code> and rebuild the application.</p>"},{"location":"deploymentCompose/#deploy-openslice-via-docker-compose","title":"Deploy OpenSlice via Docker Compose","text":"<p>After configuring the services, and editing the docker compose file accordingly, the docker compose instantiation command can be performed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo docker compose --profile prod down;sudo docker compose --profile prod up -d --build\n</code></pre> <p>Depending on your machine, this process might take time. if for any reason the deployment fails during first time, please rerun the above before any further measures.</p>"},{"location":"deploymentCompose/#validating-deployments-and-container-monitoring","title":"Validating deployments and container monitoring","text":"<p>You can monitor containers' status with portainer at port 9000 (http://your-ip:9000).</p> <p>Initially, you may monitor the local machine at portainer.</p> <p>Please check that all containers are in running state.</p>"},{"location":"deploymentCompose/#post-installation-steps","title":"Post installation steps","text":"<p>After the successful deployment of OpenSlice, to ensure the E2E user experience, this section is mandatory. It contains crucial configuration in regard of authentication and user creation.</p>"},{"location":"deploymentCompose/#configure-keycloak-server","title":"Configure Keycloak server","text":"<p>The Keycloack server is managing authentication and running on a container at port 8080. It is also proxied to your host via nginx under http://localhost/auth. </p> <ul> <li> <p>Navigate to http://domain.com/auth/ or https://domain.com/auth/, (http://ipaddress:8080/auth/ or https://ipaddress:8443/auth/ which are directly accessible without proxy) </p> </li> <li> <p>Navigate to Administration Console </p> </li> <li> <p>Login with the credentials from section Configure keycloak container. Default values are:</p> <ul> <li>user: admin and </li> <li>password: Pa55w0rd</li> </ul> </li> </ul> <p>if you are running in HTTP you will get a message: HTTPS required.</p> <p>To resolve this issue when running in HTTP: </p> <ul> <li>Select the master realm from top left corner</li> <li>Go to login Tab and select \"Require SSL\": None</li> <li>Repeat for realm Openslice</li> </ul> <p>If you are running in HTTPS, then \"Require SSL\" can be left unchanged to external requests.</p>"},{"location":"deploymentCompose/#1-configure-redirects","title":"1. Configure redirects","text":"<p>Navigate to realm Openslice > Clients > osapiWebClientId and change the Root URL to your domain. </p> <p>Also, insert your domain, e.g. http://example.org/*, at:</p> <ul> <li>Valid Redirect URIs</li> <li>Web Origins</li> </ul>"},{"location":"deploymentCompose/#2-configure-email","title":"2. Configure email","text":"<p>Keycloak allows new users to register. Subsequently, this will also allow new users to register to the OpenSlice portal.</p> <p>Navigate to realm Openslice > Realm Settings > Login Tab > check User registration, Verify email, Forgot password etc.</p> <p>Finally, enter the details of the mail server at the Email Tab.</p> <p>Email configuration is optional for test runs, but if not provided the above functionalities (e.g. external user registration) will not be possible.</p>"},{"location":"deploymentCompose/#3-add-an-openslice-admin-user","title":"3. Add an OpenSlice admin user","text":"<p>This step is mandatory so as to access the OpenSlice Web UI. To add an OpenSlice admin user you must:</p> <ul> <li>Navigate to realm Openslice > Users > Add user</li> <li>Set a password</li> <li>Upon creation, navigate to Role Mappings and add ADMIN to Assigned Roles list</li> </ul> <p>That user is different from the Keycloak admin user. It is required to login and browse the OpenSlice Web UI. The Role ADMIN guarantee full access through the OpenSlice UI, thus such a user is always required.</p>"},{"location":"deploymentCompose/#keycloak-at-localhost","title":"Keycloak at localhost","text":"<p>This is an important step if you run Keycloak on localhost!</p> <p>1 - Edit your Hosts File, adding the line below</p> <p><code>127.0.0.1 keycloak</code></p> <p>Hosts File Location:</p> <ul> <li> <p>In Linux/Unix, the file's location is at /etc/hosts </p> </li> <li> <p>In Windows, its location is at c:\\Windows\\System32\\Drivers\\etc\\hosts</p> </li> </ul> <p>2 - Replace http://localhost/auth/ with http://keycloak:8080/auth/ in your Keycloak config for AngularJS and Angular (see examples below).</p> <p>Explanation</p> <p>Nginx uses the http://keycloak:8080 URL, which is accessible via the internal docker system's network. The Front-end (TS/Angular) shall also use the http://keycloak:8080. This way, you will not get the invalid token error, as the API is acquiring the token from http://keycloak:8080 (internally) and the Front-end is getting verified by an issuer at the same URL, as well.</p> <p>2.1 - For the Angular configuration (TMF portal UI), navigate to org.etsi.osl.tmf.web/src/assets/config and edit config.prod.json</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>nano config.prod.json\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>{ \n \"OAUTH_CONFIG\" : {\n \"issuer\": \"http://keycloak:8080/auth/realms/openslice\",\n \"loginUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n }\n}\n</code></pre> <p>Note the difference in changing {BASEURL} -> http://keycloak:8080</p> <p>If you want the changes to take place immediately without rebuilding the project, then repeat the process for org.etsi.osl.tmf.web/dist/org.etsi.osl.tmf.web/assets/config/config.prod.json</p> <p>2.2 - For the AngularJS configuration (NVF portal UI), navigate to org.etsi.osl.portal.web/src/js and edit config.js</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>nano config.js\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>var appConfig = angular.module('portalwebapp.config',[]);\n\n\nappConfig.factory('APIEndPointService', function() {\n return { \n APIOAUTHURL: \"http://keycloak:8080/auth/realms/openslice\",\n };\n});\n</code></pre> <p>Note the difference in \"APIOAUTHURL\" property, changing ROOTURL -> http://keycloak:8080</p>"},{"location":"deploymentCompose/#nfv-orchestrator-configuration","title":"NFV Orchestrator Configuration","text":"<p>After successfully deploying and configuring OpenSlice, you may configure its environment (e.g. the NFVO) that will facilitate the deployment of NFV artifacts.</p> <p>See NFV Orchestrator Configuration.</p>"},{"location":"deploymentK8s/","title":"OpenSlice Deployment Guide with Kubernetes","text":""},{"location":"deploymentK8s/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"location":"etsi_osl/","title":"The ETSi SDG OSL","text":"<p>OpenSlice is developed by the OSL ETSI Software Development Group see more info</p>"},{"location":"history/","title":"History","text":""},{"location":"history/#history","title":"History","text":"<ul> <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project 5GinFIRE by University of Patras, Greece</li> <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project 5G-VINNI by University of Patras, Greece</li> <li>OpenSlice has been a part of OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Group since 2023</li> </ul>"},{"location":"history/#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use OpenSlice in your research</p> <pre><code>\n@misc{tranoris2021openslice,\n title={Openslice: An opensource OSS for Delivering Network Slice as a Service}, \n author={Christos Tranoris},\n year={2021},\n eprint={2102.03290},\n archivePrefix={arXiv},\n primaryClass={cs.NI}\n}\n\n\n</code></pre>"},{"location":"lcm/","title":"Lifecycle Management (LCM) Rules","text":"<ul> <li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li> </ul> <p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p> <ul> <li>PRE_PROVISION</li> <li>CREATION</li> <li>AFTER_ACTIVATION </li> <li>SUPERVISION </li> <li>AFTER_DEACTIVATION </li> </ul> <p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p> <p></p> <ul> <li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li> <li>CREATION rules: Run while the referenced service dependencies of a service are created</li> <li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li> <li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li> <li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li> </ul> <p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p> <ul> <li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li> <li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li> <li>Define complex OSM Configs based on other dependencies and passing variables</li> <li>Define any dependencies when creating the referenced services</li> <li>Dynamically include new service dependencies</li> <li>Create new service orders so include dynamically other services</li> <li>Call external (RESTful) services (via http(s), define payload, examine response)</li> </ul>"},{"location":"lcm/#examine-if-the-rules-are-executed-successfully","title":"Examine if the rules are executed successfully","text":"<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>"},{"location":"lcm/#lcm-rules-and-osom-service-orchestration","title":"LCM Rules and OSOM Service Orchestration","text":"<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p> <p></p>"},{"location":"lcm/#define-rules","title":"Define rules","text":"<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p> <p></p> <p>Execution order of rules on a specific phase is random</p> <ul> <li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li> </ul>"},{"location":"lcm/#definition-language","title":"Definition language","text":"<ul> <li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li> <li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li> </ul> <p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p> <p></p> <ul> <li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li> <li>On the right side the user can define some rule properties or observe the underlying generated java code.</li> </ul>"},{"location":"lcm/#the-blocks-library","title":"The blocks library","text":"<p>The following images describe some blocks found in the library.</p> <p>Blockly has syntax rules. It helps with colours to define them. </p> <p>So for example a parameter that is a Number cannot be \"glued\" with a String. Will need some conversion first</p> <p> </p>"},{"location":"lcm/#examples-of-rules","title":"Examples of Rules","text":"<p>The following images provide some examples of rules.</p>"},{"location":"lcm/#define-variables-according-to-cases","title":"define variables according to cases","text":"<p>In the following example we :</p> <ul> <li>define a String variable. </li> <li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li> <li>We output the value to the OSOM Log</li> <li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li> </ul> <p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p> <p></p>"},{"location":"lcm/#define-complex-osm-configs-for-day-0","title":"Define complex OSM configs for DAY 0","text":"<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p> <ul> <li> <p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p> </li> <li> <p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p> </li> <li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li> <li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li> <li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li> </ul> <p></p>"},{"location":"lcm/#define-and-instantiate-different-services-according-to-service-order-request","title":"Define and instantiate different services according to Service Order request","text":"<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p> <p>There are different ways to accomplish this:</p> <ul> <li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li> <li>change for example the VIMs that you deploy the NS</li> <li>change the NSD (that is use different VNFs)</li> </ul> <p>The following image displays for example the latter case.</p> <p></p>"},{"location":"lcm/#call-an-external-restful-service","title":"Call an external RESTful service","text":"<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p> <p></p> <p></p>"},{"location":"lcm/#create-new-service-orders","title":"Create New Service Orders","text":"<p>The following example calls to Order a New Service Specification with specific Parameter Values</p> <p></p>"},{"location":"nfvoconfig/","title":"NFV Orchestrator configuration","text":"<p>Currently we support Open Source MANO version EIGHT/NINE/TEN/ELEVEN/THIRTEEN. Later versions of OSM may also be supported by the existing configuration, as from OSM 9+ the project converged to the SOL005 interface, regarding the NBI, and SOL006 (YANG model), regarding the NFV/NS packaging. Also an implementation of a generic SOL005 interface is supported, but not extensively tested.</p> <p>Configuration of your target(s) NFVOs/MANO services with Openslice is performed through the NFV portal.</p> <ol> <li> <p>Login to {{yourdomain}}/nfvportal/</p> </li> <li> <p>Navigate to Admin > Manage MANO Platforms > Add New MANO Platform, pick one of the supported MANO platform(s), e.g. Name=OSMvTHIRTEEN, Version=OSMvTHIRTEEN and save. You may edit the saved MANO platforms after this.</p> </li> <li> <p>Navigate to Admin > Manage MANO providers > Add New MANO Provider and enter its details:</p> <ul> <li>Name and description of your choice. The selected name will supplement the NFV artifacts of this provider.</li> <li>One of the already defined MANO platforms</li> <li>API URL Endpoint, eg: https://10.10.10.10:9999 (This is the SOL005 NBI endpoint - Note the port 9999)</li> <li>Username, Password and Project of your OSM tenant.</li> </ul> </li> </ol> <p>Check EnabledForONBOARDING, if you want VNF/NS packages uploaded through the UI by the user, to also be automatically ONBOARDED to this MANO (1 step process). If left unchecked, the onboarding process must be performed manually after the VNF/NS package is uploaded to the portal, by the designated UI (2 step process).</p> <p>Check EnabledForSYNC, if you want to support the automatic synchronization of this MANO with OpenSlice. When enabled, the existing VNF/NS packages and VIMs (and any updates on them) of the registered MANO are also reflected to the portal to the respective UIs (Registered VNFs/NSDs and Manage Infrastructures). </p> <p>The synchronization is a continuous process that will confirm that the artifacts are still present in the MANO, updating the status field of the respective artifacts to <code>OSM_PRESENT</code>. If during this process, an artifact is deleted from the MANO, the respective status field will be updated to <code>OSM_MISSING</code>.</p>"},{"location":"portals_intro/","title":"OpenSlice Portals","text":"<p>Openslice comprises of a web landing page See Demo that navigates to the respective Portal:</p> <ul> <li>Services Portal See Demo</li> <li>NFV Portal See Demo</li> <li>Products Portal See Demo</li> <li>Testing Portal See Demo</li> <li>Resources Portal See Demo</li> </ul> <p>Following you may find the scope each portal focuses on and the main TMF APIs it supports.</p> <p>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.</p> <p>NFV Portal is a designated portal for the: 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</p> <p>More information can be found at NFV Services.</p> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure. - 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.</p> <p>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.</p> 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 <p>The NFV Portal uses a proprietary API</p>"},{"location":"role_keycloak_management/","title":"Role management in Keycloak","text":"<p>Some initial configuration of Keycloak happens at Installation/Deployment time. Here are some notes regarding user management</p>"},{"location":"role_keycloak_management/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>There are cases that OpenSlice administrators need to configure Keycloak:</p> <ul> <li>Change user roles, e.g. make a Simple user a Service Designer</li> <li>Domain management</li> <li>User Password reset</li> </ul>"},{"location":"service_inventory/","title":"Service Inventory","text":"<p>After a Service Order completion, active services with their additional characteristics are found:</p> <ul> <li>From the Order Items of a selected Service order</li> <li>from the menu of Service inventory and then selecting details of each service</li> <li>through the Service Inventory API (TMF 638 - Service Inventory Management ) </li> </ul> <p>Openslice creates a Service for the requested CFS. Customers make Service Orders and Openslice instantiates the requested Service Specifications for each Service Order Item of a Service Order. Running Services instantiated by Openslice, reside in Openslice Service Inventory. The following picture displays how Service Specifications are related to Running Services and how Running Services relate with instantiated running Network Services. </p> <p></p> <p>There is a hierarchy of services. Usually an Instantiated CFS has Supporting Services some Instantiated RFSs. Then an Instantiated RFS is related to some running NS managed by NFVO</p>"},{"location":"service_inventory/#interacting-with-an-active-service-day-2-config","title":"Interacting with an Active Service (Day 2 config)","text":"<p>In some cases, if the underlying service is configured with actions (for example in OSM Day 2 primitive actions), there are characteristics that can be modified. Usually they are named like : ::Primitive:: <p>The user can edit the characteristic with a new value. The value is propagated through the OSOM and NFVO down to the related VNF.</p>"},{"location":"service_inventory/#terminatinginactivating-a-service","title":"Terminating/Inactivating a service","text":"<p>You can terminate the service with one of the following processes:</p> <ul> <li>Select the related Service Order and terminate the Order Item. This will delete all the underlying related active services. The Order goes to ACKNOWLEDGED->INPROGRESS->COMPLETE</li> <li>To terminate or inactivate a service, select the specific service from the inventory, press Edit and set the State either to Inactive or Terminated</li> </ul> <p>Warning: if you terminate or inactivate a service the action cannot be undone. </p>"},{"location":"service_inventory/#uml-sequence-diagram","title":"uml: sequence diagram","text":"<p>Here I will embed PlantUML markup to generate a sequence diagram.</p> <p>I can include as many plantuml segments as I want in my Markdown, and the diagrams can be of any type supported by PlantUML.</p>"},{"location":"terminology/","title":"User Roles","text":"<ul> <li>User</li> <li>Service Designer</li> <li>OpenSlice administrator</li> </ul>"},{"location":"terminology/#terms","title":"Terms","text":"<ul> <li>Resource Facing Service Specification (RFSSpec): A Service that exposes a resource Specification as a Service.</li> <li>Customer Facing Service Specification (CFSSpec): Service exposed to users for Service Orders. Usually it exposes other CFSSpec(Service Bundle) or other RFSSpecs</li> <li>OpenSlice management cluster</li> <li>Service Specification: Detailed descriptions of services, including attributes, configurations, performance metrics, and SLAs.</li> <li>Service Catalog</li> <li>Service Categories</li> <li>Service Inventory</li> </ul>"},{"location":"under_construction/","title":"Under construction","text":"<p>under construction</p>"},{"location":"architecture/architecture/","title":"Architecture","text":"<p>Openslice offers the following main functionalities:</p> <ul> <li>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</li> <li>Services Specifications: A CSP will be able to manage Service Specifications</li> <li>Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties</li> <li>Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs</li> <li>Service Order: The Customer will be able to place a Service Order</li> <li>Service Inventory: The Customer and Provider will be able to view deployed Services status</li> </ul> <p>The following figure displays the overall architecture of Openslice.</p> <p></p> <p>Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:</p> <ul> <li>Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility\u2019s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory</li> <li>An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service</li> <li>A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics</li> <li>An authentication server implementing Oauth2 authentication scheme</li> <li>A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)</li> <li>A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog</li> <li>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</li> <li>Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster</li> <li>A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs </li> </ul> <p>The following figure depicts how Openslice microservices are deployed</p> <p></p>"},{"location":"architecture/architecture/#deploying-openslice-in-multi-domain-scenarios","title":"Deploying Openslice in multi domain scenarios","text":"<p>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.</p> <p>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.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>See more Consuming Services From External Partner Organizations</p>"},{"location":"architecture/centrallog/","title":"Central Logging","text":"<p>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. </p> <p>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.</p>"},{"location":"architecture/consumingServicesFromExternalPartners/","title":"Consuming Services From External Partner Organizations","text":"<p>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.</p> <p>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.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>In Openslice we can consume services from 3rd parties via Open APIs.</p> <p>We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:</p> <ul> <li>Import Service Specifications</li> <li>Create a Service Order</li> <li>Use the Service Inventory to query the status of the service ordered to the external partner organization</li> </ul>"},{"location":"architecture/consumingServicesFromExternalPartners/#define-an-organization-as-3rd-party-to-consume-services-east-west","title":"Define an Organization as 3rd party to consume services East-West","text":"<p>An organization must have the following characteristics in openslice catalog, like for example:</p> <p>\"EXTERNAL_TMFAPI_BASEURL\", \"http://portal.openslice.io\"</p> <p>\"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\", \"authOpensliceProvider\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTID\", \"osapiWebClientId\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\", \"secret\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2SCOPES\", scopes</p> <p>\"EXTERNAL_TMFAPI_OAUTH2TOKENURI\", \"http://portal.openslice.io/osapi-oauth-server/oauth/token\"</p> <p>\"EXTERNAL_TMFAPI_USERNAME\", \"admin\"</p> <p>\"EXTERNAL_TMFAPI_PASSWORD\", \"openslice\"</p> <p>\"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)</p> <p>\"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\")</p> <p>\"EXTERNAL_TMFAPI_SERVICE_SPEC\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS\"= \"/test/v1/serviceorder\" (this is optional)</p> <p>An example Organization defined example in json:</p> <pre><code>\n{\n \"uuid\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"Openslice.io\",\n \"id\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"isHeadOffice\": null,\n \"isLegalEntity\": null,\n \"nameType\": null,\n \"organizationType\": null,\n \"tradingName\": null,\n \"contactMedium\": [],\n \"creditRating\": [],\n \"existsDuring\": null,\n \"externalReference\": [],\n \"organizationChildRelationship\": [],\n \"organizationIdentification\": [],\n \"organizationParentRelationship\": null,\n \"otherName\": [],\n \"partyCharacteristic\": [\n {\n \"uuid\": \"3a2f7221-e0a2-4a6b-88d1-534c8e1963f6\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"authOpensliceProvider\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"c24bb527-f178-4d38-9b93-2027c1732876\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_USERNAME\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"27e45df8-414b-44c6-a5d5-3f064e2cfd3b\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_PASSWORD\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"openslice\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"e0e470b8-6024-4014-8a18-2333e5465ce1\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"secret\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3e0de762-ac80-4c1e-a0a1-f265ff0899b4\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2SCOPES\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin;read\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"0bbb8314-f7f2-420d-9fed-ba054b15f886\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2TOKENURI\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io/osapi-oauth-server/oauth/token\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3a567de4-79eb-4006-a500-3e5229b44175\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"osapiWebClientId\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_BASEURL\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io\",\n \"alias\": null\n }\n }\n ],\n \"relatedParty\": [],\n \"status\": null,\n \"taxExemptionCertificate\": []\n}\n\n</code></pre>"},{"location":"architecture/issuemgt/","title":"Issue Management","text":"<p>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. </p> <p>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.</p> <p></p>"},{"location":"architecture/messagebus/","title":"Message Bus and exchanged Messages","text":"<p>Openslice has a Message bus which allows Openslice services to exchange messages via queues and topics.</p> <p>It is based on ActiveMQ.</p> <p>3rd party services can be attached to bus and subscribe to message topics or request resources via queues.</p>"},{"location":"architecture/messagebus/#queue-messages","title":"QUEUE MESSAGES","text":"Message Alias CATALOG_GET_SERVICEORDERS Name jms:queue:CATALOG.GET.SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_BY_ID Name jms:queue:CATALOG.GET.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body String orderid Description Return a ServiceOrder as String Json Message Alias CATALOG_UPD_SERVICEORDER_BY_ID Name jms:queue:CATALOG.UPD.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body ServiceOrderUpdate serviceOrder Headers \"orderid\"= orderid Description Returns a ServiceOrder as String Message Alias CATALOG_GET_SERVICESPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICESPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceSpecification Message Alias CATALOG_ADD_SERVICESPEC Name jms:queue:CATALOG.ADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecCreate Description Creates a ServiceSpecification and returns a ServiceSpecification as String Message Alias CATALOG_UPD_SERVICESPEC Name jms:queue:CATALOG.UPD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. --- Message Alias CATALOG_UPDADD_SERVICESPEC Name jms:queue:CATALOG.UPDADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId, \"forceId\"=forceId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. If forceId is true then tries to assign the requested ID to the spec Message Alias CATALOG_ADD_SERVICEORDER Name jms:queue:CATALOG.ADD.SERVICEORDER Type queue Destination TMF API service Producers OSOM Body ServiceOrderCreate serviceOrder Headers Description Creates a ServiceOrder and returns a ServiceOrder as String Message Alias CATALOG_GET_INITIAL_SERVICEORDERS_IDS Name jms:queue:CATALOG.GET.INITIAL_SERVICEORDERS Type queue Destination TMF API service Producers Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_IDS_BY_STATE Name jms:queue:CATALOG.GET.ACKNOWLEDGED_SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Headers \"orderstate\"= orderState Description String Json ArrayList of ServiceOrders Message Alias CATALOG_ADD_SERVICE Name jms:queue:CATALOG.ADD.SERVICE Type queue Destination TMF API service Producers OSOM Body ServiceCreate String json Headers \"orderid\"=orderid, \"serviceSpecid\"= specid Description Creates Service based an a Service Spec, Returns a Service object Message Alias CATALOG_UPD_SERVICE Name jms:queue:CATALOG.UPD.SERVICE Type queue Destination TMF API service Producers Body ServiceUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICE_BY_ID Name jms:queue:CATALOG.GET.SERVICE Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service instance <p>---| Message | | | ------------- |----------------| |Alias | CATALOG_GET_SERVICE_BY_ORDERID | |Name | jms:queue:CATALOG.GET.SERVICE_BY_ORDERID | |Type | queue | |Destination | TMF API service | |Producers | | |Body | String serviceID | |Description | returns Service IDs of a specific order given then order id |</p> Message Alias CATALOG_SERVICE_QUEUE_ITEMS_GET Name jms:queue:CATALOG.SERVICEQUEUEITEMS.GET Type queue Destination TMF API service Producers OSOM Body Description returns a LIST OF Service Queue Items --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_UPD Name jms:queue:CATALOG.SERVICEQUEUEITEM.UPDATE Type queue Destination TMF API service Producers OSOM Body String SERVICEQUEUEITEM Headers \"itemid\" = SERVICEQUEUEITEM id Description ill update a service queue item by id and return the instance --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_DELETE Name jms:queue:CATALOG.SERVICEQUEUEITEM.DELETE Type queue Destination TMF API service Producers OSOM Body Headers \"itemid\" = SERVICEQUEUEITEM id Description ill delete a service queue item by id Message Alias CATALOG_SERVICES_TO_TERMINATE Name jms:queue:CATALOG.GET.SERVICETOTERMINATE Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services with END DAte in the past --- Message Alias CATALOG_SERVICES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services from the inventory of partners Message Alias NFV_CATALOG_GET_NSD_BY_ID Name jms:queue:NFVCATALOG.GET.NSD_BY_ID Type queue Destination NFV Catalog service Producers TMF API, OSOM Body NSDid Description Returns a NetworkServiceDescriptor object Message Alias NFV_CATALOG_DEPLOY_NSD_REQ Name jms:queue:NFVCATALOG.DEPLOY.NSD_REQ Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers NSD id Description Returns a DeploymentDescriptor object as json string containing deployment info Message Alias NFV_CATALOG_UPD_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.UPD.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers DeploymentDescriptor id Description Updates and Returns a DeploymentDescriptor object as json string containing deployment info Message Alias GET_USER_BY_USERNAME Name jms:queue:GET.USER_BY_USERNAME Type queue Destination NFV Catalog service (this is temproary for now) Producers TMF API Body username Headers Description Returns a PortalUser object as json string containing user info Message Alias NFV_CATALOG_GET_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.GET.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body Deployment ID Description Returns a DeploymentDescriptor object Message Alias CATALOG_GET_EXTERNAL_SERVICE_PARTNERS Name jms:queue:CATALOG.GET.EXTERNALSERVICEPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description As a String Json ArrayList of Organizaton objects containing the characteristic name EXTERNAL_TMFAPI Message Alias CATALOG_UPD_EXTERNAL_SERVICESPEC Name jms:queue:CATALOG.UPD.EXTERNAL_SERVICESPEC Type queue Destination TMF API service Producers OSOM or maybe used by others that would like to update a Service Spec Body A serviceSpecification as json string Headers servicespecification id, orgid id Description Updates (or inserts if does not exist in catalog) an external service specification) Message Alias NFV_CATALOG_NSACTIONS_SCALE Name jms:queue:NSACTIONS.SCALE Type queue Destination TMF API service Producers OSOM or maybe used by others that would like scale a NS Body A ScaleDescriptor as json string Headers none Description performs a scale Message Alias NFV_CATALOG_NS_LCMCHANGED Name NFV_CATALOG_NS_LCMCHANGED Type topic Destination any Producers MANO client Body A json string Headers none Description A NFV_CATALOG_NS_LCMCHANGED message is published when LCM of a running NS is changed"},{"location":"architecture/messagebus/#alarms","title":"ALARMS","text":"Message Alias ALARMS_ADD_ALARM Name jms:queue:ALARMS.ADD.ALARM Type queue Publishers Consumers TMF API Body AlarmCreate Headers Description Add an alarm Message Alias ALARMS_UPDATE_ALARM Name jms:queue:ALARMS.UPDATE.ALARM Type queue Publishers Consumers TMF API Body AlarmUpdate Headers alarmid = alarm id, body (AlarmUpdate object) Description Update an alarm Message Alias ALARMS_GET_ALARM Name jms:queue:ALARMS.GET.ALARM Type queue Publishers Consumers TMF API Body Headers alarmid = alarm id Description get an alarm"},{"location":"architecture/messagebus/#event-topics-in-message-bus","title":"EVENT TOPICS IN Message Bus","text":"Message Alias EVENT_SERVICE_CREATE Name jms:topic:EVENT.SERVICE.CREATE Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_STATE_CHANGED Name jms:topic:EVENT.SERVICE.STATECHANGED Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_DELETE Name jms:topic:EVENT.SERVICE.DELETE Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICE.ATTRCHANGED Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ORDER_CREATE Name jms:topic:EVENT.SERVICEORDER.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to create a new issue Message Alias EVENT_SERVICE_ORDER_STATE_CHANGED Name jms:topic:EVENT.SERVICEORDER.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to update an issue Message Alias EVENT_SERVICE_ORDER_DELETE Name jms:topic:EVENT.SERVICEORDER.DELETE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_SERVICE_ORDER_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICEORDER.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_ALARM_CREATE Name jms:topic:EVENT.ALARM.CREATE Type topic Publishers TMF API Consumers OAS, BUGZILLA Service, CentralLog Service Body AlarmCreateEvent Headers Description The Event contains the Alarm object in payload Message Alias CATALOG_ADD_RESOURCE Name jms:queue:CATALOG.ADD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceCreate Headers Description The Body contains the ResourceCreate object to add Message Alias CATALOG_UPD_RESOURCE Name jms:queue:CATALOG.UPD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceUpdate Headers resourceid , propagateToSO Description The Body contains the ResourceCreate object to update Message Alias CATALOG_GET_RESOURCE_BY_ID Name jms:queue:CATALOG.GET.RESOURCE Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceCreate object to update Message Alias CATALOG_RESOURCES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type topic Publishers TMF API Consumers any Body none Headers none Description retrieve all active services of partners Message Alias CATALOG_ADD_RESOURCESPEC Name jms:queue:CATALOG.ADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationCreate Headers Description The Body contains the ResourceSpecificationCreate object to add Message Alias CATALOG_UPD_RESOURCESPEC Name jms:queue:CATALOG.UPD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationUpdate Headers resourceSpecId Description The Body contains the ResourceSpecificationCreate object to update Message Alias CATALOG_GET_RESOURCESPEC_BY_ID Name jms:queue:CATALOG.GET.RESOURCESPEC_BY_ID Type topic Publishers TMF API Consumers any Body resourceSpecid Headers Description The Body contains the object id to find Message Alias CATALOG_UPDADD_RESOURCESPEC Name jms:queue:CATALOG.UPDADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceSpecificationCreate object to update or create if not exist Message Alias EVENT_RESOURCE_CREATE Name jms:topic:EVENT.RESOURCE.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_STATE_CHANGED Name jms:topic:EVENT.RESOURCE.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_DELETE Name jms:topic:EVENT.SERVICE.RESOURCE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.RESOURCE.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias CATALOG_GET_LCMRULE_BY_ID Name jms:queue:CATALOG.GET.LCMRULE Type topic Publishers TMF API Consumers any Body lcmid Headers Description The Body contains the LCMRuleSpec object Message Alias CATALOG_GET_LCMRULES_BY_SPECID_PHASE Name jms:queue:CATALOG.GET.LCMRULES_BY_SPECID_PHASE Type topic Publishers TMF API Consumers any Body Headers header.servicespecid, header.phasename Description The Body contains the LCMRuleSpec objects of the specific Service Spec and the specific phase Message Alias CATALOG_GET_SERVICETESTSPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICETESTSPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceTestSpecification Message Alias CATALOG_ADD_SERVICETEST Name jms:queue:CATALOG.ADD.SERVICETEST Type queue Destination TMF API service Producers OSOM Body ServiceTestCreate String json Headers \"orderid\"=orderid, \"serviceTestSpecid\"= specid Description Creates Service Test based an a Service Test Spec, Returns a ServiceTest object Message Alias CATALOG_UPD_SERVICETEST Name jms:queue:CATALOG.UPD.SERVICETEST Type queue Destination TMF API service Producers Body ServiceTestUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service test by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICETEST_BY_ID Name jms:queue:CATALOG.GET.SERVICETEST Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service TEST instance Message Alias CRD_DEPLOY_CR_REQ Name jms:queue:CRD.DEPLOY.CR_REQ Type queue Destination CRD service Producers OSOM Body CR spec as String Headers related service id Description Returns a String object containing deployment info Message Alias CRD_PATCH_CR_REQ Name jms:queue:CRD.PATCH.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing PATCH info Message Alias CRD_DELETE_CR_REQ Name jms:queue:CRD.DELETE.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing deletion info"},{"location":"architecture/nfvapi/","title":"API interaction","text":""},{"location":"architecture/nfvapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/nfvapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all vxfs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4\" http://localhost:13000/osapi/admin/vxfs\n</code></pre> <p>Example response:</p> <pre><code>[\n {\n \"id\": 1,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"a954daf2-16da-4b7e-ae42-4825936d453c\",\n \"name\": \"cirros_vnfd\",\n \"iconsrc\": \"/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png\",\n \"shortDescription\": \"cirros_vnfd\",\n \"longDescription\": \"Simple VNF example with a cirros\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz\",\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": 1568981107000,\n \"categories\": [\n {\n \"id\": 3,\n \"name\": \"Service\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 2,\n \"name\": \"Networking\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"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\",\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>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 1,\n \"name\": \"cirros034\",\n \"uuid\": \"d4549610-8abd-42ad-97f4-0a64e1c93977\",\n \"shortDescription\": \"Automatically created during vxf cirros_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 1,\n \"name\": \"cirros_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ADMIN\",\n \"MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n },\n {\n \"id\": 2,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"4ab80095-a63e-4fe7-8598-e1c7e880706e\",\n \"name\": \"cirros_sriov_vnfd\",\n \"iconsrc\": null,\n \"shortDescription\": \"cirros_sriov_vnf\",\n \"longDescription\": \"Simple VNF example with a cirros SRIOV interface\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz\",\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": 1568981100000,\n \"categories\": [\n {\n \"id\": 4,\n \"name\": \"tyu\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 5,\n \"name\": \"tyi\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"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\",\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>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 2,\n \"name\": \"cirros-0.3.6-x86_64\",\n \"uuid\": \"be121176-1d62-4a1b-a3c1-7dce2e069d22\",\n \"shortDescription\": \"Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 2,\n \"name\": \"cirros_sriov_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ROLE_ADMIN\",\n \"ROLE_MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/oauth/","title":"Authentication Server","text":"<p>Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment </p> <p>API users needs to authenticate. All APIs (except grant token request) must include Bearer token in request Authorization header.</p>"},{"location":"architecture/oauth/#oauth-token","title":"OAuth token","text":"<p>Get first an oauth token, using your username and password. </p> <pre><code>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' \n</code></pre> <p>response:</p> <pre><code> {\"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\"}\n\n</code></pre> <p>The <code>access_token</code> will be used next as a Bearer.</p> <pre><code>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\nubuntu@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'\n\nResponse:\n\n\n[{\"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\"}]}]\n\n\n</code></pre>"},{"location":"architecture/osom/","title":"Openslice Service Orchestration and Order Management - OSOM","text":"<p>OSOM is a service responsible for:</p> <ul> <li>Service Order Management (SOM)</li> <li>Service Orchestration (SO)</li> </ul> <p>It uses open source Flowable Business process engine (https://www.flowable.org) .</p> <p>A Service Order follows the states as defined in TMF641 specification: </p> <p></p>"},{"location":"architecture/osom/#initial-state","title":"Initial state","text":"<p>When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.</p> <p></p> <p>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</p>"},{"location":"architecture/osom/#order-scheduler","title":"Order scheduler","text":"<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p> <p></p> <p></p> <p>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.</p>"},{"location":"architecture/osom/#start-order-process","title":"Start order process","text":"<p>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.</p> <p></p> <p></p> <p>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.</p> <ol> <li>During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory</li> <li>The Services(TMF638 model) are assigned to the Order O1 In supportService List</li> <li>Each OrderItem OI1 is related to one serviceSpecification</li> <li>Each ServiceSpecification has also related serviceSpecRelationships</li> <li>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:<ol> <li>Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1</li> <li>We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS) </li> <li>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)</li> <li>The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory</li> <li>Service S_A will have: <ol> <li>startMode 1: Automatically by the managed environment</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> </ol> </li> <li>Services S_C1 and S_C2 we decide that cannot be orchestrated then they have <ol> <li>startMode: 3: Manually by the Provider of the Service</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> <li>If the CFS is a bundle spec it is further recursively orchestrated </li> </ol> </li> <li>Service S_R1 will have <ol> <li>startMode 1: Automatically by the managed environment.</li> <li>State: RESERVED</li> <li>IF The Service has the characteristic CharacteristicByName( \"NSDID\") it will be further processed by the NFVO </li> </ol> </li> </ol> </li> </ol> <p>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:</p> <ol> <li>We wait here for human decision.</li> <li>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</li> </ol> <p>There will be an instance of NFVODeploymentRequest process each for Service S_R1. (see later)</p> <ol> <li>This process is related with the NFVO orchestration</li> <li>It will send a msg to NFVO(s?) for a specific deployment request</li> </ol> <p>All services in \"Order Complete\" are in a status:</p> <ol> <li>Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED</li> <li>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)</li> </ol> <p>A Service follows the states as defined in TMF638 Service Inventory specification: </p> <p></p>"},{"location":"architecture/osom/#nfvodeploymentrequest-process","title":"NFVODeploymentRequest process","text":"<p>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)</p>"},{"location":"architecture/osom/#check-in-progress-orders-process","title":"Check In Progress orders process","text":"<p>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)</p> <p></p>"},{"location":"architecture/osom/#external-service-provider-deployment-request-process","title":"External Service Provider Deployment Request process","text":"<p>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</p>"},{"location":"architecture/osom/#fetch-partner-services-process","title":"Fetch Partner Services Process","text":"<p>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 </p>"},{"location":"architecture/osom/#local-service-orchestration-process","title":"Local Service Orchestration Process","text":"<p>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. </p>"},{"location":"architecture/tmfapi/","title":"TMF OpenAPI specification","text":"<p>PLease check the complete specification here.</p>"},{"location":"architecture/tmfapi/#api-interaction","title":"API interaction","text":""},{"location":"architecture/tmfapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/tmfapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all Service Catalogs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>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\"\n\n</code></pre> <p>response:</p> <pre><code>[\n {\n \"uuid\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"lastUpdate\": \"2019-12-19T10:45:55Z\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": \"ServiceCatalog\",\n \"href\": null,\n \"name\": \"Example Facility Services\",\n \"description\": \"Example Facility Services\",\n \"lifecycleStatus\": \"Active\",\n \"version\": \"1.0\",\n \"validFor\": {\n \"endDateTime\": \"2039-11-20T23:07:21Z\",\n \"startDateTime\": \"2019-11-20T23:07:21Z\"\n },\n \"relatedParty\": null,\n \"id\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"category\": [\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"eMBB\",\n \"@referredType\": null,\n \"id\": \"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"\n },\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"Generic Services\",\n \"@referredType\": null,\n \"id\": \"98b9adf1-a1d6-4165-855f-153ddc2131b1\"\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/","title":"CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster","text":""},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#intended-audience-osl-developers","title":"Intended Audience: OSL developers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>CRIDGE is a service designed to create and manage Custom Resources (CRs) based on Custom Resource Definitions (CRDs) installed on a Kubernetes cluster. By leveraging the OpenSlice (OSL), CRIDGE enables seamless integration and orchestration within Kubernetes environments, utilizing Kubernetes APIs via the TMF APIs and models. Thus, more or less, OSL exposes Kubernetes APIs as TMF APIs and models.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>CRIDGE service allows OSL to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OSL services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>CRIDGE capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <p>OSL can expose CRs in service catalogs, facilitating their deployment in complex scenarios. These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</p> </li> </ol> <p>Why the CRIDGE name? we wanted to build a service that maps TMF models to CRDs; a kind of a CRD to TMF bridge. Therefore CRIDGE was born</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#approach","title":"Approach","text":"<p>OSL in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. The OSL Orchestrator (OSOM) will manage the lifecycle of the Service Order.</li> <li>OSOM creates a Resource in OSL Resource inventory and requests (via CRIDGE) a new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol> <p></p> <p>The provided image illustrates the architecture and workflow of the CRIDGE service, showing how it interacts with other components within a Kubernetes (K8s) cluster. Here is an explanation of the key components and flow in the diagram:</p> <ul> <li>Other OSL Services: This box represents various OSL services such as Service Spec Catalogue, Resource Spec Catalogue, Service Inventory, Resource Inventory, and OSOM (OpenSlice Service Orchestration and Management).</li> <li>Service Bus: This is the communication layer that facilitates interaction between the CRIDGE service and other OSL services.</li> <li>CRIDGE: CRIDGE acts as a bridge that converts CRDs (Custom Resource Definitions) to TMF (TM Forum) APIs and models. It enables the creation and management of Custom Resources (CRs) in the Kubernetes cluster.</li> <li> <p>K8s API: The Kubernetes API server, which is the central control point for managing the Kubernetes cluster. CRIDGE interacts with the K8s API to manage CRDs and CRs.</p> <p>CRD (Custom Resource Definition): A CRD is a way to define custom resources in Kubernetes cluster-wise. It allows the extension of Kubernetes API to create and manage user-defined resources. Example :</p> </li> </ul> <pre><code> apiVersion: apiextensions.k8s.io/v1\n kind: CustomResourceDefinition\n metadata:\n name: myresource.example.com\n</code></pre> <ul> <li>Namespaces: Kubernetes namespaces provide a way to partition resources within a cluster. The diagram shows that multiple namespaces (nsxx, nsyy, nsz) can be managed by CRIDGE.</li> </ul> <p>CR (Custom Resource): A CR is an instance of a CRD. It represents the actual custom resource that is managed within the Kubernetes cluster. Example shown in different namespaces:</p> <pre><code> apiVersion: example.com/v1\n kind: Myresource\n metadata:\n name: example_resource_1\n</code></pre> <p>In a nutchell:</p> <ul> <li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> <li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> <li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> <li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>> The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n> Instances of Myresource are created in various namespaces, each with unique names like example_resource_1.\n</code></pre> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#handling-more-than-one-clusters","title":"Handling more than one clusters","text":"<p>A CRIDGE service is usually responsible for managing one cluster. In the following diagram we show how it can be used for managing multiple clusters:</p> <p></p> <p>We assume that there is an OSL Management cluster that OSL is installed. CRIDGE is also installed there if we would like to manage resources in the same management cluster. - Each CRIDGE service has for example its own configuration to connect to target cluster - Each CRIDGE can be installed either in the managed cluster or at the remote clusters. Connectivity is handled via the service bus - Important: Each CRIDGE has a different context and API endpoints. This is used to request CRDs on a different cluster</p> <p>A CRD has a globally unique name for example mycrd.example.com. So we need to somehow identify also the different cluster</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OSL Resource Inventory need to be aware of these events.</p> <p>The sync process is found in the code and explained by the following picture:</p> <p></p> <p>WatcherService is executed when the cridge service application starts (see onApplicationEvent). First things:</p> <ul> <li>KubernetesClientResource is a class that wraps fabric8\u2019s KubernetesClient<ul> <li>This fabric8 KubernetesClient is initialized from the kubeconf and default context of the machine that runs CRIDGE</li> </ul> </li> <li>On CRIDGE Start up we try to register this cluster and context to OSL catalogs.<ul> <li>See registerKubernetesClientInOSLResource method which registers the KubernetesContextDefinition in Resource Inventory as a LogicalResource via createOrUpdateResourceByNameCategoryVersion method</li> </ul> </li> <li>After the creation(or update) of this cluster as a Resource in OSL we proceed to create SharedIndexInformers for CustomResourceDefinition objects</li> <li>In this way CRIDGE is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)</li> <li>The SharedIndexInformer events notify CRIDGE, which is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)<ul> <li>NOTE: The ADD event is raised every time also we run CRIDGE. Therefore, on ADD we do the method to createORupdate resource specifications and resources</li> </ul> </li> <li>On ADD event:<ul> <li>The CRD is transformed to OSL Kubernetes domain model: method kubernetesClientResource.KubernetesCRD2OpensliceCRD</li> <li>Then the OSL Kubernetes domain model is:<ul> <li>transformed to Resource Specification and is stored to catalog (see createOrUpdateResourceSpecByNameCategoryVersion)</li> <li>Transformed to Resource and is stored to catalog (see createOrUpdateResourceByNameCategoryVersion)</li> </ul> </li> <li>Conceptually while a CRD is a new resource located in the Kubernetes cluster resource, it is transformed also as a Resource Specification (a high-level entity) which is ready to be reused as an entity to other scenarios. The same concept as in Kubernetes where a CRD is a definition ready to be used for instantiating resources of this CRD</li> <li>Then for this CRD a Watcher is added for all Resources of this Kind (fabric8\u2019s GenericKubernetesResource entity) </li> <li>When we have a newly added/updated/deleted resource of a certain CRD the method updateGenericKubernetesResourceInOSLCatalog is called for this object (fabric8\u2019s GenericKubernetesResource entity)</li> <li>We examine if the resource has label org.etsi.osl.resourceId<ul> <li>This label is added by OSOM during service orders to correlate K8S requested resources with resources in inventory</li> </ul> </li> <li>If the label exists, we update the resource by ID updateResourceById</li> <li>Else a resource is created in catalog</li> </ul> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#deployment-of-a-new-cr-based-on-a-crd","title":"Deployment of a new CR based on a CRD","text":"<ul> <li>A message arrives to deploy a CR<ul> <li>The call examines if this CRIDGE service can handle the request (based on context and masterURL)</li> </ul> </li> <li>There are headers received and a crspec in json</li> <li>The crspec is unmarshaled as GenericKubernetesResource</li> <li>Headers are in format org.etsi.osl.*</li> <li>These headers are injected as labels <ul> <li>(see later in orchestration)</li> </ul> </li> <li>A namespace is created for this resource</li> <li>Watchers are created for this namespace for e.g. new secrets, config maps etc , so that they can be available back as resources to the Inventory of OSL (Note only Secrets for now are watched)</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>See ExposingKubernetesResources</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p> <p>However, the following issue needs to be solved: ** How to map the CR lifecycle that is defined in the CRD with the TMF resource Lifecycle? ** - For this We introduced the following characteristics: _CR_CHECK_FIELD, _CR_CHECKVAL_STANDBY, _CR_CHECKVAL_ALARM, _CR_CHECKVAL_AVAILABLE, _CR_CHECKVAL_RESERVED, _CR_CHECKVAL_UNKNOWN, _CR_CHECKVAL_SUSPENDED</p> <p>OSOM sends to CRIDGE a message with the following information:</p> <ul> <li>currentContextCluster: current context of cluster </li> <li>clusterMasterURL: current master url of the cluster </li> <li>org.etsi.osl.serviceId: This is the related service id that the created resource has a reference </li> <li>org.etsi.osl.resourceId: This is the related resource id that the created CR will wrap and reference. </li> <li>org.etsi.osl.prefixName: we need to add a short prefix (default is cr) to various places. For example in K8s cannot start with a number </li> <li>org.etsi.osl.serviceOrderId: the related service order id of this deployment request </li> <li>org.etsi.osl.namespace: requested namespace name </li> <li>org.etsi.osl.statusCheckFieldName: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>org.etsi.osl.statusCheckValueStandby: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAlarm: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAvailable: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueReserved: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueUnknown: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li> <p>org.etsi.osl.statusCheckValueSuspended: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </p> </li> <li> <p>Parameters:</p> <ul> <li>aService reference to the service that the resource and the CR belongs to</li> <li>resourceCR reference the equivalent resource in TMF repo of the target CR. One to one mapping</li> <li>orderId related service order ID</li> <li>startDate start date of the deployment (not used currently)</li> <li>endDate end date of the deployment (not used currently)</li> <li>_CR_SPEC the spec that is sent to cridge (in json)</li> </ul> </li> <li> <p>Returns:</p> <ul> <li>a string response from cridge. It might return \"OK\" if everything is ok. \"SEE OTHER\" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. Any other response is handled as error</li> </ul> </li> <li> <p>CRIDGE receives the message and creates according to the labels the necessary CR</p> </li> <li>It monitors the created resource(s) in namespace (see the Sequence Diagram in previous images)</li> <li>It monitors and tries to figure out and map the Status of the CR to the TMF Status according to the provided org.etsi.osl.statusCheck* labels</li> <li>It sends to the message bus the current resource for creation or update to the TMF service inventory</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#probe-further","title":"Probe further","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> </ul>"},{"location":"contributing/developing/","title":"Developing","text":"<p>OpenSlice backend services are mainly implemented with Java 17 or above and Spring boot.</p> <p>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 docker-compose.yaml file).</p> <p>To get the latest development branch:</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh \nsudo ./deploy.sh develop #[or replace develop with other branch name]\n</code></pre> <p>You may follow the installation process, as described at \"develop\" tagged documentation.</p> <p>To work on a specific subsystem e.g. org.etsi.osl.tmf.api, you must:</p> <p>1a - Deploy only the core necessary subsystems through:</p> <pre><code>sudo docker compose --profile dev down;sudo docker compose --profile dev up -d --build\n</code></pre> <p>Note --profile dev that will only deploy the core dependency subsystems, instead of the whole OpenSlice.</p> <p>1b - Or alternatively, commend out the respective container from the docker-compose.yaml file, so as to deploy the whole OpenSlice, except the subsystem you want to work on, following the provided installation steps.</p> <p>2 - Clone the respective repository, e.g. https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/tree/develop</p> <p>3 - Code :)</p>"},{"location":"contributing/developing/#general-requirements","title":"General requirements","text":"<ul> <li>Docker should be installed in your development environment</li> <li>Run the core subsystems (see above section)</li> </ul>"},{"location":"contributing/developing/#slack","title":"Slack","text":"<p>Feel free to join OpenSlice Slack for any development oriented questions.</p>"},{"location":"contributing/developing/#examples-of-developing-on-specific-subsystems","title":"Examples of developing on specific subsystems","text":""},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-api-service","title":"VNF/NSD Catalog Management and NSD Deployment API service","text":"<p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.api/-/tree/develop</p> <p>Check the docker-compose.yml file. Default port is 13080. Check specifically the datasource username/password, server port.</p> <p>Make sure that the core subsystems are up and running.</p> <p>Execute it with </p> <pre><code>mvn spring-boot:run\n</code></pre> <p>For verification, Swagger API of the service is at <code>http://localhost:13000/osapi/swagger-ui/index.html</code>. </p> <p>There, you may try there various REST actions and authenticate via the OAuth server without the use of the UI.</p>"},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-web-ui-service","title":"VNF/NSD Catalog Management and NSD Deployment WEB UI service","text":"<p>The Web UI is written in AngularJS.</p> <p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.web/-/tree/develop</p> <p>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 <code>http://localhost:13000/osapi/testweb/index.html/</code></p>"},{"location":"contributing/developing/#versionrelease-management","title":"Version/release management","text":"<p>Check this nice article on how we develop and release versions.</p> <p>https://nvie.com/posts/a-successful-git-branching-model/</p> <p>We develop in the develop branch and follow a issue driven development model.</p>"},{"location":"contributing/developing/#wishlist","title":"Wishlist","text":"<p>Check also our wishlist of new features. You can add your own.</p> <p>See Wishlist.</p>"},{"location":"contributing/wishlist/","title":"TMF API","text":"<ul> <li>RBAC of API endpoints</li> <li>TMF Ticketing API support</li> <li>TMF Product</li> <li>HATEOAS integration</li> <li>Select Specs that can be exposed to partners (maybe with a characteristic?)</li> </ul>"},{"location":"contributing/wishlist/#resource-management","title":"resource management","text":"<ul> <li>Resource Activation and Configuration API TMF702 (NEW) (https://projects.tmforum.org/wiki/pages/viewpage.action?pageId=128855518)</li> </ul>"},{"location":"contributing/wishlist/#tmf-web","title":"TMF WEB","text":""},{"location":"contributing/wishlist/#osom","title":"OSOM","text":"<ul> <li>Actions on service order item and acknowledge order status will define the lifecycle</li> <li>action shutdown on specific date for service order</li> <li>action edit on service order item</li> </ul>"},{"location":"contributing/wishlist/#dynamic-attribute-transformation","title":"Dynamic attribute transformation","text":"<ul> <li>DTM decision tables support per Service Specification</li> <li>Schedule Termination of completed order on running services</li> </ul>"},{"location":"contributing/wishlist/#nfvo-connectivity","title":"NFVO connectivity","text":""},{"location":"contributing/wishlist/#osm-client","title":"OSM Client","text":"<ul> <li>VNF/NSD config params Day 2</li> <li>NSD Lifcecylce</li> <li>NST support</li> </ul>"},{"location":"contributing/wishlist/#nfv-api","title":"NFV API","text":""},{"location":"contributing/wishlist/#nfv-web","title":"NFV WEB","text":""},{"location":"contributing/wishlist/#3rd-party-connectivity","title":"3rd party connectivity","text":""},{"location":"contributing/wishlist/#flowone-connector","title":"FlowOne connector","text":""},{"location":"contributing/wishlist/#openstack-connector","title":"Openstack connector","text":""},{"location":"contributing/wishlist/#kubernetes-connector","title":"Kubernetes connector","text":""},{"location":"contributing/wishlist/#centrallog","title":"CentralLog","text":"<ul> <li>Events from TMF to be written to Central Log</li> </ul>"},{"location":"contributing/wishlist/#authentication","title":"Authentication","text":""},{"location":"naas/exposed_apis/","title":"Supported TMFORUM exposed APIs","text":"Endpoint Title Description Version /tmf-api/serviceCatalogManagement/v4 633 Service Catalog Management Provides a catalog of services. 4.0.0 /tmf-api/productCatalogManagement/v4/ 620 Product Catalog Management Provides a catalog of products. 4.0.0 /tmf-api/productOrderingManagement/v4/ v622 Product Ordering Provides a standardized mechanism for placing a product order. 4.0.0 /tmf-api/resourceCatalogManagement/v4 634 Resource Catalog Management This is Swagger UI environment generated for the TMF Resource Catalog Management specification. 4.0.0 /tmf-api/serviceInventory/v4 638 Service Inventory Management Provides a consistent/standardized mechanism to query and manipulate the Service inventory. 4.0.0 /tmf-api/serviceOrdering/v4 641 API ServiceOrdering Provides a standardized mechanism for managing Service Order. 4.0.0 /tmf-api/serviceQualityManagement/v2 657 Service Quality Management This is Swagger UI environment generated for the TMF Service Quality Management specification. 2.0.0 /tmf-api/partyRoleManagement/v4/ 669 Party Role Management This is Swagger UI environment generated for the TMF Party Role Management specification. 4.0.0 /tmf-api/party/v4/organization 632 API Party Provides standardized mechanism for party management such as creation, update, retrieval, deletion and notification of events. 4.0.0 /tmf-api/agreementManagement/v2/ 651 Agreement Management T his is Swagger UI environment generated for the TMF Agreement Management specification. 2.0.0 /tmf-api/resourceOrderingManagement/v4 652 Resource Order Management-v4.0.0 This is Swagger UI environment generated for the TMF 652-Resource Order Management-v4.0.0 specification. 4.0.0 /tmf-api/accountManagement/v4 666 Account Management This is Swagger UI environment generated for the TMF Account Management specification. 4.0.0 /tmf-api/customerManagement/v4 629 Customer Management TMF Customer Management 4.0.0 /tmf-api/userinfo 691 Federated ID TMF Federated ID 1.0.0 /tmf-api/ServiceActivationAndConfiguration/v3/ 640 API Service Activation and Configuration Provides the ability to activate and configure Services. 3.0.0 /tmf-api/alarmManagement/v4/ 642 API Alarm 4.0.0 /tmf-api/serviceTestManagement/v4 653 Service Test Management Provides the ability to manage tests of provisioned Services. 4.0.0 /tmf-api/resourceInventoryManagement/v4 639 API Resource Inventory Management Provides the ability to manage Resources. 4.0.0 /tmf-api/lcmrulesmanagement/v1/ LCM Rules Custom API environment for LCM Rules 1.0.0 /tmf-api/resourcePoolManagement/v1 685 Resource Pool Management Resources that can be reserved are only in one pool. 1.0.0 /tmf-api/geographicSiteManagement/v5 674 Geographic Site Management Covers the operations to manage sites that can be associated with entities 5.0.0"},{"location":"naas/gst_to_tmf/","title":"Generic Slice Template as a Service Specification","text":""},{"location":"naas/gst_to_tmf/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>GSMA Generic Slice Template (GST) Defines customer-oriented service requirements, E.g. Availability, Area of service, delay tolerance, etc. and attempts to narrow down the gap between (network) service customers and vendors</p> <p>Moreove it Proposes standardized Network Slice Templates (NESTs) to target specific use cases</p> <p>In OpenSlice we made an effort and translated the GST to a Service Specification model. So Service Designers can use it as a template to design a new Service.</p> <p>The image illustrates the relationship between the GSMA Generic Slice Template (GST), TM Forum Service Specification, and how they are utilized within OpenSlice to offer network services.</p> <p></p> <p>The GST to TM Forum via OpenSlice:</p> <pre><code> * GST Attributes List: A comprehensive list of service attributes, such as availability, delay tolerance, downlink throughput, energy efficiency, isolation level, mission-critical support, and many others.\n * TMF Service Specification: Demonstrates the transformation of GST attributes into a TM Forum service specification, showing JSON code snippets that define service parameters.\n * Offered Service based on GST: Represents the final offered service, an example of a GST-based service shown as an entry in a catalog, ready to be consumed by customers.\n</code></pre> <p>What was our flow:</p> <pre><code>* Started with defining service requirements and attributes using GST.\n* Translated these GST attributes into a formal TM Forum service specification.\n* Service Offering in OpenSlice: The service specification is then used to create and offer a specific network service within OpenSlice, available for customer selection and deployment.\n</code></pre>"},{"location":"naas/gst_to_tmf/#probe-further","title":"Probe further","text":"<p>See v9 of the GST model in GSMA here</p>"},{"location":"naas/introduction/","title":"Network as a Service (NaaS)","text":"<p>This section describes some core concepts for Delivering Network as a Service in OpenSlice. There are many articles and reports on the subject like:</p> <ul> <li>TMF909 API Suite Specification for NaaS</li> <li>TMF926A Connectivity_as_a_Service </li> <li>TMF931-Open_Gateway_Onboarding_and_Ordering_Component_Suite</li> <li>GSMA Open Gatewy initiative</li> </ul> <p>In general Network as a Service (NaaS) is a service model that allows users to consume network infrastructure and services , similar to how they would consume other cloud services like Software as a Service (SaaS) or Infrastructure as a Service (IaaS). NaaS abstracts the complexity of managing physical network infrastructure, providing users with virtualized network resources that can be dynamically allocated and managed through software.</p>"},{"location":"naas/introduction/#openslice-and-naas","title":"OpenSlice and NaaS","text":"<p>OpenSlice makes extensive use of TMFORUM's models and APIs. Therefore if one is familiar with TMF APIs the terminology and ideas are the same.</p> <p>To deliver NaaS we need to incorporate various APIs (see TMF909 API Suite Specification for NaaS). OpenSlice implements various TMF APIs to deliver NaaS and support the lifecycle functions required to manage the network capabilities exposed as Network as a Service and managed by operational domains.</p>"},{"location":"naas/introduction/#probe-further","title":"Probe further","text":"<ul> <li>For a complete list of supported APIs, see Supported APIs</li> <li>Check the defined user roles of OpenSlice in our Terminology</li> </ul>"},{"location":"naas/lcm_intro/","title":"Lifecycle Management - LCM","text":"<p>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</p>"},{"location":"naas/lcm_intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>In OpenSlice the Lifecycle of a service follows in general the concept of Network Slice lifecycle as defined by 3GPP.</p> <p></p>"},{"location":"naas/lcm_intro/#introduction-in-openslice-lcm","title":"Introduction in OpenSlice LCM","text":"<p>OpenSlice Adopted adopted the LCM model by 3GPP and mapped to the TMF model service state. Next we discuss briefly the process and the relationships.</p> <p>The lifecycle of a service, particularly in the context of Network Service lifecycleencompasses several stages that ensure the service is effectively planned, deployed, managed, and eventually decommissioned. </p> <p>Here is an overview of these stages and relationships with OpenSlice:</p>"},{"location":"naas/lcm_intro/#0-preparation-phase","title":"0. Preparation Phase","text":"<p>This phase is performed by Service Designers</p>"},{"location":"naas/lcm_intro/#service-design","title":"Service Design:","text":"<ul> <li>Requirements Gathering: Collect service requirements from stakeholders, including performance metrics, quality of service (QoS), security needs, and geographical coverage.</li> <li>Service Specification: Define the service in terms of functionalities, attributes, and dependencies. This can be formalized using standardized templates such as the GSMA Generic Slice Template (GST).</li> <li>Resource Planning: Identify and plan the required resources, including network functions, computing power, storage, and connectivity, inclluding network function configurations.</li> <li>Expose to Service Catalog: Expose to service catalog for user ordering.</li> </ul> <p>Next phases are handled by the Service Orchestrator after a service is scheduled for instantiation</p> <p>If it is a bundle of services, each services follows its own Lifecycle!</p>"},{"location":"naas/lcm_intro/#1-instantiation-phase","title":"1. Instantiation Phase","text":""},{"location":"naas/lcm_intro/#service-instantiation","title":"Service Instantiation:","text":"<ul> <li>Configuration: Configure the network service according to the specifications includin the user requirements from the service order, ensuring that all components are correctly set up to provide the desired service.</li> <li>Resource Allocation - Feasibility check: Allocate the necessary physical and virtual resources based on the service specification. This includes any containerized resources, virtual network functions (VNFs) and software-defined networking (SDN) components. (This step is not perfromed in OpenSlice)</li> <li>OpenSlice Service Orchestrator creates the services at \"RESERVED\" state</li> <li>User Notification: There could be an email notification from the system (if Bugzilla is configured)</li> </ul>"},{"location":"naas/lcm_intro/#service-deployment","title":"Service Deployment:","text":"<ul> <li>Activation: OpenSlice Service Orchestrator activates the network service and makes the service available to the end-users. This may involve:</li> <li>Create any related services that the service depends on</li> <li>Contacting all related controllers during provisioning, e.g. Kubernetes controllers, Kubernetes operators, MANO Orchestrators, RAN controllers, SDN Controlles, or other external services (e.g. via REST calls)</li> <li>Scheduling instantiation, Resolving dependencies and passing paramemters between controllers,</li> <li>setting up user accounts, provisioning access credentials -this is performed either offline or via other services.</li> <li>OpenSlice Service Orchestrator if everything is succesful put the service at \"ACTIVE\" state</li> <li>User Notification: There could be an email notification from the system (if Bugzilla is configured)</li> </ul>"},{"location":"naas/lcm_intro/#2-operation-phase","title":"2. Operation Phase","text":""},{"location":"naas/lcm_intro/#service-operation","title":"Service Operation:","text":"<ul> <li>Lifecycle Management: Manage the network slice throughout its lifecycle, including scaling, reconfiguration, and adaptation to changing requirements. </li> <li>In OpenSlice this is performed with Lifecycle management Rules (see next)</li> </ul> <p>In this phase the Service Designer can define several aspects. Be aware that these are NOT performed automatically by OpenSlice - further examples and future enhancements will address these. This could include:</p> <ul> <li>Monitoring: Continuously monitor the service for performance, availability, and compliance with SLAs. Utilize tools for real-time tracking and alerts for any anomalies or performance degradation.</li> <li>Maintenance: Conduct regular maintenance activities, including software updates, patching, and optimization to ensure the service runs smoothly.</li> <li>Scaling: Dynamically scale the resources up or down based on the demand and performance requirements.</li> <li>Fault Management: Detect and resolve faults in the network slice to minimize downtime and maintain service quality.</li> </ul>"},{"location":"naas/lcm_intro/#3-decommissioning-phase","title":"3. Decommissioning Phase","text":""},{"location":"naas/lcm_intro/#service-decommissioning","title":"Service Decommissioning:","text":"<p>Service Termination: Service Orchestrator terminates the network service . This may involve: - Terminate any related services that the service depends on - Contacting all related controllers during termination to release resources, e.g. Kubernetes controllers, Kubernetes operators, MANO Orchestrators, RAN controllers, SDN Controlles, or other external services (e.g. via REST calls) - Scheduling termination, Resolving dependencies and passing paramemters between controllers - OpenSlice Service Orchestrator if everything is succesful put the service at \"TERMINATED\" state - User Notification: There could be an email notification from the system (if Bugzilla is configured)</p>"},{"location":"naas/lcm_intro/#high-level-example-enhanced-mobile-broadband-embb-service-lifecycle","title":"High level example: Enhanced Mobile Broadband (eMBB) Service Lifecycle","text":"<ol> <li>Preparation:</li> <li>Define eMBB service requirements for high bandwidth and low latency.</li> <li>Create an eMBB service specification template specifying related services and resources to Kubernetes Operators, VNFs for content delivery and traffic management.</li> <li> <p>Expose to catalog</p> </li> <li> <p>Instantiation:</p> </li> <li>Instantiate other services and allocate resources such as edge computing nodes and high-capacity links.</li> <li> <p>Configure the service to prioritize video streaming traffic.</p> </li> <li> <p>Operation:</p> </li> <li>Monitor the service to ensure it meets high-bandwidth requirements.</li> <li> <p>Scale up resources during peak usage periods, such as live sports events.</p> </li> <li> <p>Decommissioning:</p> </li> <li>Notify users about service termination.</li> <li>Decommission the network service, reclaiming resources for other services.</li> </ol>"},{"location":"naas/lcm_intro/#probe-further","title":"Probe further","text":"<ul> <li>See 3GPP Lifecycle</li> </ul>"},{"location":"naas/resource_catalog/","title":"OpenSlice Resource Catalog:","text":"<pre><code>* Resource Specifications: Defines the underlying resources required to deliver services, such as network components, servers, and software.\n* Resource Availability: Tracks the availability and status of resources to ensure efficient service delivery.\n</code></pre>"},{"location":"naas/service_catalog/","title":"OpenSlice Service Catalogs","text":"<p>OpenSlice offers complete management of Service Catalogs.</p>"},{"location":"naas/service_catalog/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>OpenSlice offers complete management of Service Catalogs which offer to end users:</p> <ul> <li>Service categories: Lists the available services, including their specifications and performance metrics.</li> <li>Service Bundles: Combines multiple services into a single offering to provide added value to customers.</li> </ul> <p>Service Catalogs contain Service Specifications (organized in Service Categories) exposed to users for Service Orders.</p>"},{"location":"naas/service_catalog/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following. Service catalogs and categories exposed in Service marketplace. </p> <p>In the menu the administrator can manage the Service Catalogs and Categories.</p> <p></p>"},{"location":"naas/service_catalog/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n\nendpoint examples:\n\n/serviceCatalogManagement/v4/serviceCatalog List or find ServiceCatalog objects\n/serviceCatalogManagement/v4/serviceCategory List or find ServiceCategory objects\n\n</code></pre>"},{"location":"naas/service_catalog/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition: Service Template thus create a template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> <li>Service Catalog Integration: Add to Service Catalog the XXXX service with all relevant details.</li> <li>Service Delivery/Order: Provision Service by Using the orchestration system to provision and configure the XXXX service based on customer orders.</li> </ul>"},{"location":"naas/service_catalog/#probe-further","title":"Probe further","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Catalog and Categories here</li> </ul>"},{"location":"naas/service_inventory/","title":"Service Inventory","text":"<p>Service Inventory contains refences to running services that realize a Service Order</p>"},{"location":"naas/service_inventory/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>The Service Inventory is a repository that maintains detailed records of all active services and the underlying resources that support them. It acts as a central repository, tracking the lifecycle of each service from provisioning to decommissioning, and includes references to the specific virtual and physical resources that realize the service, such as servers, network components, storage, and software instances. </p> <p>This inventory enables real-time visibility into the status, configuration, and dependencies of each service, facilitating effective management, troubleshooting, and optimization. </p> <p>By providing a view of the active services, the Service Inventory includes services/resource allocation, and ensures that services are delivered in alignment with the inital requst. </p>"},{"location":"naas/service_inventory/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Inventory and any active Services (reconfigure or terminate).Various examples in this document will guide you to the usage and the management of the Services in Service Inventory.</p>"},{"location":"naas/service_inventory/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-638-ServiceInventoryManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceInventory/v4/service List or find Service objects</p>"},{"location":"naas/service_inventory/#probe-further","title":"Probe further","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_ordering/","title":"Service Ordering","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders.</p>"},{"location":"naas/service_ordering/#intended-audience-service-designers-openslice-administrators","title":"Intended Audience: Service Designers, OpenSlice administrators","text":"<p>The Service Order process is a structured sequence of steps initiated by a customer's Service Order request for a specific service, aimed at delivering and activating the desired service or services (if it is a service bunlde), as well as its related services. It begins with the customer submitting a service request through OpenSlice Services portal or the Service Order API, specifying the necessary details such as service specification, configurations, and any specific requirements.</p> <p>The request is then validated and verified for completeness and eligibility by an administrator which marks the Service Order as ACKNOWLEDGED otherwise it rejects it. </p> <p>Once ACKNOWLEDGED, the service order is processed by OpenSlice orchestration system (OSOM), which schedules/automates the provisioning of the required resources and configurations, coordinating across various components such as MANO controlers for virtual network functions (VNFs), or Containerized controllers or any 3rd party controllers or services or even physical infrastructure. The OpenSlice orchestration system ensures that all dependencies are managed and that the service is correctly configured.</p> <p>After provisioning, the service is activated and handed over to the customer, . This end-to-end process ensures a seamless, efficient, and automated delivery of services, enhancing customer satisfaction and operational efficiency.</p> <p>Ongoing monitoring and other actions can be performed by the Life Cycle management rules</p> <p>Future developments: In future releases it might be possible the ongoing monitoring and support provided to ensure continuous performance and reliability. The service could undergoe a series of tests to ensure it meets the specified performance metrics and SLAs before delivering</p>"},{"location":"naas/service_ordering/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Orders. Various examples in this document will guide you to the usage and the management of the Service Orders.</p>"},{"location":"naas/service_ordering/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-641-ServiceOrdering-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceOrdering/v4/serviceOrder List or find ServiceOrder objects</p>"},{"location":"naas/service_ordering/#probe-further","title":"Probe further","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_spec/","title":"OpenSlice Service Specification","text":"<p>OpenSlice offers complete management of Service Specifications.</p>"},{"location":"naas/service_spec/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Specification is an entity that describes a service offering. There are two types of Service Specifications:</p> <ul> <li>Resource Facing Service Specification</li> <li>Customer Facing Service Specification</li> </ul>"},{"location":"naas/service_spec/#resource-facing-service-specification","title":"Resource Facing Service Specification","text":"<p>Is a Service that It exposes a resource Specification as a Service. (For example expose a Network Service Descriptor as a Service)</p>"},{"location":"naas/service_spec/#customer-facing-service-specification","title":"Customer Facing Service Specification","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders. Usually it exposes other CFSSpec(as a Service Bundle) or other RFSSpecs</p>"},{"location":"naas/service_spec/#definition","title":"Definition","text":"<p>Usually a Service Specification has the following aspects:</p> <ul> <li>Name, Description, Version</li> <li>Marked as a Service Bundle: Combines multiple services into a single offering to provide added value to customers.</li> <li>if is is a Bundle then you must add Related Service Specifications</li> <li>If it is a Resource Facing Service Specification has multiple related Resource Facing Service Specifications</li> <li>Characteristics: a list of service characteristics and their type (TEXT, INTEGER, etc)</li> <li>Also they can be exposed as \"Configurable\" so to allow to end-users during the Service Order to select or type values</li> <li>A logo, displayed if needed in the Service Marketplace</li> <li>Any attachments that further help the user</li> <li>Life Cycle Rules that determine the behavior of the Service and instrument the Service Orchestrator. More on Life Cycle Rules here</li> </ul> <p>Service Designers can create a Service Specification from scratch or use some templates:</p> <pre><code>* Create a Service based from a Network Service Descriptor (NSD)\n* Create a Service based on a Kubernetes Operator\n* Create a Service based on the GSMA GST - Generic Slice Template\n</code></pre>"},{"location":"naas/service_spec/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following.</p> <p>Through the menu and dedicated forms the administrator can manage the Service Specifications. Various examples in this document will guide you to the usage and the design of the services.</p>"},{"location":"naas/service_spec/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceCatalogManagement/v4/serviceSpecification List or find ServiceSpecification objects</p>"},{"location":"naas/service_spec/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition: Create a service specification template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> </ul>"},{"location":"naas/service_spec/#probe-further","title":"Probe further","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Service Specifications in Catalog and Categories here (You need to login - see main guide page)</li> <li>Check the GSMA GST</li> </ul>"},{"location":"naas/so_intro/","title":"Service Orchestration","text":"<ul> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with underlying controller components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> </ul>"},{"location":"naas/so_intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>OpenSlice end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, Network as a Service (NaaS) OpenSlice automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers.</p> <p>This section provides an overview of the Service Orchestration process</p>"},{"location":"naas/nfv/nfvservices/","title":"NFV Services","text":"<p>NFV Services are managed through a dedicate UI the NFV portal (eg http://portal.openslice.io/nfvportal)</p> <p>Users are able through this portal to manage their NFV artifacts towards the NFVO, ( for example onboard VNFs and NSDs to a target OSM)</p> <p>Openslice NFV Services target to accommodate the following envisaged user roles. All users are assumed to be Authenticated:</p> <ul> <li>NFV developer: This role is responsible to upload VNF and NSD Descriptors in the Openslice services towards NFVO like OSM</li> <li>Services administrator: This role represents the user that are responsible for maintenance of the Openslice services</li> </ul> <p>(obsolete: )</p> <ul> <li>Testbed provider: This role represents users that are responsible for testbed administration, configuration, integration, adaptation, support, etc</li> <li>Experimenter: This role represents the user that will utilize our services and tools to deploy an experiment. That is the experiment description in terms of e.g.: NSD (Network Service Descriptor) or TOSCA Specification (in future versions)</li> </ul> <p>Finally an anonymous user role exists who has some really simple usage scenarios (e.g. signup through the portal)</p> <p>During the onboarding process the following occurs:</p> <p>\u2022 A NFV developer submits a NFV archive (VNF or NSD) (he can later manage if needed some metadata) \u2022 The administrator can manage the NFV artifact (e.g. edit it) \u2022 The administrator On-Boards the NFV artifact to the target MANO \u2022 The administrator can optionally mark the NFV: o As public in order to be publicly visible by all portal users o As Certified which means this is certified by a certain entity</p>"},{"location":"naas/nfv/nfvservices/#request-a-new-nsd-deployment-this-is-different-in-comparison-to-services","title":"Request a new NSD deployment (this is different in comparison to Services)","text":"<p>A developer requests a new network service deployment (which NSD, tentative dates, target infrastructure, etc.). The request is marked as UNDER_REVIEW</p> <ul> <li>The administrator is notified about the new request and he has the following options:</li> <li>Schedule the deployment for the requested dates or propose other dates. The request is marked as SCHEDULED</li> <li>Reject the request for some reason. The Request is marked as REJECTED</li> <li>Deploy the request to target VIM(s). The Request is marked as RUNNING</li> <li>Finalize the deployment and release resources. The Request is marked as COMPLETED</li> <li>every change of the request-lifecycle the experimenter is notified.</li> </ul>"},{"location":"service_design/intro/","title":"Service Design in OpenSlice","text":"<p>This section offers details on how to design Service Specifications and expose them in Service Catalogs</p>"},{"location":"service_design/intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Designers create detailed service specifications, which are then managed and exposed in service catalogs. These services are integrated into OpenSlice E2E service orchestration framework to automate and optimize the delivery of network services.</p> <p>OpenSlice can be used to design service specifications for various services, even not networking related services. Here we cover how service designers can expose services related to the NFV world and the containerized world.</p>"},{"location":"service_design/intro/#probe-further","title":"Probe further","text":"<ul> <li>Design and expose services based on containerized resources via the Kubernetes Operator pattern</li> <li>Design and expose services based on NFV artifacts</li> </ul>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/","title":"Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>To illustrate the powerful concept of Kubernetes operators and how they can be utilized to offer a service through OpenSlice, let's provide an example of a \"Calculator as a Service.\" </p> <p>This example will demonstrate the flexibility and capabilities of Kubernetes operators in managing custom resources and automating operational tasks.</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#offering-calculator-as-a-service-through-openslice","title":"Offering \"Calculator as a Service\" through OpenSlice","text":"<ul> <li>We have a service that can accept two integers and an action (SUM, SUB, etc) and returns a result</li> <li>We would like to offer it as a Service through OpenSlice</li> <li>So when a user orders it with some initial parameters, OpenSlice will create it and return the result</li> <li>Also while the service is active, we can do further calculations, until we destroy it.</li> </ul> <p>Assume the following simple CRD of a calculator model accepting two params (spec section) and an action and returning a result (status section)</p> <p>The controller (the calculator code) is implemented in any language and is installed in a Kubernetes cluster</p> <pre><code>\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n name: mycalculators.examples.osl.etsi.org\nspec:\n group: examples.osl.etsi.org\n names:\n kind: MyCalculator\n plural: mycalculators\n singular: mycalculator\n scope: Namespaced\n versions:\n - name: v1alpha1\n schema:\n openAPIV3Schema:\n properties:\n spec:\n properties:\n parama:\n type: integer\n paramb:\n type: integer\n action:\n type: string\n type: object\n status:\n properties:\n result:\n type: integer\n status:\n type: string\n type: object\n type: object\n served: true\n storage: true\n subresources:\n status: {}\n</code></pre> <p>Request to the cluster (through e.g. kubectl apply)</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p>Response</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n\u00a0 creationTimestamp: '2023-12-05T12:26:07Z\u2019\n\n<snip>\n\nstatus:\n\u00a0 result: 350\n\u00a0 status: CALCULATED\nspec:\n\u00a0 action: SUM\n\u00a0 parama: 170\n\u00a0 paramb: 180\n\n</code></pre> <p>To perform this through OpenSlice as a Service Specification ready to be ordered we need to do the following:</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#crd-is-saved-automatically-as-resource-specification","title":"CRD is saved automatically as Resource Specification","text":"<p>As soon as the CRD is deployed in the cluster (e.g. by your admin via kubctl or via any installation through the internet) it is automatically transformed and is available in OpenSlice catalogs as a Resource Specification.</p> <ul> <li>See also the fully qualified name of the resource specification. <ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@docker-desktop@https://kubernetes.docker.internal:6443/</li> <li>The resource specification name is quite unique, so you can install the CRD in many clusters around the internet. Each CRD on each cluster will appear here, for example:<ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@default_cluster@https://10.10.10.8:6443/</li> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@edge1_cluster@https://172.16.10.10:6443/</li> </ul> </li> <li>Having this OpenSlice can manage resources in multiple clusters</li> </ul> </li> </ul> <p></p> <p>See also the detailed characteristics. See how OpenSlice makes all characteristics automatically flat and expanded with key-value style</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-to-users","title":"Expose to Users","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#start-by-creating-a-resourcefacingservicespecification","title":"Start by Creating a ResourceFacingServiceSpecification","text":"<p>From the UI menu create a new Service Specification</p> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#creation-of-crd-related-characteristics","title":"Creation of CRD-related characteristics","text":"<ul> <li>We need now to adjust some characteristics of this CRD as Resource Specification.</li> <li>OpenSlice transalted automatically the CRD spec in a flat list of characteristics.So the \"spec\" section from the original yaml for example, is now unfold into: spec, spec.parama, spec.paramb, etc. the same for \"status\" object</li> <li> <p>We need to make OpenSlice aware of when the service will be active. </p> <ul> <li>So we go to characteristic _CR_CHECK_FIELD and we define that the field that shows the status of the service is the characteristic \"status.status\" (is a text field) </li> <li>Then we go to _CR_CHECKVAL_AVAILABLE and we define the value CALCULATED, which signals the following: When the characteristic \"status.status\" has the value \"CALCULATED\" then OpenSlice will mark the underlying service as \"ACTIVE\"</li> <li>We need also to define the yaml file that OpenSLice will use to create the new resource in the kubernetes cluster</li> <li>We insert the YAML in the characteristic _CR_SPEC</li> </ul> <p>the _CR_SPEC is: </p> </li> </ul> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p></p> <p>However the values are fixed. How do we allow a user to pass parameters through OpenSlice</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-in-catalog","title":"Expose in Catalog","text":"<p>Create a new CustomerFacingServiceSpecification</p> <pre><code>- Go to the menu Service Specification>New Service Specification\n- Create a service My Calulator and mark it as a Bundle\n- Go to Service Specification Relationships and add MyCalculatorRFS\n- The service will be automatically transformed to a \"CustomerFacingServiceSpecification\"\n- Add the following characteristics as the image shows:\n</code></pre> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#allow-users-to-pass-new-values-through-openslice","title":"Allow users to pass new values through OpenSlice","text":"<p>We need to Create LCM rules in CustomerFacingServiceSpecification:</p> <pre><code>- The goal of the rules is to allow the user to pass parameters to the actual resource towards the cluster.\n- we will create one rule that will pass the parameters just before creating the service (PRE_PROVISION phase)\n- we will create one rule that will pass the parameters while the service is active (SUPERVISION phase)\n- The rules will be the same\n</code></pre> <p></p> <p>If we see one rule it will look like the following:</p> <p></p> <ul> <li>We need to change the _CR_SPEC characteristic of the referenced ResourceFacingServiceSpecification</li> <li>First bring a block from Service>Relationships>Service Refs and drop the \"Service MyCalculatorRFS\" block</li> <li>Then add a list block from Lists</li> <li>Then add the block that modifies a referenced characteristic from Service>Relationships>Service Refs the block \"Set value to characteristic of a Referenced Service\"</li> <li>Add a block for text _CR_SPEC </li> <li>We use a block that changes a String according to variables Text>\"A formatted text replacing variables from List\"</li> <li>See that we have as Input string the YAML string lines<ul> <li>see that parama, paramb has a %d (they accept integers), action is %s (accepts a string)</li> <li>See that the variables tha will replace the %d, %d and %s are an list<ul> <li>the first %d will be replaced with the value from characteristic spec.parama</li> <li>the second %d will be replaced with the value from characteristic spec.paramb</li> <li>the %s will be replaced with the value from characteristic spec.action</li> </ul> </li> </ul> </li> </ul> <p>If we see the SUPERVISION rule it will look like the following:</p> <ul> <li>It contains also the Result field, which takes the value from the referenced service</li> <li>Add a block for the Result field from Service>Number blocks</li> <li>Add a str to int block from Number blocks</li> <li>Add Service>Relationships>Service Refs and drop the input block [Service MyCalculatorRFS] \"Get Service details from current context running service\" and select from the drop down the \"serviceCharacteristicValue\"</li> <li>Add as name the \"status.result\" </li> </ul> <p></p> <p></p> <p>Expose it then to a catalogue for orders through the Service Categories and Service Catalogs</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#order-the-service","title":"Order the Service","text":"<p>When a user orders the service, it will look like this:</p> <p></p> <ul> <li>After the Service Order we have 2 services in service inventory on CFS and on RFS. Both have references to values</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The Actual resources are running in the Kubernetes cluster managed by OpenSlice</li> <li>The result is in the characteristic status.result of the running service</li> </ul> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#modify-the-running-service","title":"Modify the running service","text":"<p>The user can modify the service</p> <p></p> <ul> <li>After a while the update is applied to the cluster, the controller will pick up the resource update and patch the resource</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The result will be available to the respective characteristic \"Result\" after a few seconds, as need to go through various steps (OpenSlice orchestrator, down to kubernetes, to Calculator controller and back)</li> </ul> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/","title":"Expose and manage Kubernetes Custom Resource Definitions (Operators) in a Kubernetes Cluster","text":"<p>OpenSlice is capable of exposing Kubernetes Resources and Definitions as Service Specifications</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>OpenSlice is capable to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OpenSlice services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>OpenSlice capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <ul> <li>OpenSlice can expose CRs in service catalogs, facilitating their deployment in complex scenarios.</li> <li>These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#approach","title":"Approach","text":"<p>OpenSlice in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. </li> <li>OSOM creates a Resource in OSL Resource inventory and requests new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OpenSlice Resource Inventory need to be aware of these events.</p> <p>When installing OpenSlice you can configure at least one management cluster. OpenSlice connects via a provided kubeconf</p> <ul> <li>On Start up OSL tries to register this cluster and context to OSL catalogs.</li> <li>After the registration of this cluster as a Resource in OSL OSL is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL</li> <li>Resources created by OpenSlice have labels, e.g. (org.etsi.osl.*)</li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>A CRD by default is exposed as a Resource Specification</p> <p>To ensure unique names across the clusters that OpenSlice can manage, the name of a CRD is constructed as follows:</p> <p><code>Kind @ ApiGroup/version @ ContextCluster @ masterURL</code></p> <p>For example you might see resource Specifications like:</p> <pre><code>- ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n- ```IPAddressPool@metallb.io/v1beta1@kubernetes@https://10.10.10.144:6443/```\n- ```Provider@pkg.crossplane.io/v1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p>All attributes of the CRD are translated into characteristics</p> <p>The following specific characteristics are added:</p> <pre><code> - _CR_SPEC: Used for providing the json Custom Resource description to apply\n - _CR_CHECK_FIELD: Used for providing the field that need to be checked for the resource status\n - _CR_CHECKVAL_STANDBY: Used for providing the equivalent value from resource to signal the standby status\n - _CR_CHECKVAL_ALARM: Used for providing the equivalent value from resource to signal the alarm status\n - _CR_CHECKVAL_AVAILABLE: Used for providing the equivalent value from resource to signal the available status\n - _CR_CHECKVAL_RESERVED: Used for providing the equivalent value from resource to signal the reserved status\n - _CR_CHECKVAL_UNKNOWN: Used for providing the equivalent value from resource to signal the unknown status\n - _CR_CHECKVAL_SUSPENDED: Used for providing the equivalent value from resource to signal the suspended status\n</code></pre> <ol> <li> <p>Create a new Service Specification and use this Resource Specification in Resource Specification Relationships</p> <ul> <li>Then the Service Specification is saved as ResourceFacingServiceSpecification</li> </ul> <p>1.1. You can give at this stage values to the characteristics:</p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>1.2. You can now create LCM rules if you wish</p> </li> <li> <p>Create a new Service Specification and use the Resource Facing Service Specification in Service Specification Relationships</p> <ul> <li>Then the Service Specification is saved as CustomerFacingServiceSpecification</li> </ul> <p>2.1. You can give at this stage values to the characteristics: </p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>2.2. You We can create LCM rules for this new Service Specification</p> <p>2.3. You Expose configurable values for users to configure during service order</p> </li> </ol> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM - OpenSlice Service Orchestrator, checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#mapping-the-cr-lifecycle-that-is-defined-in-the-crd-with-the-openslice-tmf-based-resource-lifecycle","title":"Mapping the CR lifecycle that is defined in the CRD with the OpenSLice (TMF-based) resource Lifecycle","text":"<p>OpenSlice adds automatically as we see the following characteristics: </p> <pre><code> - _CR_CHECK_FIELD\n - _CR_CHECKVAL_STANDBY\n - _CR_CHECKVAL_ALARM\n - _CR_CHECKVAL_AVAILABLE\n - _CR_CHECKVAL_RESERVED\n - _CR_CHECKVAL_UNKNOWN\n - _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>These characteristics instrument OpenSlice services to manage and reflect the lifecycle of a kubernetes resource to OpenSlice's (TMF based) lifecycle</p> <ul> <li>_CR_CHECK_FIELD: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>_CR_CHECKVAL_STANDBY: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_ALARM: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_AVAILABLE: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_RESERVED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_UNKNOWN: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#probe-further","title":"Probe further","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> <li>Learn more about CRIDGE, the service in OSL that manages CRDs/CRs</li> </ul>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/","title":"Example: Offer Jenkins as a Service via Openslice","text":"<p>Before reading this example please make sure that you went through the Design Helm as a Service </p> <p>We will use the <code>Kind: Application</code> of ArgoCD and create a ResourceFacingServiceSpecification for Jenkins</p> <pre><code>1. Go to Service Specifications\n2. Create New Specification\n3. Give a Name, eg. jenkinsrfs\n4. Go to Resource Specification Relationships\n5. Assign ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p></p> <p>Focus now on the characteristics configuration.</p> <p>First we need to map the lifecycle of ArgoCD Application to TMF Resource State</p> <p></p> <p>In ArgoCD the field health.status has the value that we need to check (Healty, Progressing, etc)</p> <p>The _CR_SPEC can be designed first in a YAML or json editor. Let's see a YAML definition:</p> <p>```</p> <p>apiVersion: argoproj.io/v1alpha1 kind: Application metadata: finalizers: - resources-finalizer.argocd.argoproj.io name: openslice-jenkins namespace: argocd spec: project: default destination: namespace: opencrdtest name: in-cluster source: repoURL: https://charts.jenkins.io targetRevision: 4.6.1 chart: jenkins helm: values: | controller: service: type: ClusterIP syncPolicy: automated: prune: true selfHeal: true allowEmpty: false syncOptions: - Validate=false - CreateNamespace=true - PrunePropagationPolicy=foreground - PruneLast=true - RespectIgnoreDifferences=true ```</p> <p>NOTICE</p> <p>On each installation OSOM will change the name of the resource in order to be unique (will have a UUID)</p> <p><code>name: openslice-jenkins</code> </p> <p>destination namespace that ArgoCD will use is the name <code>opencrdtest</code></p> <p><code>destination: namespace: opencrdtest</code></p> <p>This implies that ArgoCD installs the Jenkins always in the same namespace</p> <p>To avoid this we will create a simple pre-provision rule to change the namespace properly</p> <p>See the following image: </p> <p></p> <ol> <li>Drag-Drop the _CR_SPEC characteristic of jenkinsrfs from the Service>Text blocks</li> <li>Drag-Drop Text>Formatted text block</li> <li>Drag-Drop Text>Multi-line text input block</li> <li>Copy paste the YAML text</li> <li>Change the spec: destination:namespace to the value %s</li> <li>Drag-Drop Lists>Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context>Current Service Order block and select the id. Connect it to the List</li> <li>Save the PRE_PROVISION Rule</li> </ol>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#expose-the-service-to-your-users","title":"Expose the service to your users","text":"<p>Expose then as CustomerFacingServiceSpecification by using the previous RFSS as Service Specification Relationship 1. Create a Jenkins service and mark as Bundle and save it 2. Go to Service Specification Relationships and assign Jenkinsrfs 3. Add also a Logo if you wish</p> <p></p> <p></p> <p>Expose it now to a Category and a Catalog to be available for ordering.</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#order-the-service","title":"Order the service","text":"<p>Order the service from the catalog. </p> <p>Soon the order will be completed and the Services will be active</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#how-to-access-the-jenkins-installation","title":"How to access the Jenkins installation:","text":"<p>From the Supporting services of the Service Order, select the ResourceFacingService (jenkinsrfs)</p> <p>The ResourceFacingService has also supporting resources in resource inventory.</p> <p></p> <p>One is the resource reference to the application (e.g. cr_tmpname...), the other is a secret (e.g. cr87893...). </p> <p>Click to go to the secret resource (This is in the Resource inventory of OpenSlice)</p> <p></p> <p>Use them to login in your Jenkins.</p> <p>Exposing Jenkins to you external is a matter of cluster configuration and request (nodeport, load balancing, etc)! This is not a topic for this example</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/","title":"Expose HELM charts as Service Specifications","text":"<p>Manage Helm charts installations via OpenSlice Service Specifications and Service Orders.</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. </p> <p>Helm is a tool that automates the creation, packaging, configuration, and deployment of Kubernetes applications by combining your configuration files into a single reusable package</p> <p>At the heart of Helm is the packaging format called charts. Each chart comprises one or more Kubernetes manifests -- and a given chart can have child charts and dependent charts, as well. Using Helm charts:</p> <pre><code> - Reduces the complexity of deploying Microservices\n - Enhances deployment speed\n - Developers already know the technology\n</code></pre> <p>There are many Helm charts and Helm repositories there that are ready to be used</p> <p>Enable loose coupling and more orchestration scenarios</p> <p>Developers create and deploy applications in things they already know (e.g. Helm charts)</p> <p>Use the TMF models as wrapper entities around Helm charts</p> <p>Use OpenSlice to expose them in service catalogs and deploy them in complex scenarios (service bundles) involving also other systems:</p> <pre><code>- Include e.g. RAN controllers, \n- Pass values through life cycle rules from one service to another, \n- Manage multiple Helms in multiple clusters\n</code></pre>"},{"location":"service_design/kubernetes/helm/design_helmaas/#the-installation-of-helm-charts-is-based-on-openslice-crd-support","title":"The installation of HELM charts is based on OpenSlice CRD support","text":"<p>Please read more here</p> <p>For installing HELM charts we will use ArgoCD a well known Kubernetes-native continuous deployment (CD) tool </p> <p>ArgoCD is a Kubernetes-native continuous deployment (CD) tool</p> <p>While just deploying Heml charts is just a scenario for ArgoCD , in future one can exploit it for many things</p> <p>Despite some other tools like FluxCD, it provides also a UI which is useful for management and troubleshooting</p> <p>We will mainly use the CRD of <code>Kind: Application</code> that ArgoCD can manage</p> <p>Before proceeding, install ArgoCD in your management cluster, by following ArgoCD instructions</p> <p>As soon as you install ArgoCD, OpenSlice is automatically aware for specific new Kinds. The one we will use is is the <code>Kind: Application</code> that ArgoCD can manage under the apiGroup argoproj.io</p> <p>Browse to Resource Specifications. You will see an entry like the following:</p> <p><code>Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/</code></p> <p>see image: </p> <p></p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#whats-next","title":"What's next","text":"<p>See the Example: Offer Jenkins as a Service via Openslice </p>"},{"location":"service_ordering/ordering_services/","title":"Service Ordering","text":""},{"location":"service_ordering/ordering_services/#intended-audience-users","title":"Intended Audience: Users","text":""}]} \ No newline at end of file -- GitLab