From 8aa1f25da50558277873f543ec2bae632efaa8c2 Mon Sep 17 00:00:00 2001
From: Dimitrios <dimit.giannopoulos@upnet.gr>
Date: Mon, 1 Jul 2024 13:00:45 +0000
Subject: [PATCH] Deployed ae64230 to develop in public with MkDocs 1.6.0 and
 mike 2.1.2

---
 public/develop/deployment/index.html      |  87 ++++++
 public/develop/images/global_approach.png | Bin 0 -> 225125 bytes
 public/develop/index.html                 | 347 ++++++++--------------
 public/develop/search/search_index.json   |   2 +-
 public/develop/sitemap.xml                |  46 +--
 public/develop/sitemap.xml.gz             | Bin 408 -> 408 bytes
 6 files changed, 238 insertions(+), 244 deletions(-)
 create mode 100644 public/develop/images/global_approach.png

diff --git a/public/develop/deployment/index.html b/public/develop/deployment/index.html
index 90d72496..82d7d858 100644
--- a/public/develop/deployment/index.html
+++ b/public/develop/deployment/index.html
@@ -377,6 +377,17 @@
         
       
       
+        <label class="md-nav__link md-nav__link--active" for="__toc">
+          
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+          <span class="md-nav__icon md-icon"></span>
+        </label>
+      
       <a href="./" class="md-nav__link md-nav__link--active">
         
   
@@ -387,6 +398,34 @@
 
       </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="#hardware-requirements" class="md-nav__link">
+    <span class="md-ellipsis">
+      Hardware requirements
+    </span>
+  </a>
+  
+</li>
+      
+    </ul>
+  
+</nav>
+      
     </li>
   
 
@@ -931,6 +970,23 @@
     
   
   
+    <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="#hardware-requirements" class="md-nav__link">
+    <span class="md-ellipsis">
+      Hardware requirements
+    </span>
+  </a>
+  
+</li>
+      
+    </ul>
+  
 </nav>
                   </div>
                 </div>
@@ -946,6 +1002,37 @@
 
 <h1 id="openslice-deployment">OpenSlice Deployment</h1>
 <p>This section is meant to guide the user through the installation of OpenSlice. </p>
+<h2 id="hardware-requirements">Hardware requirements</h2>
+<p>The complete environment consists of microservices deployed as docker containers. Portainer is also installed to monitor them at port 9000.</p>
+<p>If you would like to operate all APIs, OSOM, the Mysql Server, nginx, etc then you need at least:</p>
+<table>
+<thead>
+<tr>
+<th><strong>Minimum Hardware Requirements</strong></th>
+<th><strong>Recomended Hardware Requirements</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>4 CPU cores</td>
+<td>8 CPU cores</td>
+</tr>
+<tr>
+<td>8 GB RAM</td>
+<td>16 GB RAM</td>
+</tr>
+<tr>
+<td>20 GB storage</td>
+<td>40 GB storage</td>
+</tr>
+</tbody>
+</table>
+<p>(NOTE: Bugzilla or ELK are not included and we assume they run elsewhere)</p>
+<p>However, you may try the front facing services of OpenSlice with a minimum installation on a VM on a laptop with:</p>
+<ul>
+<li>2 cores</li>
+<li>4GB of RAM  </li>
+</ul>
 <p>Following, you may thorough guides depending on the installation type of your choice:</p>
 <ul>
 <li><a href="../deploymentCompose/">Installing via Docker Compose guide</a></li>
diff --git a/public/develop/images/global_approach.png b/public/develop/images/global_approach.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a929073b685fe03684bcea77fda51c760b98016
GIT binary patch
literal 225125
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

literal 0
HcmV?d00001

diff --git a/public/develop/index.html b/public/develop/index.html
index 123a7e10..b51adf8d 100644
--- a/public/develop/index.html
+++ b/public/develop/index.html
@@ -314,99 +314,70 @@
     </span>
   </a>
   
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#service-lifecycle-rules" class="md-nav__link">
-    <span class="md-ellipsis">
-      Service Lifecycle Rules
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#multidomain-scenarios-and-federation" class="md-nav__link">
-    <span class="md-ellipsis">
-      Multidomain scenarios and federation
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#live-demo" class="md-nav__link">
-    <span class="md-ellipsis">
-      Live Demo
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#video-demo" class="md-nav__link">
+    <nav class="md-nav" aria-label="Usage">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#an-end-to-end-e2e-service-orchestration-framework" class="md-nav__link">
     <span class="md-ellipsis">
