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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%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 &gt; 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 &gt; Clients &gt; 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 &gt; Realm Settings &gt; Login Tab &gt; 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 &gt; Users &gt; 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} -&gt; 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 -&gt; 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 &gt; Manage MANO Platforms &gt; 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 &gt; Manage MANO providers &gt; 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-&gt;INPROGRESS-&gt;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\": \"&lt;h3&gt;cirros_vnfd&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;512 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;1 GB&lt;br&gt;\",\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\": \"&lt;h3&gt;cirros_sriov_vnf&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros SRIOV interface&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;4096 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;10 GB&lt;br&gt;\",\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>&gt; The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n&gt; 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&lt;snip&gt;\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&gt;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&gt;Relationships&gt;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&gt;Relationships&gt;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&gt;\"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&gt;Number blocks</li> <li>Add a  str to int block from Number blocks</li> <li>Add Service&gt;Relationships&gt;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&gt;Text blocks</li> <li>Drag-Drop Text&gt;Formatted text block</li> <li>Drag-Drop Text&gt;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&gt;Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context&gt;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 &gt; 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 &gt; Clients &gt; 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 &gt; Realm Settings &gt; Login Tab &gt; 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 &gt; Users &gt; 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} -&gt; 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 -&gt; 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 &gt; Manage MANO Platforms &gt; 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 &gt; Manage MANO providers &gt; 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-&gt;INPROGRESS-&gt;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\": \"&lt;h3&gt;cirros_vnfd&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;512 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;1 GB&lt;br&gt;\",\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\": \"&lt;h3&gt;cirros_sriov_vnf&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros SRIOV interface&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;4096 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;10 GB&lt;br&gt;\",\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>&gt; The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n&gt; 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&lt;snip&gt;\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&gt;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&gt;Relationships&gt;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&gt;Relationships&gt;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&gt;\"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&gt;Number blocks</li> <li>Add a  str to int block from Number blocks</li> <li>Add Service&gt;Relationships&gt;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&gt;Text blocks</li> <li>Drag-Drop Text&gt;Formatted text block</li> <li>Drag-Drop Text&gt;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&gt;Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context&gt;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