-      Video demo
+      An end-to-end (E2E) service orchestration framework
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#installing" class="md-nav__link">
+        
+          <li class="md-nav__item">
+  <a href="#an-e2e-service-orchestration-workflow" class="md-nav__link">
     <span class="md-ellipsis">
-      Installing
+      An E2E service orchestration workflow
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#hardware-requirements" class="md-nav__link">
+        
+          <li class="md-nav__item">
+  <a href="#openslice-for-service-providers" class="md-nav__link">
     <span class="md-ellipsis">
-      Hardware requirements
+      OpenSlice for Service Providers
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#supported-apis" class="md-nav__link">
+        
+          <li class="md-nav__item">
+  <a href="#openslice-for-service-consumers" class="md-nav__link">
     <span class="md-ellipsis">
-      Supported APIs
+      OpenSlice for Service Consumers
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#source-code" class="md-nav__link">
-    <span class="md-ellipsis">
-      Source code
-    </span>
-  </a>
+        
+      </ul>
+    </nav>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#contributing" class="md-nav__link">
+  <a href="#whats-next" class="md-nav__link">
     <span class="md-ellipsis">
-      Contributing
+      What's next
     </span>
   </a>
   
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#social-media" class="md-nav__link">
+    <nav class="md-nav" aria-label="What's next">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#live-demo" class="md-nav__link">
     <span class="md-ellipsis">
-      Social Media
+      Live Demo
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
+        
+          <li class="md-nav__item">
   <a href="#history" class="md-nav__link">
     <span class="md-ellipsis">
       History
@@ -414,23 +385,19 @@
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#ecosystem" class="md-nav__link">
-    <span class="md-ellipsis">
-      Ecosystem
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
+        
+          <li class="md-nav__item">
   <a href="#citation" class="md-nav__link">
     <span class="md-ellipsis">
       Citation
     </span>
   </a>
   
+</li>
+        
+      </ul>
+    </nav>
+  
 </li>
       
     </ul>
@@ -1090,99 +1057,70 @@
     </span>
   </a>
   
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#service-lifecycle-rules" class="md-nav__link">
-    <span class="md-ellipsis">
-      Service Lifecycle Rules
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#multidomain-scenarios-and-federation" class="md-nav__link">
-    <span class="md-ellipsis">
-      Multidomain scenarios and federation
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#live-demo" class="md-nav__link">
-    <span class="md-ellipsis">
-      Live Demo
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#video-demo" class="md-nav__link">
+    <nav class="md-nav" aria-label="Usage">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#an-end-to-end-e2e-service-orchestration-framework" class="md-nav__link">
     <span class="md-ellipsis">
-      Video demo
+      An end-to-end (E2E) service orchestration framework
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#installing" class="md-nav__link">
+        
+          <li class="md-nav__item">
+  <a href="#an-e2e-service-orchestration-workflow" class="md-nav__link">
     <span class="md-ellipsis">
-      Installing
+      An E2E service orchestration workflow
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#hardware-requirements" class="md-nav__link">
+        
+          <li class="md-nav__item">
+  <a href="#openslice-for-service-providers" class="md-nav__link">
     <span class="md-ellipsis">
-      Hardware requirements
+      OpenSlice for Service Providers
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#supported-apis" class="md-nav__link">
+        
+          <li class="md-nav__item">
+  <a href="#openslice-for-service-consumers" class="md-nav__link">
     <span class="md-ellipsis">
-      Supported APIs
+      OpenSlice for Service Consumers
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#source-code" class="md-nav__link">
-    <span class="md-ellipsis">
-      Source code
-    </span>
-  </a>
+        
+      </ul>
+    </nav>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#contributing" class="md-nav__link">
+  <a href="#whats-next" class="md-nav__link">
     <span class="md-ellipsis">
-      Contributing
+      What's next
     </span>
   </a>
   
-</li>
-      
-        <li class="md-nav__item">
-  <a href="#social-media" class="md-nav__link">
+    <nav class="md-nav" aria-label="What's next">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#live-demo" class="md-nav__link">
     <span class="md-ellipsis">
-      Social Media
+      Live Demo
     </span>
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
+        
+          <li class="md-nav__item">
   <a href="#history" class="md-nav__link">
     <span class="md-ellipsis">
       History
@@ -1190,23 +1128,19 @@
   </a>
   
 </li>
-      
-        <li class="md-nav__item">
-  <a href="#ecosystem" class="md-nav__link">
-    <span class="md-ellipsis">
-      Ecosystem
-    </span>
-  </a>
-  
-</li>
-      
-        <li class="md-nav__item">
+        
+          <li class="md-nav__item">
   <a href="#citation" class="md-nav__link">
     <span class="md-ellipsis">
       Citation
     </span>
   </a>
   
+</li>
+        
+      </ul>
+    </nav>
+  
 </li>
       
     </ul>
@@ -1224,103 +1158,76 @@
                   
 
 
-  <h1>Introduction</h1>
-
 <p><img src="images/openslice_logo.png" alt="drawing" width="200"/></p>
 <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 Slice as a Service (NSaaS) following specifications from major SDOs including ETSI, TM Forum and GSMA. See more details <a href="https://osl.etsi.org/about/">here</a>.</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>
 <h2 id="usage">Usage</h2>
-<p>OpenSlice allows Vertical Customers to browse the available offered service specifications and also allows NFV developers to onboard and manage VNF and Network Service artifacts. It also supports TMFORUM OpenAPIs regarding Service Catalog Management, Ordering, Resource, etc.
-The following figure displays the usage of OpenSlice.</p>
-<p><a href="images/index_intro_architecture.png"><img alt="OpenSlice  usage" src="images/index_intro_architecture.png" /></a></p>
-<p>There are two portals offering UI friendly access to users:</p>
+<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><a href="images/global_approach.png"><img alt="OpenSlice  usage" src="images/global_approach.png" /></a></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>
+<h3 id="an-end-to-end-e2e-service-orchestration-framework">An end-to-end (E2E) service orchestration framework</h3>
+<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>The Services portal allows users to access services and service providers to design services. </li>
-<li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li>
+<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>
-<p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>
-<p>Service Specifications reside into Service Catalogs, grouped in Categories. OpenSlice offers a Service Orchestrator called <a href="architecture/osom/">OSOM</a>. OSOM instantiates Service Specifications by requesting Network Services from target MANOs/NFVOs. NFV artifacts reside into a VNF/NSD catalog and are onboarded to a target MANO/NFV Orchestrator. Service Specifications reference NSD from the VNF/NSD catalog. </p>
-<p>Customers make Service Orders and OpenSlice instantiates the requested Service Specifications of the 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. (See also <a href="service_inventory/">Service Inventory</a>)</p>
-<p><a href="images/service_specification_instantiation.png"><img alt="OpenSlice  Service Specification instantiation" src="images/service_specification_instantiation.png" /></a></p>
-<h2 id="service-lifecycle-rules">Service Lifecycle Rules</h2>
-<p>OpenSlice constains support for defining rules of services, affecting their behavior. See <a href="lcm/">LCM Rules</a>.</p>
-<h2 id="multidomain-scenarios-and-federation">Multidomain scenarios and federation</h2>
-<p>OpenSlice can be used to exchange service specifications/catalogs and make service orders between Organizations as the following figure displays.</p>
-<p><a href="images/multi-domain-organizations.png"><img alt="OpenSlice  Service Specification instantiation" src="images/multi-domain-organizations.png" /></a></p>
-<p>An Identity federation is also possible since our authentication service is based on Keycloak (see <a href="architecture/oauth/">OAuth</a>).</p>
-<p>See more on <a href="architecture/consumingServicesFromExternalPartners/">Consuming Services From External Partner Organizations</a>.</p>
-<h2 id="live-demo">Live Demo</h2>
+<h3 id="an-e2e-service-orchestration-workflow">An E2E service orchestration workflow</h3>
+<p>In general an E2E service orchestration workflow includes the following phases:</p>
 <ul>
-<li>OpenSlice demo: <a href="http://portal.openslice.io/">http://portal.openslice.io/</a></li>
-<li>OpenSlice Service Catalogs and ordering: <a href="http://portal.openslice.io/services/">http://portal.openslice.io/services/</a></li>
-<li>OpenSlice NFV Services onboarding: <a href="http://portal.openslice.io/nfvportal">http://portal.openslice.io/nfvportal</a><blockquote>
-<p>username=admin, password=openslice <br> or <br>username=admin, password=changeme</p>
-</blockquote>
-</li>
+<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>
-<h2 id="video-demo">Video demo</h2>
+<h3 id="openslice-for-service-providers">OpenSlice for Service Providers</h3>
+<p>OpenSlice is used by Service Provider to design Network Services, expose them in Service Catalogues and make them available for Service Order. 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><a href="https://youtu.be/KU8JPDFFl9A">https://youtu.be/KU8JPDFFl9A</a></li>
+<li>The Services portal allows Service Providers to design and expose services.</li>
+<li>The Resoruce 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 teting portal allows Service Providers to manage test artifacts</li>
+<li>The Products portal allows Service Providers to expose services as products</li>
 </ul>
-<hr />
-<h2 id="installing">Installing</h2>
-<p>See <a href="deployment/">Deployment/Installation</a>.</p>
-<hr />
-<h2 id="hardware-requirements">Hardware requirements</h2>
-<p>The complete environment consists of microservices deployed as docker containers. Portainer is also installed to monitor them at port 9000.</p>
-<p>If you would like to operate all APIs, OSOM, the Mysql Server, nginx, etc then you need at least:</p>
-<table>
-<thead>
-<tr>
-<th><strong>Minimum Hardware Requirements</strong></th>
-<th><strong>Recomended Hardware Requirements</strong></th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>4 CPU cores</td>
-<td>8 CPU cores</td>
-</tr>
-<tr>
-<td>8 GB RAM</td>
-<td>16 GB RAM</td>
-</tr>
-<tr>
-<td>20 GB storage</td>
-<td>40 GB storage</td>
-</tr>
-</tbody>
-</table>
-<p>(NOTE: Bugzilla or ELK are not included and we assume they run elsewhere)</p>
-<p>However, you may try the front facing services of OpenSlice with a minimum installation on a VM on a laptop with:</p>
+<h3 id="openslice-for-service-consumers">OpenSlice for Service Consumers</h3>
+<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>2 cores</li>
-<li>4GB of RAM  </li>
-</ul>
-<h2 id="supported-apis">Supported APIs</h2>
-<p>Quick overview of the supported APIs through our Swagger links:</p>
-<ul>
-<li><a href="http://portal.openslice.io/tmf-api/swagger-ui/index.html">TMF APIs</a></li>
-<li><a href="http://portal.openslice.io/osapi/swagger-ui/index.html">API for VNF/NSD management</a></li>
+<li>The Services portal allows Service Consumers to select and order predefined services.</li>
+<li>The Resoruce 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>
-<h2 id="source-code">Source code</h2>
-<p>OpenSlice source code is available at <a href="https://labs.etsi.org/rep/osl/code">OSL GitLab repository</a>.</p>
-<h2 id="contributing">Contributing</h2>
-<p>You may contribute following the guidelines at <a href="contributing/developing/">Contributing page</a>.</p>
-<h2 id="social-media">Social Media</h2>
+<p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>
+<h1 id="whats-next">What's next</h1>
+<p>See <a href="deployment/">Deployment</a> of OpenSlice</p>
+<p>See <a href="architecture/architecture/">Architecture</a> of OpenSlice</p>
+<h2 id="live-demo">Live Demo</h2>
+<p>Check a live demo of OpenSlice in the following pages:</p>
+<p>(username=admin, password=openslice <br> or <br>username=admin, password=changeme)</p>
 <ul>
-<li><a href="https://twitter.com/OpensliceOSS">Twitter</a></li>
-<li><a href="https://openslice.slack.com">Slack</a></li>
+<li>OpenSlice demo: <a href="http://portal.openslice.io/">http://portal.openslice.io/</a></li>
+<li>OpenSlice Service Catalogs and ordering: <a href="http://portal.openslice.io/services/">http://portal.openslice.io/services/</a></li>
+<li>OpenSlice NFV Services onboarding: <a href="http://portal.openslice.io/nfvportal">http://portal.openslice.io/nfvportal</a><blockquote></blockquote>
+</li>
 </ul>
 <h2 id="history">History</h2>
 <ul>
 <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project <a href="https://5ginfire.eu">5GinFIRE</a> by University of Patras, Greece</li>
 <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project <a href="https://5g-vinni.eu/">5G-VINNI</a> by University of Patras, Greece</li>
 <li>OpenSlice has been a part off OSM's OSS/BSS ecosystem</li>
+<li>OpenSlice is now an ETSI SDG Gropup since 2023</li>
 </ul>
-<p><a href="https://osm.etsi.org/wikipub/index.php/OSS_BSS"><img alt="Part of OSM Ecosystem" src="images/osm_ecosystem_ossbss.png" /></a></p>
-<h2 id="ecosystem">Ecosystem</h2>
-<p>Discover the current OpenSlice ecosystem <a href="https://osl.etsi.org/ecosystem/">here</a>.</p>
 <h2 id="citation">Citation</h2>
 <p>Please cite our <a href="https://arxiv.org/abs/2102.03290">![paper]</a> if you use Openslice</p>
 <pre><code>
diff --git a/public/develop/search/search_index.json b/public/develop/search/search_index.json
index f7aa2274..7d57065b 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 Slice as a Service (NSaaS) following specifications from major SDOs including ETSI, TM Forum and GSMA. See more details here.</p>"},{"location":"#usage","title":"Usage","text":"<p>OpenSlice allows Vertical Customers to browse the available offered service specifications and also allows NFV developers to onboard and manage VNF and Network Service artifacts. It also supports TMFORUM OpenAPIs regarding Service Catalog Management, Ordering, Resource, etc. The following figure displays the usage of OpenSlice.</p> <p></p> <p>There are two portals offering UI friendly access to users:</p> <ul> <li>The Services portal allows users to access services and service providers to design services. </li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p> <p>Service Specifications reside into Service Catalogs, grouped in Categories. OpenSlice offers a Service Orchestrator called OSOM. OSOM instantiates Service Specifications by requesting Network Services from target MANOs/NFVOs. NFV artifacts reside into a VNF/NSD catalog and are onboarded to a target MANO/NFV Orchestrator. Service Specifications reference NSD from the VNF/NSD catalog. </p> <p>Customers make Service Orders and OpenSlice instantiates the requested Service Specifications of the 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. (See also Service Inventory)</p> <p></p>"},{"location":"#service-lifecycle-rules","title":"Service Lifecycle Rules","text":"<p>OpenSlice constains support for defining rules of services, affecting their behavior. See LCM Rules.</p>"},{"location":"#multidomain-scenarios-and-federation","title":"Multidomain scenarios and federation","text":"<p>OpenSlice can be used to exchange service specifications/catalogs and make service orders between Organizations as the following figure displays.</p> <p></p> <p>An Identity federation is also possible since our authentication service is based on Keycloak (see OAuth).</p> <p>See more on Consuming Services From External Partner Organizations.</p>"},{"location":"#live-demo","title":"Live Demo","text":"<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 <p>username=admin, password=openslice  or username=admin, password=changeme</p> </li> </ul>"},{"location":"#video-demo","title":"Video demo","text":"<ul> <li>https://youtu.be/KU8JPDFFl9A</li> </ul>"},{"location":"#installing","title":"Installing","text":"<p>See Deployment/Installation.</p>"},{"location":"#hardware-requirements","title":"Hardware requirements","text":"<p>The complete environment consists of microservices deployed as docker containers. Portainer is also installed to monitor them at port 9000.</p> <p>If you would like to operate all APIs, OSOM, the Mysql Server, nginx, etc then you need at least:</p> Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 20 GB storage 40 GB storage <p>(NOTE: Bugzilla or ELK are not included and we assume they run elsewhere)</p> <p>However, you may try the front facing services of OpenSlice with a minimum installation on a VM on a laptop with:</p> <ul> <li>2 cores</li> <li>4GB of RAM  </li> </ul>"},{"location":"#supported-apis","title":"Supported APIs","text":"<p>Quick overview of the supported APIs through our Swagger links:</p> <ul> <li>TMF APIs</li> <li>API for VNF/NSD management</li> </ul>"},{"location":"#source-code","title":"Source code","text":"<p>OpenSlice source code is available at OSL GitLab repository.</p>"},{"location":"#contributing","title":"Contributing","text":"<p>You may contribute following the guidelines at Contributing page.</p>"},{"location":"#social-media","title":"Social Media","text":"<ul> <li>Twitter</li> <li>Slack</li> </ul>"},{"location":"#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 off OSM's OSS/BSS ecosystem</li> </ul>"},{"location":"#ecosystem","title":"Ecosystem","text":"<p>Discover the current OpenSlice ecosystem here.</p>"},{"location":"#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use Openslice</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</code></pre>"},{"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":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p> <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/#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":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"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":"nfvcatalogs/","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":"nfvcatalogs/#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":"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 platformssynchronization</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":"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":"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/nfvweb/","title":"Openslice NFV Web Portal","text":"<p>The NFV Web Portal offers a domain-specific UI to manage NFV Services.</p> <p>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>"},{"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/tmfweb/","title":"Openslice TMF Web Portal","text":"<p>Openslice comprises of a web landing page that navigates to the respective TMF Portal.</p> <ul> <li>Services Portal</li> <li>Products Portal</li> <li>Testing Portal</li> <li>Resources Portal</li> </ul> <p>The landing page and the TMF portals (Services, Products, Testing, Resources) are written in Angular and are maintained under the same Angular project.</p> <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>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> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure.</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>From the landing page, the user can also navigate towards the NFV portal. See NFV WEB.</p>"},{"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":""}]}
\ 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 Provider to design Network Services, expose them in Service Catalogues and make them available for Service Order. 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 Resoruce 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 teting 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 Resoruce 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":"#whats-next","title":"What's next","text":"<p>See Deployment of OpenSlice</p> <p>See Architecture of OpenSlice</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":"#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 off OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Gropup since 2023</li> </ul>"},{"location":"#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use Openslice</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</code></pre>"},{"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":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#hardware-requirements","title":"Hardware requirements","text":"<p>The complete environment consists of microservices deployed as docker containers. Portainer is also installed to monitor them at port 9000.</p> <p>If you would like to operate all APIs, OSOM, the Mysql Server, nginx, etc then you need at least:</p> Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 20 GB storage 40 GB storage <p>(NOTE: Bugzilla or ELK are not included and we assume they run elsewhere)</p> <p>However, you may try the front facing services of OpenSlice with a minimum installation on a VM on a laptop with:</p> <ul> <li>2 cores</li> <li>4GB of RAM  </li> </ul> <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/#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":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"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":"nfvcatalogs/","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":"nfvcatalogs/#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":"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 platformssynchronization</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":"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":"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/nfvweb/","title":"Openslice NFV Web Portal","text":"<p>The NFV Web Portal offers a domain-specific UI to manage NFV Services.</p> <p>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>"},{"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/tmfweb/","title":"Openslice TMF Web Portal","text":"<p>Openslice comprises of a web landing page that navigates to the respective TMF Portal.</p> <ul> <li>Services Portal</li> <li>Products Portal</li> <li>Testing Portal</li> <li>Resources Portal</li> </ul> <p>The landing page and the TMF portals (Services, Products, Testing, Resources) are written in Angular and are maintained under the same Angular project.</p> <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>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> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure.</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>From the landing page, the user can also navigate towards the NFV portal. See NFV WEB.</p>"},{"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":""}]}
\ No newline at end of file
diff --git a/public/develop/sitemap.xml b/public/develop/sitemap.xml
index 4005b419..67eeb4bd 100644
--- a/public/develop/sitemap.xml
+++ b/public/develop/sitemap.xml
@@ -2,117 +2,117 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
          <loc>https://osl.etsi.org/develop/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/alarms_actions/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/catalogs/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/deployment/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/deploymentCompose/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/deploymentK8s/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/lcm/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/nfvcatalogs/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/nfvoconfig/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_inventory/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/architecture/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/centrallog/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/consumingServicesFromExternalPartners/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/issuemgt/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/messagebus/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/nfvapi/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/nfvweb/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/oauth/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/osom/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/tmfapi/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/tmfweb/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/contributing/developing/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/contributing/wishlist/</loc>
-         <lastmod>2024-06-28</lastmod>
+         <lastmod>2024-07-01</lastmod>
          <changefreq>daily</changefreq>
     </url>
 </urlset>
\ No newline at end of file
diff --git a/public/develop/sitemap.xml.gz b/public/develop/sitemap.xml.gz
index 5337e55d24ad1c8c7629e3bdff7a516c54cd9165..0d22079fb687a6468bcaab8cbe19bab79ed18c07 100644
GIT binary patch
literal 408
zcmV;J0cZXniwFpS@quOn|8r?{Wo=<_E_iKh0M(aGPs1<_hVT4}srNM<LgGVRIUu-j
zK?2SwOT9Ky5|`L**}uoz0F5ITl;qOHa;>NC+q`Lg`{CVUf=Cv_x>%J}v4CK(wV_)V
zuP+bFtKzmftH<aFcp=Gw)<w@e+$c5Ab4ixL>w!v)og&lAg49<~RpoWjoGoPR3mj*M
zQ9Crvz6wbhBv%5HJ(Or+0*8aD)js9)4o&Q_ZO*Ini)D4WtX7ip6+1~Yy$&60BfK}Q
zwr*FelgJT8{jmI*N;@4ry=lYJE=m;AXx0w9RPkCE9PT^>P9E?M{eT3?b3R_B`m&wz
ziIRowl=z1tglI5qZI>t@L7c3CHyb7qA;w**yLL3aIFjKp!tX@}yhd6ZwG*9YK`XX6
zdO18iAGJXb5&iuKLk!wI>BvEj8aX_OB^tqZoCB)|BHh7e%%Zcht?9vLLOR1H2U64{
z_gR1v`W!gfZ!;08kftkAu>+2FGqO0scW^(=fOfXjJ4^py0EdhGT{oYV9@YGf4*&p!
CTfjL0

literal 408
zcmV;J0cZXniwFn+{e5Nv|8r?{Wo=<_E_iKh0M(blPQx$^hVMMZ)ccw-Av93e9S~f&
zAOUBTrCu8;iA(IZ?CtS3K;y^-CAl=QT<fd*H-B1fKD?Wa5XoX#7nkLtm_abu*wC(v
z*O!O+s@T*Q)es#4&m=j}y6BkuTcxIHD#<c<-BXFNRb)C@kopR$MR`-y7c&`$0;kz=
zR1Qsjs6tW($(6ulk0lxy!C|i|bx1kCLlb*!>g8g2HD6rMmn%v6ik+pIPKOqD5#H-Y
zTeq*&S>%MGepvoYrJatR-n3z97bOa5G;4=#s(20b4)-1cCl7dszDI)OIUiT4zHDcF
zqGVw=CjOxaAsP%j+a?M~5Jzj^&4y7#h;g6lt{qJ$j%0X<@OzN~uaVY9?L?<p(26Y%
zUJeh>CvDI}M1TLm5QBD4I&zSsMh*{Ri3ad3=fLWLNVl*ZvgoXAYr40YkWR48ffV(?
zT^68(J_k<ryG%qXr0I%O?0}=)4lIuF9Xw1kpq(sr&eA^^!0{q~*YzhDr*(pj4*&qt
C`o6gU

-- 
GitLab