From 961c0c61fa7260bab7d1f5788ffdc8b5c41276ef Mon Sep 17 00:00:00 2001
From: Dimitrios <dimit.giannopoulos@upnet.gr>
Date: Sat, 6 Jul 2024 07:55:56 +0000
Subject: [PATCH] Deployed 5a5bd8f to develop in public with MkDocs 1.6.0 and
 mike 2.1.2

---
 public/develop/404.html                       |    2 +-
 .../OpenSlice_deployment_examples/index.html  |    2 +-
 public/develop/alarms_actions/index.html      |    2 +-
 .../CRIDGE/CRIDGEforDevelopers/index.html     |    4 +-
 .../architecture/architecture/index.html      |    2 +-
 .../architecture/centrallog/index.html        |    2 +-
 .../index.html                                |    2 +-
 .../develop/architecture/issuemgt/index.html  |    2 +-
 .../architecture/messagebus/index.html        |    2 +-
 public/develop/architecture/nfvapi/index.html |    2 +-
 public/develop/architecture/oauth/index.html  |    2 +-
 public/develop/architecture/osom/index.html   |    2 +-
 public/develop/architecture/tmfapi/index.html |    2 +-
 public/develop/catalogs/index.html            |    2 +-
 public/develop/config_intro/index.html        |    2 +-
 .../contributing/developing/index.html        |    2 +-
 .../develop/contributing/wishlist/index.html  |    2 +-
 public/develop/deployment/index.html          |    2 +-
 public/develop/deploymentCompose/index.html   |    2 +-
 public/develop/deploymentK8s/index.html       |    2 +-
 public/develop/etsi_osl/index.html            |    2 +-
 public/develop/history/index.html             |    2 +-
 public/develop/index.html                     |   22 +-
 public/develop/lcm/index.html                 |    2 +-
 public/develop/naas/exposed_apis/index.html   |    2 +-
 public/develop/naas/gst_to_gsma/img01.png     |  Bin 0 -> 376002 bytes
 public/develop/naas/gst_to_tmf/index.html     | 2886 +++++++++++++++++
 public/develop/naas/introduction/index.html   |    4 +-
 public/develop/naas/lcm_intro/index.html      |    6 +-
 .../develop/naas/lcm_rules_intro/index.html   |    2 +-
 public/develop/naas/nfv/intro/index.html      |    2 +-
 .../develop/naas/nfv/nfvcatalogs/index.html   |    2 +-
 .../develop/naas/nfv/nfvservices/index.html   |    2 +-
 .../develop/naas/resource_catalog/index.html  |    8 +-
 .../naas/resource_inventory/index.html        |    2 +-
 public/develop/naas/resource_spec/index.html  |    2 +-
 .../develop/naas/service_catalog/index.html   |   12 +-
 .../develop/naas/service_inventory/index.html |   18 +-
 .../develop/naas/service_ordering/index.html  |   56 +-
 public/develop/naas/service_spec/index.html   |   12 +-
 public/develop/naas/so_intro/index.html       |   77 +-
 .../index.html                                |    2 +-
 .../so_servicespec_to_services_nfv/index.html |    2 +-
 public/develop/nfvoconfig/index.html          |    2 +-
 .../ole_keycloak_management/index.html        |    2 +-
 public/develop/portals_intro/index.html       |    2 +-
 .../role_keycloak_management/index.html       |    2 +-
 public/develop/search/search_index.json       |    2 +-
 .../index.html                                |    2 +-
 .../develop/service_design/intro/index.html   |   12 +-
 .../ExposingKubernetesResources/index.html    |    4 +-
 .../index.html                                |    2 +-
 .../kubernetes/helm/design_helmaas/index.html |    2 +-
 .../kubernetes/intro/index.html               |    2 +-
 .../nfv/design_nfv_services/index.html        |    2 +-
 .../develop/service_design_intro/index.html   |    2 +-
 public/develop/service_inventory/index.html   |    2 +-
 .../ordering_services/index.html              |    2 +-
 public/develop/sitemap.xml                    |  117 +-
 public/develop/sitemap.xml.gz                 |  Bin 744 -> 755 bytes
 public/develop/terminology/index.html         |    2 +-
 public/develop/under_construction/index.html  |    2 +-
 62 files changed, 3169 insertions(+), 161 deletions(-)
 create mode 100644 public/develop/naas/gst_to_gsma/img01.png
 create mode 100644 public/develop/naas/gst_to_tmf/index.html

diff --git a/public/develop/404.html b/public/develop/404.html
index 9ab26814..1bf979f0 100644
--- a/public/develop/404.html
+++ b/public/develop/404.html
@@ -903,7 +903,7 @@
   
   
     <li class="md-nav__item">
-      <a href="/develop/./naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="/develop/naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/OpenSlice_deployment_examples/index.html b/public/develop/OpenSlice_deployment_examples/index.html
index a603a14c..5ff33244 100644
--- a/public/develop/OpenSlice_deployment_examples/index.html
+++ b/public/develop/OpenSlice_deployment_examples/index.html
@@ -1028,7 +1028,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/alarms_actions/index.html b/public/develop/alarms_actions/index.html
index 238d6b6c..043f0029 100644
--- a/public/develop/alarms_actions/index.html
+++ b/public/develop/alarms_actions/index.html
@@ -910,7 +910,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/CRIDGE/CRIDGEforDevelopers/index.html b/public/develop/architecture/CRIDGE/CRIDGEforDevelopers/index.html
index 7f71925a..63045962 100644
--- a/public/develop/architecture/CRIDGE/CRIDGEforDevelopers/index.html
+++ b/public/develop/architecture/CRIDGE/CRIDGEforDevelopers/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2917,7 +2917,7 @@ These scenarios may include service bundles that involve multiple systems, such
 <li>It sends to the message bus the current resource for creation or update to the TMF service inventory</li>
 </ul>
 <hr />
-<h2 id="whats-next">What's next?</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>See examples of exposing operators via OpenSlice:<ul>
 <li><a href="../../../service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/">Exposing Kubernetes Operators as a Service : Offering "Calculator as a Service" through OpenSlice</a></li>
diff --git a/public/develop/architecture/architecture/index.html b/public/develop/architecture/architecture/index.html
index cb880ff3..70450f72 100644
--- a/public/develop/architecture/architecture/index.html
+++ b/public/develop/architecture/architecture/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/centrallog/index.html b/public/develop/architecture/centrallog/index.html
index 53c80727..316a7e46 100644
--- a/public/develop/architecture/centrallog/index.html
+++ b/public/develop/architecture/centrallog/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/consumingServicesFromExternalPartners/index.html b/public/develop/architecture/consumingServicesFromExternalPartners/index.html
index b42ca428..85f15968 100644
--- a/public/develop/architecture/consumingServicesFromExternalPartners/index.html
+++ b/public/develop/architecture/consumingServicesFromExternalPartners/index.html
@@ -969,7 +969,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/issuemgt/index.html b/public/develop/architecture/issuemgt/index.html
index 3477f698..cb2a4a09 100644
--- a/public/develop/architecture/issuemgt/index.html
+++ b/public/develop/architecture/issuemgt/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/messagebus/index.html b/public/develop/architecture/messagebus/index.html
index b716d9f1..325eaf33 100644
--- a/public/develop/architecture/messagebus/index.html
+++ b/public/develop/architecture/messagebus/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/nfvapi/index.html b/public/develop/architecture/nfvapi/index.html
index e41b9cba..b0643361 100644
--- a/public/develop/architecture/nfvapi/index.html
+++ b/public/develop/architecture/nfvapi/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/oauth/index.html b/public/develop/architecture/oauth/index.html
index 4d262a15..86975efc 100644
--- a/public/develop/architecture/oauth/index.html
+++ b/public/develop/architecture/oauth/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/osom/index.html b/public/develop/architecture/osom/index.html
index c91ee597..37930ff2 100644
--- a/public/develop/architecture/osom/index.html
+++ b/public/develop/architecture/osom/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/architecture/tmfapi/index.html b/public/develop/architecture/tmfapi/index.html
index 4bfe5ccb..2a3ca15c 100644
--- a/public/develop/architecture/tmfapi/index.html
+++ b/public/develop/architecture/tmfapi/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/catalogs/index.html b/public/develop/catalogs/index.html
index 7f2ae646..d8b21a90 100644
--- a/public/develop/catalogs/index.html
+++ b/public/develop/catalogs/index.html
@@ -910,7 +910,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/config_intro/index.html b/public/develop/config_intro/index.html
index cf6a4827..61f125f3 100644
--- a/public/develop/config_intro/index.html
+++ b/public/develop/config_intro/index.html
@@ -967,7 +967,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/contributing/developing/index.html b/public/develop/contributing/developing/index.html
index 11b714ac..81c248ed 100644
--- a/public/develop/contributing/developing/index.html
+++ b/public/develop/contributing/developing/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/contributing/wishlist/index.html b/public/develop/contributing/wishlist/index.html
index 3e565634..772859d6 100644
--- a/public/develop/contributing/wishlist/index.html
+++ b/public/develop/contributing/wishlist/index.html
@@ -910,7 +910,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/deployment/index.html b/public/develop/deployment/index.html
index 95592dd6..8f27bb8f 100644
--- a/public/develop/deployment/index.html
+++ b/public/develop/deployment/index.html
@@ -967,7 +967,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/deploymentCompose/index.html b/public/develop/deploymentCompose/index.html
index 2200844a..e9a1ed05 100644
--- a/public/develop/deploymentCompose/index.html
+++ b/public/develop/deploymentCompose/index.html
@@ -1273,7 +1273,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/deploymentK8s/index.html b/public/develop/deploymentK8s/index.html
index e6fb0439..49340c4b 100644
--- a/public/develop/deploymentK8s/index.html
+++ b/public/develop/deploymentK8s/index.html
@@ -967,7 +967,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/etsi_osl/index.html b/public/develop/etsi_osl/index.html
index 5d31f5d5..d4907455 100644
--- a/public/develop/etsi_osl/index.html
+++ b/public/develop/etsi_osl/index.html
@@ -926,7 +926,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/history/index.html b/public/develop/history/index.html
index f4aefe69..c1fda89d 100644
--- a/public/develop/history/index.html
+++ b/public/develop/history/index.html
@@ -970,7 +970,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/index.html b/public/develop/index.html
index ac2dd9bb..b2f2bb1e 100644
--- a/public/develop/index.html
+++ b/public/develop/index.html
@@ -368,9 +368,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -1019,7 +1019,7 @@
   
   
     <li class="md-nav__item">
-      <a href="naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2780,9 +2780,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2863,11 +2863,13 @@ There are various portals offering UI friendly access to users acting as Service
 <li>OpenSlice NFV Services onboarding: <a href="http://portal.openslice.io/nfvportal">http://portal.openslice.io/nfvportal</a><blockquote></blockquote>
 </li>
 </ul>
-<h1 id="whats-next">What's next</h1>
-<p>Installing OpenSlice. See the <a href="deployment/">Deployment</a> of OpenSlice</p>
-<p>Lear more on <a href="naas/introduction/">how OpenSlice supports Network as a Service(NaaS)</a></p>
-<p>Who is implementing OpenSlice? See <a href="https://osl.etsi.org/">OSL ETSI SDG</a></p>
-<p>How OpenSlice works? See the <a href="architecture/architecture/">Architecture</a> of OpenSlice</p>
+<h1 id="probe-further">Probe further</h1>
+<ul>
+<li>Installing OpenSlice. See the <a href="deployment/">Deployment</a> of OpenSlice</li>
+<li>Learn more on [how OpenSlice supports Network as a Service(NaaS)](./naas/introduction</li>
+<li>Who is implementing OpenSlice? See <a href="https://osl.etsi.org/">OSL ETSI SDG</a></li>
+<li>How OpenSlice works? See the <a href="architecture/architecture/">Architecture</a> of OpenSlice</li>
+</ul>
 
 
 
diff --git a/public/develop/lcm/index.html b/public/develop/lcm/index.html
index ed70563a..53b62e30 100644
--- a/public/develop/lcm/index.html
+++ b/public/develop/lcm/index.html
@@ -910,7 +910,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/exposed_apis/index.html b/public/develop/naas/exposed_apis/index.html
index 5104d15a..242bee3b 100644
--- a/public/develop/naas/exposed_apis/index.html
+++ b/public/develop/naas/exposed_apis/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/gst_to_gsma/img01.png b/public/develop/naas/gst_to_gsma/img01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f72c1855e08903dfcca60a213b88a106775b8130
GIT binary patch
literal 376002
zcmbrmbx<7N*FJ~@3GOZdg1bwQ;KAJ;g1ZL>3y^^X4;tJChr!+5-GaNjJ3D;d{mSpH
zt*x!vKNzNa`rhfe_vmw;(?69JrBRWHkf5NTP-VVIs6s)(*F!<U0ubRLXUMRUVIlvZ
zT~(#Upvp!`_8|xFEJYPWp`a?Fke^K8Ajj{WzUa6@L7{cM{XzFR7JP+*dIiZyh^l`x
zJX%ID#_1tKID1_N-M+)}J|(4}ES>~_Cqc!TnIAsLV!nfpDY`16LlhK+%auKCNsNa2
z{%#U*;;`bEvRvLRN6X%R3vg^{VXkVba^*E?P0>k<4q)#kFbn_BONCajp_lo8op}4`
zD83z<<^Q~n{YG{j3je=HLM{Y=oC3oBGuJ=wT2%Skd;X8FVDB}gCs{N7U*7@7L38?F
zLo2k95bFQe(0Rrmu=@XN=uv#<|Hs?g3zqn!lql5Xxmnlt61*~sCtyx!c67b-PKeT2
z3fL-0U{)xV!HrOuz%2`|nEX`c_%|g|7<*@rz|C$2Mj@Fe!l?gW_fx?u3xw4tSGps?
zZ%hB~xkky`2>D@-nv-0_m;`7DPTDCIB__1KvpgS=s7*fO&VPtJ)Vl#z#Ry{qFn|5Z
zi0WI~H)50{{MQQJ&<r>Q*lq<o_upP)`2<k9M4|Q0A4U)@46PHPWq#Dp+_muNtqfp9
z*@JUzMz-9afmP98t>jJ3QGaD>7ZQB(A;442C}jHg&dsN6f!@^%wi$+J(S?6;a56ip
zk#4Ci+Jt`*bLMjm2&-Tcg)V!kkLsPwFC$*!Z|_<8hNk*lg|mWq=fn4(Rj=TU`~M>j
zPYBQ~-lph6pMvv-eY~T*QLg!^b=>veM5--Xl{CK;K}~L1nE8?IKf;x8|B^zcUyC-*
zKQC?>yR>dbVXV5NVPQ?ktRxvQXv|0|E)dzmoEcj?M+nt)w<*Rt(#GXH`IjKx>z`RO
zLq;`=w9-hjs;UwW1kIfT@4S_zufaLh3YFL3US#*e%Ks9c3cC+su=*B=U|pwIXQF1F
z;ebATQe!jnG&+4;^6p9eQnW{+`&_Sw8NQmLo-db*<<|PhJSR7kk6VHIG<!DgqNChK
zRJ(P)#=8upR9e=23J*vPwc$Z(5rV3}2vKEKl9-7apW@e*>q4K>A+kN>txmpgGE*S5
zq&50u7pUSyx6Z_@1u&TKCPi`N{l56CLG_ujl=YB;S>}oAcXw`MwTIT0KI06i%DZc}
ztDl?nU%~>Jil>sV-8@j?k<4lTFA3UlN+-z3l5hID^D<p`+HD8zaXoge#u-arZ%Zqo
zM=TLcq`xx^ocr}seko7iZVoK_%FO5CfYeuuYJ7}?P`?vsA8S$W_=0wX)FhTTewIk)
zW`{6;LjX6H(FO!WVV#FT<h0^704+vU;Q%E?_j+x<f?R(AH|7&dUyc9|tzAk@pd9$Y
zsUSg3H!j&YKA=pSo6p?_DTIgH<hZ{JhvVPdTX95%469Fr7zZ>P`!%jdA9jHoY)~vv
zo)AL%u{r|(2*EADw<d60Zwf#J!v^2T;n-2(3OkSE5yO*XK0Pi4C=`EJwAd?i37_<;
zA3)0-vOWOd#JKMlcu72<vDxAj>sIL^Q>Ydq)myZZZgbO`vre26WDZm6LgAfvcZ3ZQ
z=*g@D`C6sProe-gb`xFHC?QLl;4wX<Q)G>n_W5eR=>n@M(%t0Pn2I&g|0+gA#LlLL
zTI-?W^-}=BY5pXU_igiudj76Z+eayoUu2j{5&MC8sY8D0+_c*?c?pKD(hxl=x37K6
z;J?fSd$0C`xk<nfqVKYWQ^6X1Hyow+tt4W7N1lhle0*i>Y@euhe9+KSj1%4FhqOPa
zc8z|4`l~1*YKt^Zgfp-_4fJW0PKE-=hGsV6rz%J+A}^u(VIqN-(T4pEk4iYrEtn3a
zm*PfG%zQVeP<<>lCfi?UtLF%_7|(e0@xc;)r{Z+q+_7C0t<V?&NMeK(Zg6XNf8T9A
zm=U^M(W9n)C)z_{i?czxJuZ$0n25|LFd_7@i?6F^00rKatdNH5Gtzbx>ifWwUnGPK
zm7K<$&O+l{JrjHRzhaGEyU6Idbdf<MW7rtgU<+4*yn&@J+s&~J_VKrR-6T4Tov}tP
z%8^Zj-0A5DmsixJ&SBMO^8k%lzq6$pI5?jd(GF<@m9=4pEdosh_(GytAo#0PVfv^J
z-l$ruWcqT|+EPJg9Q;h0_Z~62SQ)9@I)4tYooj&ziF1HLV%C|!9RiYY^ki!}8o!7=
z&CGzh)_>%TJ%L>ZXD!>vr>VWw)<C;Kr_09-U95FJGKrvFxdP^hNIe+s3J7CpZgTt~
zEnyVtVI$sHD<7rg*KUYH0}R`E)WkYcN+Y+i5kIeSA}o&rQG10ydA$<(`&}AI6AdN=
zH+GoD=IzZ8I=l0PxO6w42JQ$yofEixdh(7^OLu~$G!wc@JpI<>;8f1V&HyXxPnOzq
zC8!~I*Cs~vA#P;nV=NQfOfZkNlNWioCjI-+hehVb$21ujZg4}Lt>=2>E|IW;MV<C9
z@>?W}IJIy~nVy${_J=2DckX0M$y?Er8x}$konlQfEGneLXgNg*zoi1zf!5}~1IM`K
zE>Fsf42f&YCKspjF?|0@qlxU>q6Y4=n&mcDp`euAjPp0P7rEHiGrho+k;=-^%ep7$
z4PuEEiIWN$tF=KNrEmq?i(2j{ska?wvFbykl@fJispt@p6yzsx+X4OH$H;{P)t)<5
zA6VGpiqH}rTZ4D&3{1=<$7a6%$G9>*SJJiPB5xHT^a0_F$5Swx%!w(%<dSzr6an@s
z^SotfdRmMhb~waBSU-0!)3uZQn7`&c|GGyR3|{;Z?WKot88_MZGg>rbZ9wbwb9dC>
zyLo;w^2c{ELw;iOOBoo>+=ybz(c!go*%6>kLB3#1`^7F=BTGSpZ|^(T(3&)l*R>ZV
z7bt%iYI-x$Pn}TuEQtkYTqLS-9qWho8PHNa1%9$yto@<3OWD4Ojd(PzBHUYbU6(ba
zfu?BI)WKuIC-vq}%qxL>02mc5vVrSxg%q0d+Jqu8C8c?uQkEG5DGBn%fcizzNnJhd
zIXd{XQy~fPGklbbX2<g+73Nc)xU~WFd`r9>nIEqKE}lEZ&?+Je?8^6uruXb}ZS6tL
z*XQMzl-<FNon<ZRtF?3=?Z33N{l{z&$Yn4gI;mt(!`dy(2H8`1ez+i_tTPNjME#us
zE9P5Na@dBtScfF*I)(u_;E~6avgXAez6De5TqqF0J{dQAk?#=5vcmLYTVl8}2CUGD
zmN-egHY1I}NBwxEEyjFgLn*Ixv#w^sQ<0ma*eK_fsOP1$086Xa$H}J)meU)l%PKxT
zVaV+TV1_pN6Zcw9Twq;pehTIHB9jtl(QbRjD*>51KcZ1SNFln-c7*B!5NS-{im_&l
zwIb6W#wgyxMONY&R$k18Ljif!79hv<y7~w%usPnuXiTPv0Zef)Z%(jTlAA35;h_oh
zo3<Gg%uZTRtEgOk^D2x-56O0%8=A*B;p8Q4p!#l~%(Zt-WjPDw%>4#KC$D~Rc}2Vh
z`Uf9>w&-FEyA=kiH0J-rEdQ8X(Evs?F(V>01;+M4IE)w?ZFeG++p)*?3Lx@u#Uzc_
zN}%|&OZlwYDZN4+BWYSX$3%1E;OB^MgT&tKaGl>yDdfu&Yje+j(?sAa>rU39Q&J2I
zSTkBT^@p$t|HfNf6x$W+Vzv%aTJW+@<^uDRUkj4jnVe;_XXdJvEJKqq?sV8*3V!qZ
zOW<v-mzG0Y@{3R9GNTz4;%;s(luKzanl3R+$wI^})5vdH4m%q)Vdwe3Xl(zL3l;K}
zUg(rvm__tm?{!M!gfnadi>?S=#+doo&hO;!ddOJmuijPos!5k2yg#;tZE0$HB4JIs
z?DU$|I?HWz8u`el;rSa+peuR~8Q$xg_`f|bd+(&QeaxVQ6oJiL;If|N*0*RDOX_-g
zBKTYDu62QW%#!UsZT`+O1qE$<(3&!m_&XY@pS^?>+528(Hr@2}({Ve9Emfip@8XDO
zgGt@4g4}c7hiYWJ&*o~_=i1+=cS?Zae0C9PMM%1j;WbrC6(2rF4*mOzFGe%cRrQk*
z(@WehJMn)Oz(vM=CWtCj@P$B3yQ9$;z5c3*W=4PlB3pRuE7Q2i2Yjr2@<ixSS*RwY
zzIYVadF^etD8Vm&pIYI$)C}^bf3QZ|x_C|Q&s<N|*7C@XNWI1<5QDt`6uGJ)nkpHH
z4OfJP^83K33?)!HJ=GyDyO7beG@}0}crvq29DruQe&^EB>dZZlR|OBlN?~_{j+oqx
zA!@`THr@?~sN;&^91~Ec3p=kxPnQ<0;=mZ@_%ZA|;dvL-;IW;oUUKNq-wAy(uCh}E
zHQ58q*7RBSsU~yl_5^}ks}15tO%z8LGGQ5TUEfZ>R}ZIR<Z|E)Ag2ivbq*3~)-VqE
zc1^oRTgHhW<htz%N-86U^ZIV`p0|aL^Q*0i_z4DjB6LKrBE#cT4M$lm(K$@M1u2AA
zs;HY$p(FVw;XL9Qbqpl7pJ4n}Lis;3!@|WE?5eZR&y2yPvEVuTm-bG9+a%{Z!q{{g
zXmrE}hV~Jtoz-6(+Zo!hgKN}p2?dSyz<i|<meG^BhBH@7^2D6sDT!<QyBX{I!x@;i
z{m6&<H=n-|3>OyG5&|N;q@_$!GDI{V1%KzmDg|x*{CAdC7&`!6#`nP=Zhp4-qX^;0
zliLWy^vci43EfIl_#d1OltKk@DN9Gt`_MFuog#kF52Fwq884s1ep4WUd3*|>=R%?c
zib+$iJ&nBEdMb!<yLdm5$HiVv@NUd~m2&s@>Dsjcf_7JEeOMo+SG$n|0oTL3p$f*X
zCfN1+O}B4lsX-(e%^>Tm9ARxtHtBAJ&a2a#khySYCx&|*_NH6PLHu$XUMRyuKZz5#
zp%}n*pA+FEVPuVgab%pQ3B*xx{KV~EZNhNR@cSUfo%nev0y$LpqlTi3z5Eba*Or{w
zyT$g#ZMJXB`oESAEjvpMpsoK@|A>vPE{xxiCdFz|KZJkRd3W~nY1ZP*YD=FF*060j
zM0zOof}_E&x&pZ0FA^%~r?$|-r?1H@dICa@wq3sM=dYkjU7P{Nr>W-;?RLzkQ1gw3
zvVxa8^d6Nm`%kF$oHi&QGFljvBG58oXm8UH*d8Vo_@Vx-#1*;brU79<sOk`f<2n<g
zDK+oYp#Bkj6Qq12zbP9V?kUlwhQPfR%PmDc&11dxEGwLBe<8Tozfj`)x=w^kBp%eu
z#saQr6T7Ff){X6Dw$gmJMM#W6iq^$BS--Kk<Myoy#NG>m!z`@oMOz}=mKYKB&d`Uc
ziMq_K80T?og7&vwF}NJ4O*>0KDDTCl2aPbjE(q7uG0=Pg?S(O)Oy|JT)opQ+HF4(N
zgFOBcjv}yT!GsTDGwXsSq$DdYLFfHE?|d6kRM3x&r*gUVrD}r=Fh6)a$_hSPA#c1B
zTFQ9Kl9*Im@SV}tKlyH~62Y1XdcT{Xm~IMFe%=czr?<tt{($#js<AGZjd0{DB(>Em
zf=SGx;qIsv5Z|Qc^DNt>Epwe7&+X=1hf(A4iPBM8ETfGw75+9r{2npbze@Z>i+L^z
zo^h{7Az1MVk7CgQR<fww`il}@9X<MTjw@n1A9B_sY_3}&jOEdYXiGI+`SnZ$fR7w2
zkLj5gDbUxmPZ}*iCG$ThN5cL;m_iJ8Z^z|f55cd_Q1!kexlCBQ<1Ek0_?^uUVw4o&
zc)cGhT?1BB7NjhH*S-%L=Wj34hntUc3jX_uXF7J@F3)UP=4Gtb!c~&CiQ%~pv(cQB
zYd$)@AC7^ky1;%eRP>ccHF=aLlT`9ceOw-@n_}d+j?AgJS(fV<LP}kjDET!aJMC#Z
z2_7m%-y_|ptMP`NK=&Hea*t4n;eAFnp?Jmi0hz{Z?NFzEZLaXFcp((fU{`GkLiZ*h
zRLC76&uahSN^^W0qWMTY#>eIX`#Y%JhW;q7AD?y8BRl4chcq8>)ca7Merz};47vha
zKSO|$4J6oyO<^Lrj7A411k~vi!Tnh4-H$V+vy&x+lpHXWx@yvs-f7%!4M^=b$5`Wi
zcT_jS+(}}fo=CLG2kj(~K*~V_{(-7M$>@h;EexLcuukI}X_OgX6N|m&BT$iH5mi^N
z*+71N(C7*#5DR3YHi?aRE4|ck7>XRK47}UU0F+<Fz6^G$exq8uT-WCF&8y@BWC!5F
z716bWT&ilt+5){MKI9W4efp9?`u=+UA~L+!qb&d*$WX%cT-sD4)f0UD7H+}oH-E#7
zXVCb)>$uYV6N_55{}Nm*1h~nxp2|DBx{3qOjf^PhbU`j{`OCrIE=lK=TtLBC*jv)Q
zSdgDPs;4VuWhi8^(T-`Kb0UWwqqnnR`6}6@uV5r6l)%%{y&Lz<%k;pz*U$ihc`+S=
zgxV$drV2~*vF1b<+!vHMMv51Ut*vh79E#(YJZy9&492t{S{R^NkQ^q?g04!K#lDvg
zfWihln3I)|;OYfZ>pz?-SuH-h7Y}x@^lI;9OSu97k6L*ZPqU?ZbUKx}f^A-x7H$XA
zGU-}y2nbz$eF$V^Wc?W;ZIy8?imD8-;NqXyw5AVN`*d1mBrHa)B}~4)6PACMmkrX5
zDoo+vQ3yVaaY77^V<Xd^q6DgrThbO$HI}0|c){y>W>WCja-YM>cVn~YlvzPnrc^04
z-6IXO{gW0lf~i=!C1*A!;oyV)a_;C<?y~SXAlo7Fo2<j9>@<iroy}Y~z3*T~QY<Y}
z#mo7H>qAk0{eeN3ta7~Ienh7$^`w5Tnq^`4{P(I_W?1@M55bUr7Z5cT5UgBoJe0sZ
zIC;d(aBzS5ASSl=ca}BVHp`YlIWvF+(FB|kH`so-*Aax^;uPj{J)?DTco^wzr;x-Z
znx65=v+U_D8?U&VrTZT{Ixi>jo!L79FKZpH5Fvr6ypa_1Crds{R(o03g~Zs7%c>XD
z^$UN*b*tY656-)stoJj%R*2#Us5eFY9!E(}jE_K6VlnBlYqh+K?V+KLcSJ5f{o>QH
z79wl&pR28v7p6C9=-qsdotxYbX?Vl)5J=@xG<9J<xSbsM#o_<?aWScCSl9=$%@j0A
zfP;r;aD7$C{Lr#3$PWz-J-8J1J^JXEu-1Z0%Iv<zd-=-nzb$||4us~*(NBZ=gD+tM
zGLO$0=`zGg4l_mZPu|;uxGyZ05NC$-FGTf-I>o<F>rc><YZ#2?wA>-U+UwA4x8i;s
zyWuv0Vacj<-Lm7`=`b!zn-giGc-QuJHTdC)**g*+uF()~`b;Xqx5joZ!Qb5fY)#Z$
zLC_{uuhFgWNib&1dq`QF3JzrTX(9baZ9)*F(4tnLGV%Mg^-=Lp*zFK&TmOD8F1JNd
z3!HkKrj7Dv1%Uiu*sxWSeuE1rH8J7h*SPaO(O&v^i;QFYmiugp4(EM*y0coIJfW8`
z<Jam`+I-u&vI|DkO{p#%3r|8+rdE2Pq)IF}?P+6VUwjJ$8}z&^@sPX&9rai9v|QBG
z{16^CgJMnQ`^TRp22GlNZ_ww88=)WkT<H5v<-J4dJ48v$m?FzSwq8SXkMSIwvbFLn
zBYbONaib6673x`*PVRj|TrtA#ryW%BV{4{I*V}Y6BA3qiw<6>~$-ifW`qKb8Qq^eS
z$5btfm%ntb4y%1hLxseYC2EGOPs$A_F7w($V_P<Ecj3*c>8p~W;3K=0X0N-u&8T?K
z^MV)yRI+Hbe8u$){}-<;=V-r})m$0uZ397@FY2%|)1Q^ZRSL(X1biQ=m--9yO!hOl
z7oH1Ml#fTSaB$-C5U!@c&xNAZqCxQQQFGiBQh4lt@5Y+ZixjAM4E&}ZYzohUpQ8{5
zHe)#D*n)P?)WL=ZIxt5IHOP;*r~X;eQD88uNFqIP{}=xJ&(z!nv2*JUf;jS7r|@#{
zXe0&0Jx0aU*9S8I^Yo0H%C8=T{SM|#rDG(I;KPqdWd=<i3h8r=fLn)7bXvO7?%jfe
z`HD^CYh1Xo>E}t^#J2ztoP&Z;FPy>#ZQJ@n1Oj=fJyG_~+lDv#rbp*7On%LT3$Kuu
zRyxe`XP7!IbCtmkshdxUJjghloW8vrJCB&`k4;l{3JcVqwhc=MNrG{5iCkWY9Dvdc
zdZ44j${zOCuO?oGDHh7b!^9gbIas_ORn3eNSqy%oWGi>kb5E-TnQQ>n?5SwDUr2?0
z=1s-PuJyBxD#`hrKI>eh*0TRjH^}Be$^*q{F4oJTre6*D{$7B>zb49rS3<I}CRR4m
z?8+tbp~9KZZYM<j8?U}F4QqC_H*w*mU+)Bs%c!Y7TmC90HFST7w<e2r{Xx~doN%+|
zA`h;<`dVIA^x;U8*4p}#yXN|R)~QnsnSl3I!BX*COaO>A=WD-S4<YaTI-aAoDh%#U
zS_!WRuc)Yz+)XI0@Ojqd6W~7=VIdrXQ5+q;dx~W*&}rh)t+o$J+S~0)X1}4StgGt-
za@(4ibC|u{t}@D1MNu|I^^3osysX;e*Ofq32K`98;=O61agSLX-T7f?vS8_IPJ6}Z
zPV^#UzCU*=ljZBWGkh;LhHUdu9blKcqxFzr1*?xU>~*{BxlJZN&F6K0VeaK6J8d+i
zcDA=OlH%m)nV6WLC#sr48%Lg%m9@9jQ1v9-GM5XoZw6g{a@qP)1OSg?=nuekYR~pt
z@$W+61Eyf~ZIm-wFQ1-c%e1P@(sJWhpzu)vdYPZ0z0&>a+3gp&yxt&hfSF1FBNfD8
z(%>=c<~Boo=zAnQCOR=Ou{h80ijwgvOQi~vF8FN-wEgmu+a_L>0>F%c(Yx)RDtbiU
zHfN`arE7e2>b$6yPazXbm_qy&A*aoAdgJS*<Dpij&u`<LkPq1{I=QK+N#&_Uh^egP
zvTyV_PLA&VfsEh1)ZmJ}LN4U3{+GeJwYByA;#8}Iuab5C*UsSg7q#i>=@$TdZ&V_#
z=tNK=4|DR~gJB+|kXGS!xr2WZP2-(0`Ai_-R?y7cf+ZVvLTgZ!j5d;g(>htBVrVl&
zFfzq47?Qix?8RvUNTzioa}$~7s@@JL<2}Dg7-ugOv;xy|@0!U-4e@VBG`4}p(!5!x
zIg)VXyyWMkttX%5WTggWbgie9WTZyrn8~X}vH-GPIV|~Fa<|DB$|H`+bgazF*rnZl
z*_U~h@pr->JxA%|p|eNOuamf_wH#`8qo;HIda<jn2(vaPZ`@k<CFip8r00H<9N*`=
zk*fwl)&oFjt_N6EZA|E%27H-&t6a70TUEblFT_;N%dL^#H-}K8(tdFWmfmoXc#smP
zC&Qy?Q`NQczUA)gXW5%OIT#0Q55@!N+s-`Q-8FUswucfKT?xg-)e2QF174P!JQ-bC
zPg01k?3moYbVK~_5SWW;c05ab+w0)_XK_Q&9JuYJXt?L~*Q+@i_m^FbItPP>x<3oB
zijt?+-<S?0Mdz$!jE#*ui<9xLeUw8~KXNJUE2B4TDYJ4PY=8DDOkfwgtPc0)7>_nc
zu#zUo@)E#H3wa>nkQINlOO1}kFhA+>ttlwcDpZv`;m>bLpH7XU{-ZKlGY!b{z0ozD
z=Il`=o4Qu<n<%$S7_^ZZlCc=r^D6X`-2Q$-y{tA!?9SgZ31C2QW0DOS#M@q<1j%jN
zBW_b~lan&iFPN$P&2Ii@?Q?gke&aO4%W93F+v|)c=n1rHy0qk|+uToPZ|XdRk2}-*
z(`8Hon1zLf2T2US0X0p*vT1RK5k%a-jrNJE9xmSspys^)anbK1!_;;HI?-+}4rBMU
z@41CeS}@qE5{!a2!!K+-DqVLK&CxEzZ;gON+%|Ns5OX>GA$bBQh{Wc8yr7Yu57Z<&
zpy%K0jfgd}&e%%7G#w~Z%a7yFbX;v6BpJ_FA~#2yuP_VYNc3RTEK%Mulo!dNQ#zO~
zj2-8bhvxSl9fBywRzOCw|Fo0P*M1ByVfr{=GTyQDqnd!*$(vg6OxLHYf2KRf2v6a4
zOt{UrK3QsbZ>_v3f_fWILZq7!DM|O?%kFrlXb?V8shU^^3ekl;Du%Ma!TorHinzf3
zOmX5<G7)4arUHRQ>LCU>Pq{uaseNuOT;OYtp@E?*j<K-7HTBw1Z!kSG18?vJNIV41
zYPGdRzqa~bx=(e8mNYCdbRf&D&|D5M`cs6F9%T0302U;-KklnOm8Zom@}<e+*pLpu
zwMB0)ZLSAmzT_JD!zrzU9R(wIaE?f-w5<6^D05n41zUQ+=9|#W;I8UDQ=+5x2f)79
z_ofIjaq0T|z2Z0=H#_STNQ6V)f)W&Ftb=9ZI49_c@&vNcI|F|*$AitS(`XD^nDa%E
zPJfZ_I8FBu5B@&NDYhUeM<yijW2nGoOh<n&8JnM<-y9Asltq=>tpVJg1e?ccs#Y(O
z&Y+m(v*c9A=Aez3TO-mpqUlP5_d)3h3aqg_V|3_Df7mGe_Ih$_C-OwG?K23r3melf
z7}y()7OoRc_))0}c0eGX*|*P9md1k?E-VU3@_8I5y^T0kM{DM+3I%P)_}OKRM%r>O
zfVEjq<jGcajfpCXld=k7dAZHum#T9U68G89PuPRl42}!ObWvF7m(urzWp(PpKY37-
znbMRtTvF@xbJgKh8I;@{XP&W*7-i^vHFO7KlhZ+2n6cu0TDLV<gc{aEqArV|_?tT}
zP+Z->#13PcqpsE1rnyfoWGO4O2yg%IYW@*5{gHA0F!Zi?=hochXe6EStB;rNcx$k?
zy_a+^`kx&e^Jt?g><8|q19P-^=`Pt)?epe*tZO9Y5cwRVvHWS+q2DwL$seyml>t^d
z**7;?WC%4jGrxD$!bastlZRAKzn^dR4T0T+euluwq1row%96<l2qkw*SL9?9F9v_J
zoAuJUwmY^x=MC%dm~_6APvKGUx+U4B-)2_1l$F!VYkhqI)HgKHpQbaaWJ`z{sz#C8
zpQ6dtI<B&u#*)Q(*jxb1;=NmQB`xAEr{|kI9mSMV{%~6A4igXF+Ar1)+^WPAZf}|Q
zhhHv~n{>4azsAwpjERY@(#A>u1bC_X@hE!(RPN;q>&8x&o0!u%ee-QDjTS#~aa$FL
zGMFU@i+`OjH-Xp)f=bTPy=GOlbc^AntY%onRKBcX&?qGGifh=iZWE~lq{Wdftk^=F
z)*uPQTHja<UO**|edkW%+yxxfV-+%a$z=PKJ9e3t{B^}%hpBIK<i;x%3Z=bDNx(_!
z%vfvhB`@D^SI{Q1HjqGApI1UIf4U6|m11%@S`H=WCGCwxq<5}D_h9-H#*Gj!@>M?T
z+tVI&I?$pm%j``%UMNp8dTul>+07p0nY625@yS~5O418L63_b@;ga}$;al|@aPxgt
z3!+Ax&-hzOMTXP9Td(>=WxTWoTe7Mrz*IyjnjQYSzw=IZ8+P~KIEcNogfASX@lSp7
zMco-m0{*$wGP%7+_%`4V$ChAU(1rLLnPUB-I7l=~brkKwM^}5_tzZ*V#Ao4q{#b^q
z>faHaKY*GzRwFWj{p8=tzmcw#gEmG|c#ROZlyfNIG7Dl@g}U^uVdWEmeK}C7F3?4B
zRvA$s(plN~S<CMr1nz3xK}+|Gi;D*>vy$2hFNozDTxwIHs__=F3T@ibMsg@Tm?_R5
z?#TepMv1)8wW(q-HNYQuu6Rj9EXG+P0qSGI>}Sxd$m>(iFm(p+M<LPbVY*%V33%w~
ztUIQx$5PaluTuP8goZa>6Ff3-14SCedBZ&ju5=1=R`VhnF5&~!o=n;BgZ&T>8sBgv
zNz5c)CTJ}Z;{W<w2Qkx-6n#+t;cLDCeW}a#AZYl_M>9dF33C-58?*$R7EHpA4)`1X
zQxCtp1$+0~c+7SO9$j+&#w)0?IX_t3<x#eqqqIgHuSWKDj#y%@qMTE@+99%>tb`wj
zoKh+-Y+U8tC-L2)-vN_B@k&lxbrE-)B+se?p^E_j?)vv~&Ijw4yR2^{3>}Jt-qWOu
z4gdj<JNJ$3E8S{^9Tq%#O7Jo7Mv#8R%H!E_-|70ZjK~H!r?0|xL>+}t5KqLQQvDGV
z+u?}^^Z6m7efS#Sd~oJ5{OraioZN;T6^E#?^en>WU@YRpW=?&RA^58_jAr8*le1#i
z!RiUV6a6(s5a$`F(48#Q=e%{hO~Ct=V8^b>v|`l!NMqN+{)Zpj<>2MwQ@TjzYgaa0
z^xUYXSE7KK9FFX_$hrHqyS7yNXCOc4Y{9Kjmf^brnX+9dI20cHg^#bQ28*%Z$HBYA
zJaz@ma-{YF*7q0NgG;UpK!1BE>Y8bzJ2mB=$*Lx+KMTeRV=zPEyY&*1IuH9RuG1fg
z3GM`)WUEonAQ7=kJ6+-aKrHQrN1UR!1|-$`(}lb%cAu4(!fB}()~7{l4=(*D8d<IG
zlSQ`&{~5N?_xrmoNDWEGw01UzzS@|(^UIVTeKWN7>eX|pHb1#L--K-V_^w<EKK-?i
zJoB+9pKp3i-xt9`EPn)$r0!q|_1{9pH;xp9K42Zd_^?M~*AkE30zW6--#T-*>TBLJ
zw5IxAe8;Z66VrXY5Z0|WvfQImya?WD;?U%H55*S2HjL2JX)ubc%CEO_Ot+J;Vti4j
zYhVHiJ`Jjb!Q`m%Seq>~u-Y7lY~@o}S6?$GMf$7vTWUAt6Lr=`T~+a9XBci+jzm0L
z+8MQ~AQjQhoWx^^41*B~TfA$$E{cGXTth+(x*o#!4YKGJVfTF?(zaP(LpbR<`YE#J
z5p!E%F$7;?P)BwNAJ^A|TUEYMz#AUgapHwtaUqX}V)VkuQ)Uo$y&5IKzN&C%aZWbw
zC`5_I(%UWh7*qFZYWKGu?QoX0Gumcd`x8JIZFvI&A0WitPxvb5N2KX=1xmT_Nm)uK
z(C5n#%pg)|artQHzh;fGvl>Aj7#gUDvo+{2owXBMd#)M=v~O}+??hJH0CvPF2hm(3
zA|WCD4w7a#u#ZnL8c`EC0H4w)fsTbFE)ULv-TY*(hrb{_A7lWjsJQGjHh>21lQ&11
zSsRmLi>{)?;Zxc0^WFCfv9+{cOc#KcqiLUVR6(*biU~kmAD!y&NCJ_d&0_2{OU-ef
zZhR(f<v&9tti`GM5~wF1wP=_IShhb_9C;hEic0|)RWQPU<2mUmCnqPYTRlS$DAt$i
zDXk#-sumk}thX3_k`+RhiJ8B=M7!H^45c8y?$Ya>y1Sp_92D3mXK!ljd-UzyL_amY
zm-*98;zBN>v=<e%a|-iZ+k3b6an}EmedTZozI4&8Goa$~Y?pf*e*@FA+;>8Kc+ms%
z>QTCd#jk>4diSHI(lb<xK(%ObZQA+EZkSU)?+gBMb>XNn^K<bwO)cvqiO^zg7l3@U
zo19l{%avUk&iHha_52uU77C1@vA6DZBNkCg3H{Mjw$|}yCW#Y(PbNGcBy$?o+iM?o
zHW474^s*ZpYzvdVaaQC^AmGPcCa8w@X5t99{Ru-9m!-bficb`)m~Xk<e$Fa7%{ICn
zL==2Lh)i$&&S_cJ{=DqBx7-YW;r;D{(LFrDI2bKE(y^!Yu67<@B4aheS7~X&@2;=F
z=p(-V@<pb@*ooDVJ2~KH>9f-o?$Q0DaI-FIR{;(6`u+~E+0j!h3a`iMa-3}GCaM?Y
z+jKs@Z-DZei~4KZBSi0HaBsF$=;AT0{X}j>wPkSrFvQ!bPzc=Gv>AKGRF?JQax+X-
zGJ1;Uo?Og*C=nSu_m~cq`->EKE5~#!qbVlMDkNF1h!+Y@->QKBSiRax#oT^DdE6R;
z*suyBQ#b5d>tvI5hI^|N?(y>#wfa6XxE9v^Pq6Rm&BT2&nd=K23xq?CYnaZG(zxa~
z{a7fdl)B2*a<n3CjT-qikHdVB&h-ytsp#01H{rG*ccp24)seblb>*QK_0HB-?l6cH
zwM(|c18K=pQmL`JK&L7X;$41*aL;(-9)5gF{6I>xaP?2O##4qyaW*q>8e!F+>mF|S
z>W*niRCH^Rc53>%%tTB^$c!ZDCo(^0_-a31ngsLXe%D$P_L+SZlE1sh)0fi}k5_f5
zZ!s4DqW=jn;KKSr50!|1+S`Hb7s^ox%|hxvDt5Ijba&A*n$-L(?4n-q-KNLh*`({^
z)!rxKxsgdt0mk`*4C7be5ACZ%(k&(fL=$QJ9HSKId8beCp<(S2RQ{%?I*t;ZXM$61
zIBQ7le+)i3t;r&~;4wtmX#8rQsrg{TQx-KiGt}{NBg~|CjSx7EIM-!6U*YhntZ$)%
zI^-Xg-%!CGorL7!dcqLtEYBcE8kxt5A{$Wn`{{8=Xe4KQ&lGI!`<&c;<HHjeiMy`F
zPhWIyQW4Rm!#fDm8@R_Fot=Wis@j7-2_r@!Nz}W^<Bth`dvT)x@HN!8Z+W7(X00P4
zMSbu1i|xfFGyh4TOY#=S(>L%=NB^jX8{BzmdFIB4`FeP+@4<6dB+qVFs`7qjNq@`I
z&U(A9u1nqe`N3veMMT;M_QA96l=fXe1o;+&fZ!KC9+xLgrwp#`TLZE24a3r7Vk)pg
z(@rV+L6)Xh&BX3T-Yc;J@|g>CGN`N5P|0|4z=xxP>P(}@eD|bs#WVqW*Y;#?+qj1C
z2}9Ov3k<PbK2iuO_IGo8;zlzo-6J8=)_Sm?vv!iQkc{FFH5EjPejmUk#T}_CVhxq;
zUUPiBeJa~h*3rlaku(p5VY_;wvnNwFY(ZHtR9m=;O_7QsD?N(w7(jKrW0;k(&O)mg
zcuNA9P@I-m8c1oy1~a8^FPzFf#k*GQ*WGM+YhU;A+eGj4tkinm_r2coK2gyV;e3BY
z@b5!yDzcg>`uL<o-nTtJnAH3v&2;C@k>}GyP~2*d{yaj(=Pa|Zq)YzFru@sU&>n6Q
z0K2i~xl2%%!$ZTe6mXg^->v1!Yka*Y5GvG0E)8SF32mlMB53Q@6^<*i`KYsMwix-t
z%ET9Ab$AtlsKpRGB^Mj#=QBuj-iOl(@4>$+)di$pKQV-1ZmJdi>w`K`Y#=E?dXMTa
z%p<pmwAAE*6GGnfWpPIA=INRFEzeO+52TA(h4w@v{}JW?1eTWAQ_~l4!xFBL>gH?6
zu`=Nm6m&-MB<l@{mr!S8ITb;2%=zrL)h4dM0~*R9AY1QWQB$=iVtwkQ)^B~pP|C?R
zp2U~_p~`b6^uRkRsVYSKvlV!m=&<JenTvAcovb<?>T~So-DB>9&mV35Rv*kdA2KS2
zUc^`#o#A;~V4w;Y=4n4&bIoh;lkCBcQ&%C-k*dU<>PZbuR6ARM*tT=MzF5LSlfXcU
z&^n#2XS7^Tdn(@2ps7L6IA$q*mC8_~5(V5{tTYc3%)lK?Q1EXJCl@jF0|CEy_hMbU
zDFgU&-3u7RtP391l-T4@8y932_3Zj0NeA^0P>6ZtAteS*s#0hUx#|{tN=nMOh7xI^
zY4yJ#iaMPti@_y-S4BelT^W^-{g2kxp=1B@dqFpsrOaWFz?qfTZvF#;@gz~b60>~(
zBWF6}7uChhLygi{)v)wu5QB1nUcy@{@)trQb0=*(75o*DN*%*`#!_b30z_z>q%-kF
zc=R}tc*?0q%2EhfC~r8U^$__LOuvNge=3M@t6Qof!n-ze<@$6!7iG1B`HOK^(Rj>}
zxZLEHSwj2+3sAT3h15HcjcU{`f>MFT<gpB7wSSG6I7-%Gq^G%Fr-qJc_DkHYx;meY
zVw8uRVa_3#2rkaerB15vq2cVVn_?-nDyh+Y66j*dY#xF{`YDG}(c~~PWD?0=pZ|&%
zrsW{hFGB2`_${ht4Z7CbTc~41T1|?2=@RaG+Gb>P?B(-$^h9(KNWwhS$F%pp5rcc>
zCg8E-YJGO5#v3LGqW2dRSCocz1Nw{9Og4V=^qJ4$8}*;V7ZOQ{;vTZttUBe{*f49K
zS%J!84NoV(k$eG&WGdY%l^b6p4U>o<q(ps#J&7#mK*BlXz-k#1?CSJeX0uq4Wy-jO
z+bLWA5kiSTQVKfYn89T-1Ct?r(eQ{kZT-?x{_9AX5?!aDl5=m{7$2_FWwFqJbu*)3
zX7B7zu>JlYy*Nz|pPPhVK+9x)*SrgsmwR5FiJ>1v+cUeZ%4T^yY`=*N8r@WOHi9G$
zs_N*N57y%~hZ0$}b^;(77Ne`olmn+(FN!&fyA>Z~-?JgO58(-OCh4r)r|AuUQQvgb
z<<;Q>xEQ>Jb@ZCszrPcGTM3zWWhUT}t2;F1s^{X;27hXL2!W?FKjR3svC=Pm*3boR
zOvCq1UZy4BEu2yz-B`kFX=$0W>}Mei6zkH0G`}FCn&GfA0twzKM3q%c@11&5=fjp0
zVKV_2_`)Ysgr&MQqGRiv&cae5fWDW`R@aIPkNXtQ&!maA^R1gaVka*@MZf}?evb*6
ztIORFX`PiaLE{<^UAeYnF9e*fxM(YA34N6EmG<)ZA`&LUUD$W)Q+|8XtyGQIWZ`2L
zj_ooTY>3uMUPct3H~IPb1gwGDlU+T3$r=mTB)$|+Ex%|=G|md3@l`zYE_u75BcLrw
zXFVt=3%ww;K<;>6POW4!QM>gUmQB*ANmnH|AE5@Oc-vmYB)rg(UFw?3s~OXa3H*wC
z{dc28aJS#<1_6gV)S#}6dpc<M=bmf!W}V(yS4a)!#h5qK$~Ph}-CMCaPlgZRD(n)}
zNs*Nlg+50{5pnJ*>k@-Xczn{s93}7#UF<6KC=dKz>VfI(PR(6?7HQ;jHO^ra@kF(>
zQFVbTVq~PpG;~VE93EWm&0Oh2XL;Z>W0<$Auh(%TNq@GX!L(i&jPc^r)Al;br_}mr
zHl{41B?!8PZKE;<b$n^J$FFu3{k-Kj;D38!V1BaN+}zCOywUwJ2rkaybfqQUvwf{2
zD86Ajr&qd0C4q=~1}IZwsiiyaRTMFflPWXfnrubP9W5@@_S<%?_UmXWKkJohfhy?N
z5;8M=oaMl^aCSPW4J!)L4Rs=3mhEUsIuYq75A~f7tGjWLmmJ>Z)FD6-^~>ZFS5+@@
zb75v7hRW<zT9EtU?4bVBcxu8$bfi)XoXGtawz<p=1Fi1g>t@wrNLdVT>`y}BDzlrf
zHQ_I{MZKZPTjcGI5OP0AcB$j?z4#xr_A}V9MfFKOZ<kZARF@lqP=AP`2AihE>GnmD
zL$m-A-Z8koZEFfWa&mm9v(uP^ez+fU2CH_2QQZ^6v-1rjkK;<P`Kn(iWmME!lu*cr
zSL~Hic5kkMu**gNuCh|S_2YXqfmZQNaL7jcFYBbr7vTf6XS}u-FT{MslfDNT)OBO7
z4taw-Cdo`UZvxXGXP*)Lq~-ziYvC76y<3vr{Y`%}oeWtgu7XDh%0A2KFCrMWs&;`h
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

literal 0
HcmV?d00001

diff --git a/public/develop/naas/gst_to_tmf/index.html b/public/develop/naas/gst_to_tmf/index.html
new file mode 100644
index 00000000..3aa6f8c8
--- /dev/null
+++ b/public/develop/naas/gst_to_tmf/index.html
@@ -0,0 +1,2886 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+  <head>
+    
+      <meta charset="utf-8">
+      <meta name="viewport" content="width=device-width,initial-scale=1">
+      
+        <meta name="description" content="ETSI SDG OSL Documentation page">
+      
+      
+        <meta name="author" content="OpenSlice by ETSI">
+      
+      
+        <link rel="canonical" href="https://osl.etsi.org/develop/naas/gst_to_tmf/">
+      
+      
+        <link rel="prev" href="../service_inventory/">
+      
+      
+        <link rel="next" href="../resource_catalog/">
+      
+      
+      <link rel="icon" href="../../images/favicon.png">
+      <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.28">
+    
+    
+      
+        <title>GSMA GST to TMF Service - ETSI SDG OSL Documentation</title>
+      
+    
+    
+      <link rel="stylesheet" href="../../assets/stylesheets/main.6543a935.min.css">
+      
+        
+        <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
+      
+      
+
+
+    
+    
+      
+    
+    
+      
+        
+        
+        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+      
+    
+    
+    <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+    
+      
+
+    
+    
+    
+  </head>
+  
+  
+    
+    
+    
+    
+    
+    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="cyan" data-md-color-accent="blue">
+  
+    
+    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+    <label class="md-overlay" for="__drawer"></label>
+    <div data-md-component="skip">
+      
+        
+        <a href="#generic-slice-template-as-a-service-specification" class="md-skip">
+          Skip to content
+        </a>
+      
+    </div>
+    <div data-md-component="announce">
+      
+    </div>
+    
+      <div data-md-color-scheme="default" data-md-component="outdated" hidden>
+        
+      </div>
+    
+    
+      
+
+  
+
+<header class="md-header md-header--shadow" data-md-component="header">
+  <nav class="md-header__inner md-grid" aria-label="Header">
+    <a href="../.." title="ETSI SDG OSL Documentation" class="md-header__button md-logo" aria-label="ETSI SDG OSL Documentation" data-md-component="logo">
+      
+  <img src="../../images/logo_osl.png" alt="logo">
+
+    </a>
+    <label class="md-header__button md-icon" for="__drawer">
+      
+      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+    </label>
+    <div class="md-header__title" data-md-component="header-title">
+      <div class="md-header__ellipsis">
+        <div class="md-header__topic">
+          <span class="md-ellipsis">
+            ETSI SDG OSL Documentation
+          </span>
+        </div>
+        <div class="md-header__topic" data-md-component="header-topic">
+          <span class="md-ellipsis">
+            
+              GSMA GST to TMF Service
+            
+          </span>
+        </div>
+      </div>
+    </div>
+    
+      
+    
+    
+    
+    
+      <label class="md-header__button md-icon" for="__search">
+        
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+      </label>
+      <div class="md-search" data-md-component="search" role="dialog">
+  <label class="md-search__overlay" for="__search"></label>
+  <div class="md-search__inner" role="search">
+    <form class="md-search__form" name="search">
+      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+      <label class="md-search__icon md-icon" for="__search">
+        
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+        
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+      </label>
+      <nav class="md-search__options" aria-label="Search">
+        
+        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+          
+          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+        </button>
+      </nav>
+      
+    </form>
+    <div class="md-search__output">
+      <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
+        <div class="md-search-result" data-md-component="search-result">
+          <div class="md-search-result__meta">
+            Initializing search
+          </div>
+          <ol class="md-search-result__list" role="presentation"></ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+    
+    
+      <div class="md-header__source">
+        <a href="https://labs.etsi.org/rep/osl" title="Go to repository" class="md-source" data-md-component="source">
+  <div class="md-source__icon md-icon">
+    
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81-2.9-.295-5.7.083-8.4 1.11-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.09 18.09 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3 4.7 0 9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z"/></svg>
+  </div>
+  <div class="md-source__repository">
+    OSL GitLab
+  </div>
+</a>
+      </div>
+    
+  </nav>
+  
+</header>
+    
+    <div class="md-container" data-md-component="container">
+      
+      
+        
+          
+        
+      
+      <main class="md-main" data-md-component="main">
+        <div class="md-main__inner md-grid">
+          
+            
+              
+              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+                <div class="md-sidebar__scrollwrap">
+                  <div class="md-sidebar__inner">
+                    
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+  <label class="md-nav__title" for="__drawer">
+    <a href="../.." title="ETSI SDG OSL Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG OSL Documentation" data-md-component="logo">
+      
+  <img src="../../images/logo_osl.png" alt="logo">
+
+    </a>
+    ETSI SDG OSL Documentation
+  </label>
+  
+    <div class="md-nav__source">
+      <a href="https://labs.etsi.org/rep/osl" title="Go to repository" class="md-source" data-md-component="source">
+  <div class="md-source__icon md-icon">
+    
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81-2.9-.295-5.7.083-8.4 1.11-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.09 18.09 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3 4.7 0 9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z"/></svg>
+  </div>
+  <div class="md-source__repository">
+    OSL GitLab
+  </div>
+</a>
+    </div>
+  
+  <ul class="md-nav__list" data-md-scrollfix>
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
+        
+          
+          <label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Overview
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_1">
+            <span class="md-nav__icon md-icon"></span>
+            Overview
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../.." class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../OpenSlice_deployment_examples/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    OpenSlice deployment examples
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../history/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    History
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../etsi_osl/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    ETSI OSL
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
+        
+          
+          <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Getting Started
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_2">
+            <span class="md-nav__icon md-icon"></span>
+            Getting Started
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1" >
+        
+          
+          <label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Deployment
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_2_1">
+            <span class="md-nav__icon md-icon"></span>
+            Deployment
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../deployment/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../deploymentCompose/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Docker Compose
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../deploymentK8s/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Kubernetes
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2" >
+        
+          
+          <label class="md-nav__link" for="__nav_2_2" id="__nav_2_2_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Portals
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_2_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_2_2">
+            <span class="md-nav__icon md-icon"></span>
+            Portals
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../portals_intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" >
+        
+          
+          <label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Configuration/Management
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_2_3">
+            <span class="md-nav__icon md-icon"></span>
+            Configuration/Management
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../config_intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../role_keycloak_management/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Role/Keycloak management
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../nfvoconfig/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    NFV Orchestrator Configuration
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4" >
+        
+          
+          <label class="md-nav__link" for="__nav_2_3_4" id="__nav_2_3_4_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Advanced topics
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_4_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_2_3_4">
+            <span class="md-nav__icon md-icon"></span>
+            Advanced topics
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/consumingServicesFromExternalPartners/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Consuming Services From External OSS
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+    
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
+        
+          
+          <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    NaaS
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
+          <label class="md-nav__title" for="__nav_3">
+            <span class="md-nav__icon md-icon"></span>
+            NaaS
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../introduction/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+    
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" checked>
+        
+          
+          <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Services
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="true">
+          <label class="md-nav__title" for="__nav_3_2">
+            <span class="md-nav__icon md-icon"></span>
+            Services
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../service_catalog/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Service Catalogs
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../service_spec/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Service Specification
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../service_ordering/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Service Ordering
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../service_inventory/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Service Inventory
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+    
+  
+  
+  
+    <li class="md-nav__item md-nav__item--active">
+      
+      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
+      
+      
+        
+      
+      
+        <label class="md-nav__link md-nav__link--active" for="__toc">
+          
+  
+  <span class="md-ellipsis">
+    GSMA GST to TMF Service
+  </span>
+  
+
+          <span class="md-nav__icon md-icon"></span>
+        </label>
+      
+      <a href="./" class="md-nav__link md-nav__link--active">
+        
+  
+  <span class="md-ellipsis">
+    GSMA GST to TMF Service
+  </span>
+  
+
+      </a>
+      
+        
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+  
+  
+  
+    
+  
+  
+    <label class="md-nav__title" for="__toc">
+      <span class="md-nav__icon md-icon"></span>
+      Table of contents
+    </label>
+    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+      
+        <li class="md-nav__item">
+  <a href="#intended-audience-service-designers" class="md-nav__link">
+    <span class="md-ellipsis">
+      Intended Audience: Service Designers
+    </span>
+  </a>
+  
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#probe-further" class="md-nav__link">
+    <span class="md-ellipsis">
+      Probe further
+    </span>
+  </a>
+  
+</li>
+      
+    </ul>
+  
+</nav>
+      
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" >
+        
+          
+          <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Resources
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_3_3">
+            <span class="md-nav__icon md-icon"></span>
+            Resources
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../resource_catalog/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Resources Catalogs
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../resource_spec/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Resources Specification
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../resource_inventory/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Resources Inventory
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" >
+        
+          
+          <label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Service orchestration
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_3_4">
+            <span class="md-nav__icon md-icon"></span>
+            Service orchestration
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../so_intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../lcm_intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Service Lifecycle management
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../lcm_rules_intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    LCM Rules Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_4" >
+        
+          
+          <label class="md-nav__link" for="__nav_3_4_4" id="__nav_3_4_4_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    From Service order to services/resources
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_4_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_3_4_4">
+            <span class="md-nav__icon md-icon"></span>
+            From Service order to services/resources
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../so_servicespec_to_services_kubernetes/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Exposing Kubernetes services
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../so_servicespec_to_services_nfv/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Exposing NFV Services
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../exposed_apis/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Supported TMFORUM exposed APIs
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6" >
+        
+          
+          <label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    NFV support
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_3_6">
+            <span class="md-nav__icon md-icon"></span>
+            NFV support
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../nfv/intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../nfv/nfvservices/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    NFV Services
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+        
+          
+          <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Service design
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_4">
+            <span class="md-nav__icon md-icon"></span>
+            Service design
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" >
+        
+          
+          <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Support for Kubernetes
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_4_2">
+            <span class="md-nav__icon md-icon"></span>
+            Support for Kubernetes
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/kubernetes/intro/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/kubernetes/ExposingKubernetesResources/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Exposing Kubernetes Resources
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/kubernetes/helm/design_helmaas/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Design Helm as a Service
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
+        
+          
+          <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Support for NFV
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_4_3">
+            <span class="md-nav__icon md-icon"></span>
+            Support for NFV
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/nfv/design_nfv_services/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Design NFV Services
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" >
+        
+          
+          <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    LCM Rules
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_4_4">
+            <span class="md-nav__icon md-icon"></span>
+            LCM Rules
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/lcmrules/intro.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/lcmrules/specification.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Specification
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/lcmrules/examples.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Typical Examples
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" >
+        
+          
+          <label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Service Specification Examples
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_4_5">
+            <span class="md-nav__icon md-icon"></span>
+            Service Specification Examples
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/examples/open5gs_nfv.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Open5GS (NFV approach)
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/examples/open5gs_kubernetes.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Open5GS (Kubernetes approach)
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Exposing CRDs_aaS_Example_Calculator
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    HELM Installation aaS Jenkins Example
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+        
+          
+          <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Service Ordering
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_5">
+            <span class="md-nav__icon md-icon"></span>
+            Service Ordering
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../service_ordering/ordering_services/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Ordering Services from catalogs
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+        
+          
+          <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Testing services
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_6">
+            <span class="md-nav__icon md-icon"></span>
+            Testing services
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../testing_services/test_spec.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Testing Specification
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../testing_services/test_catalogs.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Testing Catalogs
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../testing_services/test_inventory.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Testing Inventory
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
+        
+          
+          <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Service as a Product
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_7">
+            <span class="md-nav__icon md-icon"></span>
+            Service as a Product
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../product_model/product_spec.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Product Specification
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../product_model/product_catalogs.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Product Catalogs
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../product_model/product_inventory.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Product Inventory
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
+        
+          
+          <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Assurance services
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_8">
+            <span class="md-nav__icon md-icon"></span>
+            Assurance services
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../assurance_services/intro.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../assurance_services/alarms_actions.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Alarms and Actions
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" >
+        
+          
+          <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Design & Architecture
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_9">
+            <span class="md-nav__icon md-icon"></span>
+            Design & Architecture
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/architecture/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Architecture
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9_2" >
+        
+          
+          <label class="md-nav__link" for="__nav_9_2" id="__nav_9_2_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Cloud native support
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_2_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_9_2">
+            <span class="md-nav__icon md-icon"></span>
+            Cloud native support
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/CRIDGE_cloud_native_intro.md" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/CRIDGE/CRIDGEforDevelopers/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    CRIDGE for Developers
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/messagebus/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Message bus
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/osom/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    OSOM
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/oauth/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Authentication
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9_6" >
+        
+          
+          <label class="md-nav__link" for="__nav_9_6" id="__nav_9_6_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    APIs
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_6_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_9_6">
+            <span class="md-nav__icon md-icon"></span>
+            APIs
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/tmfapi/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    TMF API
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/nfvapi/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    NFV API
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/issuemgt/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Issue management
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../architecture/centrallog/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Central logging
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    
+    
+    
+    
+    <li class="md-nav__item md-nav__item--nested">
+      
+        
+        
+        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" >
+        
+          
+          <label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
+            
+  
+  <span class="md-ellipsis">
+    Contributing to OSL
+  </span>
+  
+
+            <span class="md-nav__icon md-icon"></span>
+          </label>
+        
+        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
+          <label class="md-nav__title" for="__nav_10">
+            <span class="md-nav__icon md-icon"></span>
+            Contributing to OSL
+          </label>
+          <ul class="md-nav__list" data-md-scrollfix>
+            
+              
+                
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../contributing/developing/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Developing
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+              
+            
+          </ul>
+        </nav>
+      
+    </li>
+  
+
+    
+      
+      
+  
+  
+  
+  
+    <li class="md-nav__item">
+      <a href="../../terminology/" class="md-nav__link">
+        
+  
+  <span class="md-ellipsis">
+    Terminology
+  </span>
+  
+
+      </a>
+    </li>
+  
+
+    
+  </ul>
+</nav>
+                  </div>
+                </div>
+              </div>
+            
+            
+              
+              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+                <div class="md-sidebar__scrollwrap">
+                  <div class="md-sidebar__inner">
+                    
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+  
+  
+  
+    
+  
+  
+    <label class="md-nav__title" for="__toc">
+      <span class="md-nav__icon md-icon"></span>
+      Table of contents
+    </label>
+    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+      
+        <li class="md-nav__item">
+  <a href="#intended-audience-service-designers" class="md-nav__link">
+    <span class="md-ellipsis">
+      Intended Audience: Service Designers
+    </span>
+  </a>
+  
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#probe-further" class="md-nav__link">
+    <span class="md-ellipsis">
+      Probe further
+    </span>
+  </a>
+  
+</li>
+      
+    </ul>
+  
+</nav>
+                  </div>
+                </div>
+              </div>
+            
+          
+          
+            <div class="md-content" data-md-component="content">
+              <article class="md-content__inner md-typeset">
+                
+                  
+
+
+<h1 id="generic-slice-template-as-a-service-specification">Generic Slice Template as a Service Specification</h1>
+<h2 id="intended-audience-service-designers">Intended Audience: Service Designers</h2>
+<p>GSMA Generic Slice Template (GST) Defines customer-oriented service requirements, E.g. Availability, Area of service, delay tolerance, etc. and attempts to narrow down the gap between (network) service customers and vendors</p>
+<p>Moreove it Proposes standardized Network Slice Templates (NESTs) to target specific use cases</p>
+<p>In OpenSlice we made an effort and translated the GST to a Service Specification model. So Service Designers can use it as a template to design a new Service.</p>
+<p>The image illustrates the relationship between the GSMA Generic Slice Template (GST), TM Forum Service Specification, and how they are utilized within OpenSlice to offer network services.</p>
+<p><a href="../gst_to_gsma/img01.png"><img alt="gst_to_gsma" src="../gst_to_gsma/img01.png" /></a></p>
+<p>The GST to TM Forum via OpenSlice:</p>
+<pre><code>    * GST Attributes List: A comprehensive list of service attributes, such as availability, delay tolerance, downlink throughput, energy efficiency, isolation level, mission-critical support, and many others.
+    * TMF Service Specification: Demonstrates the transformation of GST attributes into a TM Forum service specification, showing JSON code snippets that define service parameters.
+    * Offered Service based on GST: Represents the final offered service, an example of a GST-based service shown as an entry in a catalog, ready to be consumed by customers.
+</code></pre>
+<p>What was our flow:</p>
+<pre><code>* Started with defining service requirements and attributes using GST.
+* Translated these GST attributes into a formal TM Forum service specification.
+* Service Offering in OpenSlice: The service specification is then used to create and offer a specific network service within OpenSlice, available for customer selection and deployment.
+</code></pre>
+<h2 id="probe-further">Probe further</h2>
+<p>See v9 of the  GST model in GSMA <a href="https://www.gsma.com/newsroom/wp-content/uploads//NG.116-v9.0-1.pdf">here</a></p>
+
+
+
+
+
+
+
+
+
+
+
+
+                
+              </article>
+            </div>
+          
+          
+<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
+        </div>
+        
+          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
+  
+  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
+  Back to top
+</button>
+        
+      </main>
+      
+        <footer class="md-footer">
+  
+    
+      
+      <nav class="md-footer__inner md-grid" aria-label="Footer" >
+        
+          
+          <a href="../service_inventory/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Service Inventory">
+            <div class="md-footer__button md-icon">
+              
+              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+            </div>
+            <div class="md-footer__title">
+              <span class="md-footer__direction">
+                Previous
+              </span>
+              <div class="md-ellipsis">
+                Service Inventory
+              </div>
+            </div>
+          </a>
+        
+        
+          
+          <a href="../resource_catalog/" class="md-footer__link md-footer__link--next" aria-label="Next: Resources Catalogs">
+            <div class="md-footer__title">
+              <span class="md-footer__direction">
+                Next
+              </span>
+              <div class="md-ellipsis">
+                Resources Catalogs
+              </div>
+            </div>
+            <div class="md-footer__button md-icon">
+              
+              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
+            </div>
+          </a>
+        
+      </nav>
+    
+  
+  <div class="md-footer-meta md-typeset">
+    <div class="md-footer-meta__inner md-grid">
+      <div class="md-copyright">
+  
+    <div class="md-copyright__highlight">
+      Copyright &copy; 2024 ETSI OSL
+    </div>
+  
+  
+    Made with
+    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+      Material for MkDocs
+    </a>
+  
+</div>
+      
+        <div class="md-social">
+  
+    
+    
+    
+    
+      
+      
+    
+    <a href="https://osl.etsi.org/" target="_blank" rel="noopener" title="osl.etsi.org" class="md-social__link">
+      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.4c2.2 20.4 3.3 41.8 3.3 64zm28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7zm-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6zM8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zm186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6h116.7zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.6z"/></svg>
+    </a>
+  
+    
+    
+    
+    
+      
+      
+    
+    <a href="https://labs.etsi.org/rep/osl" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
+      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81-2.9-.295-5.7.083-8.4 1.11-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.09 18.09 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3 4.7 0 9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z"/></svg>
+    </a>
+  
+    
+    
+    
+    
+      
+      
+    
+    <a href="https://www.linkedin.com/company/openslice/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+    </a>
+  
+    
+    
+    
+    
+      
+      
+    
+    <a href="https://twitter.com/OpensliceOSS" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9L389.2 48zm-24.8 373.8h39.1L151.1 88h-42l255.3 333.8z"/></svg>
+    </a>
+  
+</div>
+      
+    </div>
+  </div>
+</footer>
+      
+    </div>
+    <div class="md-dialog" data-md-component="dialog">
+      <div class="md-dialog__inner md-typeset"></div>
+    </div>
+    
+      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
+    
+    
+    <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
+    
+    
+      <script src="../../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
+      
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/public/develop/naas/introduction/index.html b/public/develop/naas/introduction/index.html
index c929ed35..65811696 100644
--- a/public/develop/naas/introduction/index.html
+++ b/public/develop/naas/introduction/index.html
@@ -926,7 +926,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2647,7 +2647,7 @@
 <h1 id="openslice-and-naas">OpenSlice and NaaS</h1>
 <p>OpenSlice makes extensive use of TMFORUM's models and APIs. Therefore if one is familiar with TMF APIs the terminology and ideas are the same.</p>
 <p>To deliver NaaS we need to incorporate various APIs (see TMF909 API Suite Specification for NaaS). OpenSlice implements various TMF APIs to deliver NaaS and support the  lifecycle functions required to manage the network capabilities exposed as Network as a Service and managed by operational domains.</p>
-<h2 id="whats-next">What's next</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>For a complete list of supported APIs, see <a href="../exposed_apis/">Supported APIs</a></li>
 <li>Check the defined user roles of OpenSlice in our <a href="../../terminology/">Terminology</a></li>
diff --git a/public/develop/naas/lcm_intro/index.html b/public/develop/naas/lcm_intro/index.html
index c56d5d3c..9ed4b4a8 100644
--- a/public/develop/naas/lcm_intro/index.html
+++ b/public/develop/naas/lcm_intro/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2630,7 +2630,9 @@
 
   <h1>Service Lifecycle management</h1>
 
-
+<ul>
+<li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li>
+</ul>
 
 
 
diff --git a/public/develop/naas/lcm_rules_intro/index.html b/public/develop/naas/lcm_rules_intro/index.html
index 4a0b5b4c..9addf4e2 100644
--- a/public/develop/naas/lcm_rules_intro/index.html
+++ b/public/develop/naas/lcm_rules_intro/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/nfv/intro/index.html b/public/develop/naas/nfv/intro/index.html
index b6a6973e..1cdb4a1a 100644
--- a/public/develop/naas/nfv/intro/index.html
+++ b/public/develop/naas/nfv/intro/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../gst_to_tmf.md" class="md-nav__link">
+      <a href="../../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/nfv/nfvcatalogs/index.html b/public/develop/naas/nfv/nfvcatalogs/index.html
index 42652fc4..d53a9f6e 100644
--- a/public/develop/naas/nfv/nfvcatalogs/index.html
+++ b/public/develop/naas/nfv/nfvcatalogs/index.html
@@ -905,7 +905,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../gst_to_tmf.md" class="md-nav__link">
+      <a href="../../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/nfv/nfvservices/index.html b/public/develop/naas/nfv/nfvservices/index.html
index 6f345973..60637004 100644
--- a/public/develop/naas/nfv/nfvservices/index.html
+++ b/public/develop/naas/nfv/nfvservices/index.html
@@ -916,7 +916,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../gst_to_tmf.md" class="md-nav__link">
+      <a href="../../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/resource_catalog/index.html b/public/develop/naas/resource_catalog/index.html
index 6f22aabd..7ceb877e 100644
--- a/public/develop/naas/resource_catalog/index.html
+++ b/public/develop/naas/resource_catalog/index.html
@@ -15,7 +15,7 @@
         <link rel="canonical" href="https://osl.etsi.org/develop/naas/resource_catalog/">
       
       
-        <link rel="prev" href="../service_inventory/">
+        <link rel="prev" href="../gst_to_tmf/">
       
       
         <link rel="next" href="../resource_spec/">
@@ -916,7 +916,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2676,7 +2676,7 @@
       <nav class="md-footer__inner md-grid" aria-label="Footer" >
         
           
-          <a href="../service_inventory/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Service Inventory">
+          <a href="../gst_to_tmf/" class="md-footer__link md-footer__link--prev" aria-label="Previous: GSMA GST to TMF Service">
             <div class="md-footer__button md-icon">
               
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
@@ -2686,7 +2686,7 @@
                 Previous
               </span>
               <div class="md-ellipsis">
-                Service Inventory
+                GSMA GST to TMF Service
               </div>
             </div>
           </a>
diff --git a/public/develop/naas/resource_inventory/index.html b/public/develop/naas/resource_inventory/index.html
index c4188eb9..5ffcd73e 100644
--- a/public/develop/naas/resource_inventory/index.html
+++ b/public/develop/naas/resource_inventory/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/resource_spec/index.html b/public/develop/naas/resource_spec/index.html
index 16750af1..3f5f0a48 100644
--- a/public/develop/naas/resource_spec/index.html
+++ b/public/develop/naas/resource_spec/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/service_catalog/index.html b/public/develop/naas/service_catalog/index.html
index 7340f8a4..d54aab5e 100644
--- a/public/develop/naas/service_catalog/index.html
+++ b/public/develop/naas/service_catalog/index.html
@@ -916,9 +916,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -1003,7 +1003,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2742,9 +2742,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2795,7 +2795,7 @@ endpoint examples:
 <li>Service Catalog Integration: Add to Service Catalog the XXXX service  with all relevant details.</li>
 <li>Service Delivery/Order: Provision Service by Using the orchestration system to provision and configure the XXXX service based on customer orders.</li>
 </ul>
-<h2 id="whats-next">What's next</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>Read the model of Service Catalogs in TMF <a href="https://www.tmforum.org/resources/specification/tmf633-service-catalog-api-user-guide-v4-0-0/">TMF633 Service Catalog API User Guide v4.0.0</a></li>
 <li>Check a demo of the API <a href="http://portal.openslice.io/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0">here</a></li>
diff --git a/public/develop/naas/service_inventory/index.html b/public/develop/naas/service_inventory/index.html
index 59ec3e22..35ab7845 100644
--- a/public/develop/naas/service_inventory/index.html
+++ b/public/develop/naas/service_inventory/index.html
@@ -18,7 +18,7 @@
         <link rel="prev" href="../service_ordering/">
       
       
-        <link rel="next" href="../resource_catalog/">
+        <link rel="next" href="../gst_to_tmf/">
       
       
       <link rel="icon" href="../../images/favicon.png">
@@ -970,9 +970,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -994,7 +994,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2724,9 +2724,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2761,7 +2761,7 @@
 </code></pre>
 <p>endpoint examples:</p>
 <p>/serviceInventory/v4/service List or find Service objects</p>
-<h2 id="whats-next">What's next</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>See <a href="../../service_ordering/ordering_services/">Ordering Services from catalogs</a></li>
 <li>See <a href="../../service_design/intro/">Service Design</a></li>
@@ -2818,13 +2818,13 @@
         
         
           
-          <a href="../resource_catalog/" class="md-footer__link md-footer__link--next" aria-label="Next: Resources Catalogs">
+          <a href="../gst_to_tmf/" class="md-footer__link md-footer__link--next" aria-label="Next: GSMA GST to TMF Service">
             <div class="md-footer__title">
               <span class="md-footer__direction">
                 Next
               </span>
               <div class="md-ellipsis">
-                Resources Catalogs
+                GSMA GST to TMF Service
               </div>
             </div>
             <div class="md-footer__button md-icon">
diff --git a/public/develop/naas/service_ordering/index.html b/public/develop/naas/service_ordering/index.html
index a8f0e592..8bb7247d 100644
--- a/public/develop/naas/service_ordering/index.html
+++ b/public/develop/naas/service_ordering/index.html
@@ -931,9 +931,27 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#ui-management" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      UI management
+    </span>
+  </a>
+  
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#api-exposed" class="md-nav__link">
+    <span class="md-ellipsis">
+      API exposed
+    </span>
+  </a>
+  
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#probe-further" class="md-nav__link">
+    <span class="md-ellipsis">
+      Probe further
     </span>
   </a>
   
@@ -976,7 +994,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2688,9 +2706,27 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#ui-management" class="md-nav__link">
+    <span class="md-ellipsis">
+      UI management
+    </span>
+  </a>
+  
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#api-exposed" class="md-nav__link">
+    <span class="md-ellipsis">
+      API exposed
+    </span>
+  </a>
+  
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2721,7 +2757,15 @@
 <p>Ongoing monitoring and other actions can be performed by the Life Cycle management rules</p>
 <p><i><strong><em>Future developments</em></strong>: 
 In future releases it might be possible the ongoing monitoring and support provided to ensure continuous performance and reliability. The service could undergoe a series of tests to ensure it meets the specified performance metrics and SLAs before delivering</i></p>
-<h2 id="whats-next">What's next</h2>
+<h2 id="ui-management">UI management</h2>
+<p>Through the menu and dedicated forms the administrator can manage the Service Orders. Various examples in this document will guide you to the usage and the management of the Service Orders.</p>
+<h2 id="api-exposed">API exposed</h2>
+<p>When installing OpenSlice the API endpoints can be browsed at: </p>
+<pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-641-ServiceOrdering-v4.0.0
+</code></pre>
+<p>endpoint examples:</p>
+<p>/serviceOrdering/v4/serviceOrder List or find ServiceOrder objects</p>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>See <a href="../../service_ordering/ordering_services/">Ordering Services from catalogs</a></li>
 <li>See <a href="../../service_design/intro/">Service Design</a></li>
diff --git a/public/develop/naas/service_spec/index.html b/public/develop/naas/service_spec/index.html
index 92beec83..09aaaf7f 100644
--- a/public/develop/naas/service_spec/index.html
+++ b/public/develop/naas/service_spec/index.html
@@ -964,9 +964,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -1030,7 +1030,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2796,9 +2796,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2863,7 +2863,7 @@
 <ul>
 <li>Service Definition:  Create a service specification template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li>
 </ul>
-<h2 id="whats-next">What's next</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>Read the model of Service Catalogs in TMF <a href="https://www.tmforum.org/resources/specification/tmf633-service-catalog-api-user-guide-v4-0-0/">TMF633 Service Catalog API User Guide v4.0.0</a></li>
 <li>Check a demo of the API <a href="http://portal.openslice.io/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0">here</a></li>
diff --git a/public/develop/naas/so_intro/index.html b/public/develop/naas/so_intro/index.html
index c9343c2e..ed000f00 100644
--- a/public/develop/naas/so_intro/index.html
+++ b/public/develop/naas/so_intro/index.html
@@ -75,6 +75,11 @@
     <label class="md-overlay" for="__drawer"></label>
     <div data-md-component="skip">
       
+        
+        <a href="#service-orchestration" class="md-skip">
+          Skip to content
+        </a>
+      
     </div>
     <div data-md-component="announce">
       
@@ -911,7 +916,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -1089,6 +1094,19 @@
       <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
       
       
+        
+      
+      
+        <label class="md-nav__link md-nav__link--active" for="__toc">
+          
+  
+  <span class="md-ellipsis">
+    Introduction
+  </span>
+  
+
+          <span class="md-nav__icon md-icon"></span>
+        </label>
       
       <a href="./" class="md-nav__link md-nav__link--active">
         
@@ -1100,6 +1118,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="#intended-audience-service-designers" class="md-nav__link">
+    <span class="md-ellipsis">
+      Intended Audience: Service Designers
+    </span>
+  </a>
+  
+</li>
+      
+    </ul>
+  
+</nav>
+      
     </li>
   
 
@@ -2614,6 +2660,25 @@
   
   
   
+    
+  
+  
+    <label class="md-nav__title" for="__toc">
+      <span class="md-nav__icon md-icon"></span>
+      Table of contents
+    </label>
+    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+      
+        <li class="md-nav__item">
+  <a href="#intended-audience-service-designers" class="md-nav__link">
+    <span class="md-ellipsis">
+      Intended Audience: Service Designers
+    </span>
+  </a>
+  
+</li>
+      
+    </ul>
   
 </nav>
                   </div>
@@ -2628,9 +2693,13 @@
                   
 
 
-  <h1>Introduction</h1>
-
-
+<h1 id="service-orchestration">Service Orchestration</h1>
+<ul>
+<li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with underlying controller components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li>
+</ul>
+<h2 id="intended-audience-service-designers">Intended Audience: Service Designers</h2>
+<p>OpenSlice end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, Network as a Service (NaaS) OpenSlice automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers.</p>
+<p>This section provides an overview of the Service Orchestration process</p>
 
 
 
diff --git a/public/develop/naas/so_servicespec_to_services_kubernetes/index.html b/public/develop/naas/so_servicespec_to_services_kubernetes/index.html
index 8a607db0..28d7ea3a 100644
--- a/public/develop/naas/so_servicespec_to_services_kubernetes/index.html
+++ b/public/develop/naas/so_servicespec_to_services_kubernetes/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/naas/so_servicespec_to_services_nfv/index.html b/public/develop/naas/so_servicespec_to_services_nfv/index.html
index e200c09b..4ab37193 100644
--- a/public/develop/naas/so_servicespec_to_services_nfv/index.html
+++ b/public/develop/naas/so_servicespec_to_services_nfv/index.html
@@ -911,7 +911,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../gst_to_tmf.md" class="md-nav__link">
+      <a href="../gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/nfvoconfig/index.html b/public/develop/nfvoconfig/index.html
index 5f47d102..9a04fdba 100644
--- a/public/develop/nfvoconfig/index.html
+++ b/public/develop/nfvoconfig/index.html
@@ -928,7 +928,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/ole_keycloak_management/index.html b/public/develop/ole_keycloak_management/index.html
index cdab09ef..5a237601 100644
--- a/public/develop/ole_keycloak_management/index.html
+++ b/public/develop/ole_keycloak_management/index.html
@@ -905,7 +905,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/portals_intro/index.html b/public/develop/portals_intro/index.html
index b4c947cf..de10a28d 100644
--- a/public/develop/portals_intro/index.html
+++ b/public/develop/portals_intro/index.html
@@ -928,7 +928,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/role_keycloak_management/index.html b/public/develop/role_keycloak_management/index.html
index fcb16d9b..ba9e15c7 100644
--- a/public/develop/role_keycloak_management/index.html
+++ b/public/develop/role_keycloak_management/index.html
@@ -967,7 +967,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/search/search_index.json b/public/develop/search/search_index.json
index 9701c7ee..bf03c486 100644
--- a/public/develop/search/search_index.json
+++ b/public/develop/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"<p>version: 2024Q2 - SNAPSHOT</p> <p>The ETSI Software Development Group for OpenSlice (SDG OSL) is developing an open-source service-based Operations Support System (OSS) to deliver Network as a Service (NaaS) following specifications from major SDOs including ETSI, TM Forum and GSMA.</p>"},{"location":"#usage","title":"Usage","text":"<p>OpenSlice can be used in managing 5G network services from the user device to the core network and cloud as well as for Orchestrating cloud resources across private and public clouds for enterprise applications.  OpenSlice is capable of supporting most of the features of an end-to-end (E2E) service orchestration framework while many of them will be more mature in future releases. The following figure displays the general usage of OpenSlice. </p> <p></p> <p>The image illustrates how OpenSlice supports the idea of an E2E network service orchestration framework by integrating multiple network components and layers, from user devices at the edge to radio, transport networks, core and public cloud services, ensuring seamless, secure, and efficient delivery of network services. Assuming that there are domain controllers for all the above domains OpenSlice can create the end-to-end service via the domain controllers by following the process of creating and deploying the end-to-end service by implementing transformations, and consuming APIs from various network entities. OpenSlice, in a nutchell, offers user interfaces where users can interact with the framework to order, expose, and manage service catalogs, services and resources that can be ordered, following business logic and policies and exposed through the APIs. </p>"},{"location":"#an-end-to-end-e2e-service-orchestration-framework","title":"An end-to-end (E2E) service orchestration framework","text":"<p>An end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, especially, Network as a Service (NaaS) a comprehensive system is needed that automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers. Such E2E frameworks enable users to consume network services on-demand, similar to how cloud computing services are consumed. Some key components and features of such frameworks are:</p> <ul> <li>Service Catalogs including predefined Network Services based on service templates for common network services like 5G core functions, 5G slices, VPNs, SD-WAN, firewalls, load balancers, etc. as well as custom Network services with Options for users to define their own network configurations.</li> <li>User Interface (UI) and APIs exposure, offering both a Self-Service Portal that allows users to request, configure, and manage network services as well as APIs for enabling programmatic access to network services for integration with other systems and automation scripts.</li> <li>Service Design and Creation tharough service templates based on predefined models for creating services.</li> <li>Automation and Workflow Management via Orchestration Engines, supporting  Process Automation for automating repetitive tasks and processes,  workflow management and orchestration for automating the provisioning, configuration, and management of network services while coordinating multiple workflows to ensure services are delivered efficiently, ensuring that services comply with predefined policies and standards.</li> <li>Standardized API exposure for seamless integration with different systems and services and APIs transformation support for converting data formats and protocols to ensure compatibility and information exhange between systems during workflows orchestration</li> <li>Service and Resource management and Orchestration while including the capability of multi-domain coordination in managing services/resources across different domains like cloud, 5G core, radios, transport network, and edge including dynamic allocation with adjusting resources based on demand and service requirements. To accomplish the above advanced technologies need to be exploited like, Containerized workloads,  Network Function Virtualization (NFV) which uses virtualized network functions to provide services like routing, switching, and security and Software-Defined Networking (SDN) which Controls the network programmatically to dynamically manage traffic and resources.</li> <li>Monitoring and Analytics including  Service Monitoring while continuously tracking the performance and health of services with capabilities to analyse data to optimize service delivery and predict issues. Real-Time Monitoring is also needed for tracking the performance and health of network services enabling analytics that provide insights for optimization and troubleshooting.</li> <li>Security and Access Control for ensuring only authorized users and systems can access network services. while implementing rules and policies to comply with regulatory requirements.</li> </ul>"},{"location":"#an-e2e-service-orchestration-workflow","title":"An E2E service orchestration workflow","text":"<p>In general an E2E service orchestration workflow includes the following phases:</p> <ul> <li>Service Request: Users or systems request a network service through the self-service portal or API. The request can specify details such as bandwidth, security features, geographic coverage, and duration.</li> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with the underlying components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> <li>Provisioning and Configuration: Services, network resources and network functions (VNFs) are instantiated and configured according to the service request during Service Orchestration through the orchestration engine. Other controllers manage their own domains, for example SDN controllers, manage the flow of data through the network to ensure optimal performance and adherence to policies, RAN controllers manage the RAN resoruces, Containerized controllers manage their workload, etc</li> <li>Service Delivery: The E2E network service is activated and made available to the user. Continuous monitoring ensures the service operates as expected, with automatic adjustments made as necessary.</li> <li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> <li>At the end of the service period, resources are decommissioned and reclaimed.</li> </ul>"},{"location":"#openslice-for-service-providers","title":"OpenSlice for Service Providers","text":"<p>OpenSlice is used by Service Providers to design Network Services, expose them in Service Catalogues and make them available for Service Orders. OpenSlice then can perform the E2E service orchestration workflow.</p> <p>There are various portals offering UI friendly access to users acting as Service Providers:</p> <ul> <li>The Services portal allows Service Providers to design and expose services.</li> <li>The Resource portal allows users to access resource specifications and running resources in resource inventory.</li> <li>The NFV portal allows users to manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Providers to manage test artifacts</li> <li>The Products portal allows Service Providers to expose services as products</li> </ul>"},{"location":"#openslice-for-service-consumers","title":"OpenSlice for Service Consumers","text":"<p>OpenSlice allows Service Consumers to browse the available offered service specifications in a self-service manner. It also supports TMFORUM Northbound APIs  regarding Service Catalog Management, Ordering, Resource, etc. There are various portals offering UI friendly access to users acting as Service Consumers:</p> <ul> <li>The Services portal allows Service Consumers to select and order predefined services.</li> <li>The Resource portal allows users to access running resources in resource inventory.</li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Consumers to manage test artifacts</li> <li>The Products portal allows Service Consumers to expose services as products</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>"},{"location":"#live-demo","title":"Live Demo","text":"<p>Check a live demo of OpenSlice in the following pages:</p> <p>(username=admin, password=openslice  or username=admin, password=changeme)</p> <ul> <li>OpenSlice demo: http://portal.openslice.io/</li> <li>OpenSlice Service Catalogs and ordering: http://portal.openslice.io/services/</li> <li>OpenSlice NFV Services onboarding: http://portal.openslice.io/nfvportal </li> </ul>"},{"location":"#whats-next","title":"What's next","text":"<p>Installing OpenSlice. See the Deployment of OpenSlice</p> <p>Lear more on how OpenSlice supports Network as a Service(NaaS)</p> <p>Who is implementing OpenSlice? See OSL ETSI SDG</p> <p>How OpenSlice works? See the Architecture of OpenSlice</p>"},{"location":"OpenSlice_deployment_examples/","title":"OpenSlice deployment examples","text":"<p>Here are some examples from past and current efforts that use OpenSlice in various cases.</p>"},{"location":"OpenSlice_deployment_examples/#5ginfire-eu-project2018","title":"5GinFIRE EU project(2018)","text":"<ul> <li>MultiVIM approach</li> <li>9 Testbeds</li> <li>Automotive, Smart City, eHeath, \u000bPPDR, Media, SDR, Cloud</li> <li>22 Experiment proposals from Verticals</li> <li>100+ Users</li> <li>VxF catalog: </li> <li>150+ ONBOARDED VxFs</li> <li>OSM TWO, FOUR, FIVE</li> <li>50+ are public to be reused</li> <li>NSD catalog: </li> <li>90+ ONBOARDED NSDs</li> <li>30+ are public to be reused</li> <li>500+ Deployment requests \u000b(orchestrations) performed</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5g-vinni-eu-project-2020","title":"5G-VINNI  EU project (2020)","text":"<ul> <li>Multi-vendor challenge \u2013 Commercial and opensource</li> <li>5G services on multiple sites</li> <li>Introduction of TMFORUM models and APIs </li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5gasp-eu-project-2021-2024","title":"5GASP  EU project (2021-2024)","text":"<ul> <li>Support a multi-site CI/CD testing automated DevOps cycle for network Applications</li> <li>Multiple NFVOs</li> <li>Introducing Service Test models</li> <li>Introducing the Product models for a network application marketplace</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#fidal-eu-project-2023-","title":"FIDAL EU project (2023-)","text":"<ul> <li>Support multi-site automated testing</li> <li>Multiple testbeds/ different APIs</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#across-eu-project-2023-","title":"ACROSS EU project (2023-)","text":"<ul> <li>Used as a cross-domain orchestrator</li> <li>Support the multi-domain orchestrator</li> <li>Support Zero-touch provisioning concepts</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#incode-eu-project-2023-","title":"INCODE EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#imagineb5g-eu-project-2023-","title":"IMAGINEB5G EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul>"},{"location":"OpenSlice_deployment_examples/#etsi-zsm-poc-2","title":"ETSI ZSM PoC #2","text":"<ul> <li>Automated Network Slice Scaling in Multi-Site Environments</li> </ul> <p>[</p>"},{"location":"alarms_actions/","title":"Alarms","text":"<p>In Openslice parts of TMF642 Alarm Management API are currently implemented. Alarms can be managed through the TMF API endpoint as well as the UI.</p>"},{"location":"alarms_actions/#alarms-and-actions","title":"Alarms and Actions","text":"<p>Note: Actions is an experimental feature. We expect to have a more mature solution in future. The component in the architecture is the Openslcie Assurance Services</p> <p>Alarms can be automatically resolved by specific actions. Today only the following actions are offered.</p> <ul> <li>execDay2</li> <li>scaleServiceEqually</li> </ul>"},{"location":"alarms_actions/#execday2","title":"execDay2","text":"<p>Usually used to perform a Day2 configuration (towards OSM). To use it, Create a New Action Specification Name=execDay2 as following</p> <p></p> <p>Now make a Service Order for your service. In this example \u03c2\u03b5 used a cirros NSD</p> <p>Create a  New Action Rule for the running services as the following example:</p> <p></p> <p>The scope is the running cirros service. </p> <p>Params should be paramname=value;paramname2=value2;paramname3=value3 (must exist in the VNF otherwise OSM will raise an error).</p> <p>In this case should be filename=test.txt</p> <p>Primitive=touch</p> <p>ServiceId = select the service which will accept the Day2. In this case is the same</p> <p>To test it:</p> <p>Go to the Service Inventory and select the active Service.</p> <p>Note the UUID of the service (e.g. c4e7990a-e174-4cd2-9133-b10e56721e08 copy from address bar),  DeploymentRequestID and NSDID from characteristics</p> <p>You can either use the UUID of the service or the DeploymentRequestID  and POST to the Alarms endpoint ( /tmf-api/alarmManagement/v4/alarm)</p> <p>If the DeploymentRequestID  is used then POST:</p> <pre><code>\n{\n  \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n  \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n  \"state\": \"raised\",\n  \"alarmType\": \"qualityOfServiceAlarm\",\n  \"probableCause\": \"thresholdCrossed\",\n  \"ackState\": \"unacknowledged\",\n  \"perceivedSeverity\": \"major\",\n  \"sourceSystemId\": \"mano-client-service\",\n  \"alarmDetails\": \"NSID=3;DeploymentRequestID=1\",\n  \"specificProblem\": \"myalram raised\"\n}\n\n</code></pre> <p>If the UUID is used then POST:</p> <pre><code>\n{\n  \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n  \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n  \"state\": \"raised\",\n  \"alarmType\": \"qualityOfServiceAlarm\",\n  \"probableCause\": \"thresholdCrossed\",\n  \"ackState\": \"unacknowledged\",\n  \"perceivedSeverity\": \"major\",\n  \"sourceSystemId\": \"mano-client-service\",\n  \"alarmDetails\": \"analarm\",\n  \"specificProblem\": \"myalram raised\",\n  \"affectedService\": [\n    {\n      \"id\": \"c4e7990a-e174-4cd2-9133-b10e56721e08\"\n    }\n  ]\n\n}\n\n</code></pre> <p>The Alarm to be created must have the affected Service ID equal to the running service from the scope (the cirros_ns)</p> <p>Go to service inventory you will see the notes and also the service characteristics for any  EXEC_ACTION updates</p> <p>You can also adjust the alarm conditions. They must match true so the alarm to be acknowledged So if another external service raises an Alarm (with POST) for the running service, a Day2 will be performed on another Service</p>"},{"location":"alarms_actions/#scaleserviceequally","title":"scaleServiceEqually","text":"<p>This action is used from getting a scaling event from OSM. Please see the next demo for details on how it works</p>"},{"location":"alarms_actions/#prototype-demo","title":"Prototype demo","text":"<p>You can watch how we used the prototype on the following ETSI ZMS PoC #2</p> <ul> <li>ETSI ZMS PoC #2: https://www.etsi.org/events/1905-webinar-zsm-poc-2-showcase-automated-network-slice-scaling-in-multi-site-environments/</li> </ul>"},{"location":"catalogs/","title":"Catalogs and Templates","text":"<p>The Openslice Service Catalogue (accessible through the API or Services portal) contains the representation of Service Specifications, either created from the provider defining service attributes, or by supporting the GSMA Generic Slice Templates (GST) as well as the VINNI Service Blueprint. The following scenarios are supported by the Openslice Service Catalogue.</p>"},{"location":"catalogs/#createdesign-a-service-specification","title":"Create/Design a Service Specification","text":""},{"location":"catalogs/#first-import-some-resources-as-resource-facing-services-rfss","title":"First Import some Resources as Resource Facing Services (RFSs)","text":"<p>If you have any NSDs as NFV artifacts, import them through the UI menu (Import from NSD list). Then an NSD is imported as a resource and an RFS automatically is created. RFSs then later are used to design a Customer Facing Service Specification</p>"},{"location":"catalogs/#createdesign-a-customer-facing-service-specification","title":"Create/Design a Customer Facing Service Specification","text":"<p>Customer Facing Service Specification are the services offered to customers.  You can create a new Service Specification from the menu. The services created through the UI are Customer Facing Services (CFS). Usually you create a CFS as a bundle and then you include Service Specification Relationships with RFSs or/and CFSs.</p> <p>Any Service Specification Characteristics from the RFS are copied to the CFS specification. A CFS can include multiple RFS or/and CFSs. For example you can create a CFS spec called \"A 5G Service\" which is a bundle of two other services (include them in Service Specification Relationships) such as 5G eMBB Slice and a Customer VPN. So when the user orders  \"A 5G Service\"  services from 5G eMBB Slice and a Customer VPN will be created during the order.</p>"},{"location":"catalogs/#initial-configuration-for-osm-deployment","title":"Initial configuration for OSM deployment","text":"<p>if you have an initial configuration that needs to be applied in the NSD deployment, then you go to the RFS (or CFS) and in Service Specification Characteristics go and edit the OSM_CONFIG characteristic.  You can add in the Service Characteristic Value, in the Value field something like the following example which gives a floating IP to a VNF:</p> <pre><code>{ \"nsdId\": \"e855be91-567b-45cf-9f86-18653e7ea\", \"vimAccountId\": \"4efd8bf4-5292-4634-87b7-7b3d49108\" , \"vnf\": [ {\"member-vnf-index\": \"1\", \"vdu\": [ {\"id\": \"MyCharmedVNF-VM\", \"interface\": [{\"name\": \"eth0\", \"floating-ip-required\": true }]}]}]}\n\n</code></pre> <p>or a more complex example (beautify it first if you want to view it, but in the parameter OSM_CONFIG must be minified like the example):</p> <pre><code>{\"nsdId\":\"e855be91-567b-45cf-9f86-18653e7\",\"vimAccountId\":\"4efd8bf4-5292-4634-87b7-7b3d491\",\"vnf\":[{\"member-vnf-index\":\"1\",\"vdu\":[{\"id\":\"haproxy_vdu\",\"interface\":[{\"name\":\"haproxy_vdu_eth1\",\"floating-ip-required\":true}]}]}],\"vld\":[{\"name\":\"pub_net\",\"vim-network-name\":\"OSMFIVE_selfservice01\"},{\"name\":\"management\",\"vim-network-name\":\"OSMFIVE_selfservice01\"},{\"name\":\"lba_net\",\"vim-network-name\":\"lba_net\",\"vnfd-connection-point-ref\":[{\"member-vnf-index-ref\":\"1\",\"vnfd-connection-point-ref\":\"haproxy_private\",\"ip-address\":\"192.168.28.2\"}]},{\"name\":\"backend_net\",\"vim-network-name\":\"backend_net\",\"vnfd-connection-point-ref\":[{\"member-vnf-index-ref\":\"3\",\"vnfd-connection-point-ref\":\"haproxy_public\",\"ip-address\":\"192.168.20.2\"}]},{\"name\":\"lb_sb_net\",\"vim-network-name\":\"lb_sb_net\",\"vnfd-connection-point-ref\":[{\"member-vnf-index-ref\":\"3\",\"vnfd-connection-point-ref\":\"haproxy_private\",\"ip-address\":\"192.168.28.2\"}]},{\"name\":\"breaking_point_Spain\",\"vim-network-name\":\"sb_repo_net\"},{\"name\":\"breaking_point_Greece\",\"vim-network-name\":\"5TONICexternal\"}],\"additionalParamsForVnf\":[{\"member-vnf-index\":\"2\",\"additionalParams\":{\"target_IP\":\"192.168.20.2\"}},{\"member-vnf-index\":\"4\",\"additionalParams\":{\"target1_IP\":\"192.168.21.2\",\"target2_IP\":\"10.154.252.10\"}}]}\n</code></pre> <p>You can leave the Alias and Unit of Measure as is. Check also the is Default.</p>"},{"location":"catalogs/#day-2-primitive-actions","title":"Day 2 Primitive Actions","text":"<p>NFVOs like OSM allow to perform actions while a service is running, for example change attributes or make actions on a specific VNF. To design this do something similar to the following example:</p> <ul> <li>Go to the RFS related to the NSD that contains VNFs with primitives</li> <li>create a characteristic named Primitive:: , e.g. Primitive::touch <li>select Value Type: ARRAY</li> <li>add Service Characteristic Value: i) alias=primitive, value= (e.g. touch), ii)  alias=member_vnf_index, value= (e.g. 1), iii) add the params that the user will change in alias the name of param and in value an initial value (e.g. alias=filename, value=myfile.txt) <p>In the above example, when the service is running and the user goes to service inventory to MODIFY it, changes the value of the alias=filename, value=myfile.txt, to value =secondfile.txt. Then inside the VNF a file will be created called secondfile.txt</p>"},{"location":"catalogs/#generic-slice-templates-gst","title":"Generic Slice Templates (GST)","text":"<p>(Offered only as a design for now. THere is no direct implementation to NFV) On October 16th 2019 GSMA published NG.116  Version 2.0 which defines the Generic Network Slice Template (GST). GST is a set of attributes that can characterise a type of network slice/service. GST is generic and is not tied to any specific network deployment. Here is a list of the various attributes of the template:</p> <ul> <li>Availability</li> <li>Area of Service</li> <li>Delay tolerance</li> <li>Deterministic communication</li> <li>Downlink throughput per network slice</li> <li>Downlink throughput per UE</li> <li>Energy efficiency</li> <li>Group communication support</li> <li>Isolation level</li> <li>Location based message delivery</li> <li>Maximum supported packet size</li> <li>Mission critical support</li> <li>MMTel support</li> <li>NB-IoT support</li> <li>Network Slice Customer network functions</li> <li>Number of connections</li> <li>Number of terminals</li> <li>Performance monitoring</li> <li>Performance prediction</li> <li>Positioning support</li> <li>Radio spectrum</li> <li>Reliability</li> <li>Root cause investigation</li> <li>Session and Service Continuity support </li> <li>Simultaneous use of the network slice</li> <li>Slice quality of service parameters</li> <li>Support for non-IP traffic </li> <li>Supported access technologies </li> <li>Supported device velocity </li> <li>Synchronicity</li> <li>Terminal density </li> <li>Uplink throughput per network slice </li> <li>Uplink throughput per UE</li> <li>User management openness</li> <li>User data access </li> <li>V2X communication mode</li> </ul> <p>Openslice offers the GST in a format that is machine readable and aligned with the TMF SID model. Here is a tentative approach in JSON : https://github.com/openslice/org.etsi.osl.tmf.api/blob/master/src/main/resources/gst.json</p> <p>Providers can clone a GST as e NEST directly in Openslice Web portal and the adjust the default attributes to their Service Specification</p>"},{"location":"catalogs/#5g-vinni-service-blueprint","title":"5G-VINNI Service Blueprint","text":"<p>(Offered only as a design for now. THere is no direct implementation to NFV) 5G-VINNI Service Blueprint is a special Service Specification defined by teh 5G-VINNI project. Many details can be found in document https://zenodo.org/record/3345612</p> <p>5G-VINNI Service Blueprint is a reusable self-contained specification of required network slice service (instances). As described in GST mapping VINNI-SB is also machine readable. </p> <p>Here is a tentative approach in JSON : https://github.com/openslice/org.etsi.osl.tmf.api/tree/master/src/main/resources/vinnisb</p> <p>5G-VINNI SB has many commonalities with GST as well as it offers Testing as a Service attributes.</p> <p>Next figure presents the high-level object model of a 5G-VINNI service blueprint.</p> <p>The 5G-VINNI SB as a first prototype approach is conceived as a CFS of a \u2018bundle\u2019 of services. It has some characteristics, like name, description, service type (eMBB, etc) and others. The constituent services are:</p> <ul> <li>A \u201cService Topology\u201d Service Specification which is related to a Network Service Resource topology (a Logical Resource Spec). It is considered at this stage as an RFS but is subject to change in future</li> <li>A \u201cVINNI SB Service Requirements\u201d Service Specification which is related to Service requirements. This is very similar to GST. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 1\u201d Service Specification which contains characteristics for service exposure on level 1 ( see D3.1 for details). It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 2\u201d Service Specification which contains characteristics for service exposure on level 2. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 3\u201d Service Specification which contains characteristics for service exposure on level 3. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 4\u201d Service Specification which contains characteristics for service exposure on level 4. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service 3rd part VNF\u201d Service Specification which contains characteristics for support 3rd party VNFs to be included in the service. It is considered at this stage as an RFS but is subject to change in future</li> <li>A \u201cVINNI SB Service 3rd part NSD\u201d Service Specification which contains characteristics for support 3rd party NSDs to be included in the service. It is considered at this stage as an RFS but is subject to change in future</li> <li>A \u201cVINNI SB Service Monitoring\u201d Service Specification which contains characteristics for offering Monitoring capabilities on the requested Service. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Testing\u201d Service Specification which contains characteristics for offering Testing capabilities on the requested Service. It is considered at this stage a CFS.</li> </ul> <p></p>"},{"location":"catalogs/#manage-a-service-specification","title":"Manage a Service Specification","text":"<p>You can manage them though the Web UI</p>"},{"location":"catalogs/#assign-a-service-specification-to-service-categories-and-publish","title":"Assign a Service Specification to Service Categories and Publish","text":"<p>Just create categories and from the menu select the category and add services</p>"},{"location":"catalogs/#retireremove-a-service-specification","title":"Retire/Remove a Service Specification","text":"<p>Delete it from the category</p>"},{"location":"catalogs/#consume-and-expose-service-specifications-from-other-service-catalogues","title":"Consume and expose Service Specifications from other Service Catalogues","text":"<p>See more on Consuming Services From External Partner Organizations</p>"},{"location":"config_intro/","title":"Configuring and managing OpenSlice","text":""},{"location":"config_intro/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This section provides information on how to configure and manage different aspect of OpenSlice while in operation. For example:</p> <ul> <li>Manage user roles and access in Keycloak</li> <li>Configure/Manage NFVOs</li> <li>Advanced configuration scenarios</li> </ul>"},{"location":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>Following, you may thorough guides depending on the installation type of your choice:</p> <ul> <li>Installing via Docker Compose guide</li> <li>Installing via Kubernetes guide</li> </ul>"},{"location":"deploymentCompose/","title":"OpenSlice Deployment Guide with Docker Compose","text":""},{"location":"deploymentCompose/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":""},{"location":"deploymentCompose/#requirements","title":"Requirements","text":""},{"location":"deploymentCompose/#hardware-requirements","title":"Hardware requirements:","text":"Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 30 GB storage 50 GB storage"},{"location":"deploymentCompose/#software-requirements","title":"Software Requirements:","text":"<ul> <li>Docker: A running environment for Docker Compose services</li> </ul>"},{"location":"deploymentCompose/#preparing-the-environment","title":"Preparing the environment","text":""},{"location":"deploymentCompose/#1-backup-your-previous-database-if-necessary","title":"1. Backup your previous database if necessary:","text":"<pre><code>sudo docker exec amysql /usr/bin/mysqldump -u root --password=letmein ostmfdb &gt; backup_ostmfdb.sql\n</code></pre>"},{"location":"deploymentCompose/#2-install-docker","title":"2. Install docker","text":"<p>Since July 2023 Docker Compose V1 stopped receiving updates. OpenSlice fully reverted to Compose V2, which is integrated in the Docker installation.</p>"},{"location":"deploymentCompose/#3-configure-containers-to-properly-resolve-the-dns-of-your-domain-optional","title":"3. Configure containers to properly resolve the DNS of your domain (optional)","text":"<pre><code>sudo nano /etc/docker/daemon.json\n</code></pre> <p>and add:</p> <pre><code>{ \n  \"dns\": [\"8.8.8.8\", \"8.8.4.4\"]\n}\n</code></pre> <p>After editing daemon.json restart docker daemon for the changes to take place</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deploymentCompose/#downloading-the-project","title":"Downloading the project","text":""},{"location":"deploymentCompose/#1-create-a-new-folder-to-download-the-project","title":"1. Create a new folder to download the project","text":"<pre><code>mkdir openslice\n</code></pre> <pre><code>cd openslice\n</code></pre>"},{"location":"deploymentCompose/#2-download-the-deployment-script","title":"2. Download the deployment script","text":"<p>Download the deployment / environment preparation script</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh\n</code></pre> <p>Make it executable</p> <pre><code>sudo chmod +x deploy.sh\n</code></pre>"},{"location":"deploymentCompose/#3-run-the-deployment-script","title":"3. Run the deployment script","text":"<p>OpenSlice is a multi repo project. This script selects the same branch for all repositories of the project to pull from.</p> <p>After that it builds the respective jar files locally and installs all the npm packages needed for the UI.</p> <p>If you run the script without selecting a branch the the main branch is going to be selected.</p> <p>We recommend:</p> <ul> <li>main branch for the most stable experience and</li> <li>develop branch for an experience with the latest features (for develop branch installation, it is strongly advisable that you may as well follow the develop documentation)</li> </ul> <pre><code>sudo ./deploy.sh develop #[or replace main with other branch name]\n</code></pre> <p>We recommend running the deploy.sh script with root permissions! In other case, some directories may not be accessible by the project building tools and hinder the smooth installation.</p>"},{"location":"deploymentCompose/#configure-docker-compose-services","title":"Configure Docker Compose services","text":""},{"location":"deploymentCompose/#1-create-configuration-specific-docker-compose-file-from-the-template","title":"1. Create configuration specific Docker Compose file from the template","text":"<pre><code>cd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo cp docker-compose.yaml.configure docker-compose.yaml\n</code></pre>"},{"location":"deploymentCompose/#2-configure-mysql-portal-container-optional","title":"2. Configure mysql-portal container (optional)","text":"<ol> <li>In folder <code>org.etsi.osl.main/compose/mysql-init</code> edit the file <code>01-databases.sql</code>.</li> <li>In the <code>org.etsi.osl.main/compose/docker-compose.yaml</code> edit the credentials of the users that services use to connect to the databases, if you wish.<ul> <li>portaluser (default is 12345) and</li> <li>keycloak (default is password)</li> </ul> </li> </ol>"},{"location":"deploymentCompose/#3-configure-keycloak-container-optional","title":"3. Configure keycloak container (optional)","text":"<ol> <li> <p>If you made changes to keycloak's mysql credentials:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code>.</p> </li> </ol> <pre><code>DB_DATABASE: keycloak\nDB_USER: keycloak\nDB_PASSWORD: password\n</code></pre> <ol> <li> <p>If you want to change the keycloak admin password:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> </li> </ol> <pre><code>KEYCLOAK_PASSWORD: Pa55w0rd\n</code></pre>"},{"location":"deploymentCompose/#4-configure-bugzilla-container-optional","title":"4. Configure bugzilla container (optional)","text":"<p>If you want to utilise the Bugzilla connector:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n  \"spring.activemq.brokerUrl\": \"tcp://anartemis:61616?jms.watchTopicAdvisories=false\",\n  \"spring.activemq.user\": \"artemis\",\n  \"spring.activemq.password\": \"artemis\",\n  \"bugzillaurl\":\"\",\n  \"bugzillakey\":\"\",\n  \"main_operations_product\":\"\"\n}'\n</code></pre> <p>And add the provided Bugzilla installation information:</p> <pre><code>\"bugzillaurl\":\"bugzillaurl.xx:443/bugzilla/\",\n\"bugzillakey\":\"exampleKeyeqNNwxBlgxZgMEIne0Oeq0Bz\",\n\"main_operations_product\":\"Main Site Operations\" // this is the default product to issue tickets\n</code></pre> <p>Bugzilla should have the following components under the specified product:  </p> <ul> <li>NSD Deployment Request: Component used to schedule deployment req  </li> <li>Onboarding: Issues related to VNF/NSD Onboarding  </li> <li>Operations Support: Default component for operations support  </li> <li>Validation: Use to track validation processes of VNFs and NSDs  </li> <li>VPN Credentials/Access: Used for requesting VPN Credentials/Access   </li> </ul> <p>Also in the 'Main Site Operations' product, a version named 'unspecified' must be created.</p>"},{"location":"deploymentCompose/#5-configure-osportalapi-container-nfv-services-conditional","title":"5. Configure osportalapi container (NFV services) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}, as well as \"spring.portal.main.domain\" property.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n  \"spring.datasource.username\":\"root\",\n  \"spring.datasource.password\":\"letmein\",\n  \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n  \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",  \n  \"spring.portal.main.domain\": \"http://localhost\",\n  \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#6-osscapi-container-tmf-api-service-conditional","title":"6. osscapi container (TMF API service) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n  \"spring.datasource.username\":\"root\",\n  \"spring.datasource.password\":\"letmein\",\n  \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n  \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",  \n  \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#configure-nginx","title":"Configure nginx","text":"<p>In folder <code>org.etsi.osl.main/compose/nginx</code> create a configuration specific <code>nginx.conf</code> file.</p> <pre><code>cd org.etsi.osl.main/compose/nginx/\n</code></pre> <pre><code>sudo cp nginx.conf.default nginx.conf\n</code></pre> <p>If needed, in the nginx.conf file, edit the server_name for an non-local deployment.</p>"},{"location":"deploymentCompose/#configure-web-ui","title":"Configure Web UI","text":"<p>In folder <code>org.etsi.osl.portal.web/src/js/</code> create a configuration specific <code>config.js</code> file.</p> <pre><code>cd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>sudo cp config.js.default config.js\n</code></pre> <p>Edit the <code>config.js</code> file with the information of your domain. <code>ROOTURL</code> will automatically extract the the Origin (Protocol://Domain:Port) of the deployment, but you must change <code>APIURL</code> property, if you are not aiming for a localhost installation, e.g. \"https://portal.openslice.io\".</p> <p>Example file:</p> <pre><code>{     \n  BUGZILLA: \"ROOTURL/bugzilla/\",\n  STATUS: \"ROOTURL/status/\",\n  APIURL: \"http://localhost\",\n  WEBURL: \"ROOTURL/nfvportal\",\n  APIOAUTHURL: \"ROOTURL/auth/realms/openslice\",\n  APITMFURL: \"ROOTURL/tmf-api/serviceCatalogManagement/v4\"\n}\n</code></pre>"},{"location":"deploymentCompose/#configure-tmf-web-ui","title":"Configure TMF Web UI","text":"<p>In the folder <code>org.etsi.osl.tmf.web/src/assets/config</code> there are 3 files available for configuration:</p> <ul> <li>config.prod.json (Basic information + API configuration)</li> <li>theming.scss (CSS color palette theming)</li> <li>config.theming.json (HTML configuration - Logo, Favicon, Footer)</li> </ul> <p>The first 2 files above (i.e. config.prod.json, theming.scss) are essential for the successful deployment of OpenSlice, thus created automatically during the initial deployment at <code>org.etsi.osl.tmf.web/src/assets/config</code> directory as a copy of the default ones from the remote repository.</p> <p>Ensure that you check the <code>config.prod.json</code> and <code>theming.scss</code> files and readjust to your deployment if needed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <p>E.g. You may edit \"TITLE\", \"WIKI\", etc properties with your domain title. Also configure TMF's API and Keycloak's location for the web application, if needed.</p> <p>Example file:</p> <pre><code>{         \n    \"TITLE\": \"OpenSlice by ETSI\",\n    \"PORTALVERSION\":\"2024Q2\",\n    \"WIKI\": \"https://osl.etsi.org/documentation\",\n    \"BUGZILLA\": \"{BASEURL}/bugzilla/\",\n    \"STATUS\": \"{BASEURL}/status/\",\n    \"WEBURL\": \"{BASEURL}\",\n    \"PORTAL_REPO_APIURL\": \"{BASEURL}/osapi\",\n    \"ASSURANCE_SERVICE_MGMT_APIURL\": \"{BASEURL}/oas-api\",\n    \"APITMFURL\": \"{BASEURL}/tmf-api\",\n    \"OAUTH_CONFIG\" : {\n        \"issuer\": \"{BASEURL}/auth/realms/openslice\",\n        \"loginUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/auth\",\n        \"tokenEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/token\",\n        \"userinfoEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/userinfo\",\n        \"redirectUri\": \"{BASEURL}/redirect\",\n        \"logoutUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/logout\", \n        \"postLogoutRedirectUri\": \"{BASEURL}\",\n\n        \"responseType\": \"code\",\n        \"oidc\": false,\n        \"clientId\": \"osapiWebClientId\",\n        \"dummyClientSecret\": \"secret\",\n\n        \"requireHttps\": false,\n        \"useHttpBasicAuth\": true,\n        \"clearHashAfterLogin\": false,\n\n        \"showDebugInformation\": true\n    }\n}\n</code></pre> <p>The {BASEURL} placeholder in the file automatically detects the Origin (Protocol://Domain:Port) of the deployment and applies it to every respective property. E.g. If you are attempting a local deployment of OpenSlice, then {BASEURL} is automatically translated to \"http://localhost\". Similarly, you may use {BASEURL} to translate to a public deployment configuration, e.g. \"https://portal.openslice.io\".</p> <p>If further customization, apart from the default provided, is needed for branding (Logo, Footer) then <code>config.theming.json</code> needs to be created in io.openslice.tmf.web/src/assets/config directory, as follows:</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>sudo cp config.theming.default.json config.theming.json\n</code></pre> <p>IMPORTANT NOTE: If you want to apply changes to the JSON configuration files without the need to rebuild the application, you have to apply the changes at the <code>org.etsi.osl.tmf.web/dist/io-openslice-portal-web/assets/config</code> directory. Although, it is mandatory to also apply these changes to the <code>org.etsi.osl.tmf.web/src/assets/config</code> for persistancy, as after any future rebuild of OpenSlice the <code>/dist</code> directory is being overwritten along with its contents. The OpenSlice team strongly recommends to always apply your changes to the TMF web UI configuration files at <code>org.etsi.osl.tmf.web/src/assets/config</code> and rebuild the application.</p>"},{"location":"deploymentCompose/#deploy-openslice-via-docker-compose","title":"Deploy OpenSlice via Docker Compose","text":"<p>After configuring the services, and editing the docker compose file accordingly, the docker compose instantiation command can be performed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo docker compose --profile prod down;sudo docker compose --profile prod up -d --build\n</code></pre> <p>Depending on your machine, this process might take time. if for any reason the deployment fails during first time, please rerun the above before any further measures.</p>"},{"location":"deploymentCompose/#validating-deployments-and-container-monitoring","title":"Validating deployments and container monitoring","text":"<p>You can monitor containers' status with portainer at port 9000 (http://your-ip:9000).</p> <p>Initially, you may monitor the local machine at portainer.</p> <p>Please check that all containers are in running state.</p>"},{"location":"deploymentCompose/#post-installation-steps","title":"Post installation steps","text":"<p>After the successful deployment of OpenSlice, to ensure the E2E user experience, this section is mandatory. It contains crucial configuration in regard of authentication and user creation.</p>"},{"location":"deploymentCompose/#configure-keycloak-server","title":"Configure Keycloak server","text":"<p>The Keycloack server is managing authentication and running on a container at port 8080. It is also proxied to your host via nginx under http://localhost/auth. </p> <ul> <li> <p>Navigate to http://domain.com/auth/ or https://domain.com/auth/, (http://ipaddress:8080/auth/ or https://ipaddress:8443/auth/ which are directly accessible without proxy) </p> </li> <li> <p>Navigate to Administration Console </p> </li> <li> <p>Login with the credentials from section Configure keycloak container. Default values are:</p> <ul> <li>user: admin and </li> <li>password: Pa55w0rd</li> </ul> </li> </ul> <p>if you are running in HTTP you will get a message: HTTPS required.</p> <p>To resolve this issue when running in HTTP: </p> <ul> <li>Select the master realm from top left corner</li> <li>Go to login Tab and select \"Require SSL\": None</li> <li>Repeat for realm Openslice</li> </ul> <p>If you are running in HTTPS, then \"Require SSL\" can be left unchanged to external requests.</p>"},{"location":"deploymentCompose/#1-configure-redirects","title":"1. Configure redirects","text":"<p>Navigate to realm Openslice &gt; Clients &gt; osapiWebClientId and change the Root URL to your domain. </p> <p>Also, insert your domain, e.g. http://example.org/*, at:</p> <ul> <li>Valid Redirect URIs</li> <li>Web Origins</li> </ul>"},{"location":"deploymentCompose/#2-configure-email","title":"2. Configure email","text":"<p>Keycloak allows new users to register. Subsequently, this will also allow new users to register to the OpenSlice portal.</p> <p>Navigate to realm Openslice &gt; Realm Settings &gt; Login Tab &gt; check User registration, Verify email, Forgot password etc.</p> <p>Finally, enter the details of the mail server at the Email Tab.</p> <p>Email configuration is optional for test runs, but if not provided the above functionalities (e.g. external user registration) will not be possible.</p>"},{"location":"deploymentCompose/#3-add-an-openslice-admin-user","title":"3. Add an OpenSlice admin user","text":"<p>This step is mandatory so as to access the OpenSlice Web UI. To add an OpenSlice admin user you must:</p> <ul> <li>Navigate to realm Openslice &gt; Users &gt; Add user</li> <li>Set a password</li> <li>Upon creation, navigate to Role Mappings and add ADMIN to Assigned Roles list</li> </ul> <p>That user is different from the Keycloak admin user. It is required to login and browse the OpenSlice Web UI. The Role ADMIN guarantee full access through the OpenSlice UI, thus such a user is always required.</p>"},{"location":"deploymentCompose/#keycloak-at-localhost","title":"Keycloak at localhost","text":"<p>This is an important step if you run Keycloak on localhost!</p> <p>1 - Edit your Hosts File, adding the line below</p> <p><code>127.0.0.1 keycloak</code></p> <p>Hosts File Location:</p> <ul> <li> <p>In Linux/Unix, the file's location is at /etc/hosts </p> </li> <li> <p>In Windows, its location is at c:\\Windows\\System32\\Drivers\\etc\\hosts</p> </li> </ul> <p>2 - Replace http://localhost/auth/ with http://keycloak:8080/auth/ in your Keycloak config for AngularJS and Angular (see examples below).</p> <p>Explanation</p> <p>Nginx uses the http://keycloak:8080 URL, which is accessible via the internal docker system's network. The Front-end (TS/Angular) shall also use the http://keycloak:8080. This way, you will not get the invalid token error, as the API is acquiring the token from http://keycloak:8080 (internally) and the Front-end is getting verified by an issuer at the same URL, as well.</p> <p>2.1 - For the Angular configuration (TMF portal UI), navigate to  org.etsi.osl.tmf.web/src/assets/config and edit config.prod.json</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>nano config.prod.json\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>{         \n  \"OAUTH_CONFIG\" : {\n      \"issuer\": \"http://keycloak:8080/auth/realms/openslice\",\n      \"loginUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n      \"tokenEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",\n      \"userinfoEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/userinfo\",\n      \"redirectUri\": \"{BASEURL}/redirect\",\n      \"logoutUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/logout\", \n      \"postLogoutRedirectUri\": \"{BASEURL}\",\n  }\n}\n</code></pre> <p>Note the difference in changing {BASEURL} -&gt; http://keycloak:8080</p> <p>If you want the changes to take place immediately without rebuilding the project, then repeat the process for org.etsi.osl.tmf.web/dist/org.etsi.osl.tmf.web/assets/config/config.prod.json</p> <p>2.2 - For the AngularJS configuration (NVF portal UI), navigate to org.etsi.osl.portal.web/src/js and edit config.js</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>nano config.js\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>var appConfig = angular.module('portalwebapp.config',[]);\n\n\nappConfig.factory('APIEndPointService', function() {\n   return {       \n      APIOAUTHURL: \"http://keycloak:8080/auth/realms/openslice\",\n   };\n});\n</code></pre> <p>Note the difference in \"APIOAUTHURL\" property, changing ROOTURL -&gt; http://keycloak:8080</p>"},{"location":"deploymentCompose/#nfv-orchestrator-configuration","title":"NFV Orchestrator Configuration","text":"<p>After successfully deploying and configuring OpenSlice, you may configure its environment (e.g. the NFVO) that will facilitate the deployment of NFV artifacts.</p> <p>See NFV Orchestrator Configuration.</p>"},{"location":"deploymentK8s/","title":"OpenSlice Deployment Guide with Kubernetes","text":""},{"location":"deploymentK8s/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"location":"etsi_osl/","title":"The ETSi SDG OSL","text":"<p>OpenSlice is developed by the OSL ETSI Software Development Group see more info</p>"},{"location":"history/","title":"History","text":""},{"location":"history/#history","title":"History","text":"<ul> <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project 5GinFIRE by University of Patras, Greece</li> <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project 5G-VINNI by University of Patras, Greece</li> <li>OpenSlice has been a part of OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Group since 2023</li> </ul>"},{"location":"history/#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use OpenSlice in your research</p> <pre><code>\n@misc{tranoris2021openslice,\n      title={Openslice: An opensource OSS for Delivering Network Slice as a Service}, \n      author={Christos Tranoris},\n      year={2021},\n      eprint={2102.03290},\n      archivePrefix={arXiv},\n      primaryClass={cs.NI}\n}\n\n\n</code></pre>"},{"location":"lcm/","title":"Lifecycle Management (LCM) Rules","text":"<ul> <li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li> </ul> <p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p> <ul> <li>PRE_PROVISION</li> <li>CREATION</li> <li>AFTER_ACTIVATION </li> <li>SUPERVISION </li> <li>AFTER_DEACTIVATION </li> </ul> <p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p> <p></p> <ul> <li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li> <li>CREATION rules: Run while the referenced service dependencies of a service are created</li> <li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li> <li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li> <li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li> </ul> <p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p> <ul> <li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li> <li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li> <li>Define complex OSM Configs based on other dependencies and passing variables</li> <li>Define any dependencies when creating the referenced services</li> <li>Dynamically include new service dependencies</li> <li>Create new service orders so include dynamically other services</li> <li>Call external (RESTful) services (via http(s), define payload, examine response)</li> </ul>"},{"location":"lcm/#examine-if-the-rules-are-executed-successfully","title":"Examine if the rules are executed successfully","text":"<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully  or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>"},{"location":"lcm/#lcm-rules-and-osom-service-orchestration","title":"LCM Rules and OSOM Service Orchestration","text":"<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p> <p></p>"},{"location":"lcm/#define-rules","title":"Define rules","text":"<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p> <p></p> <p>Execution order of rules on a specific phase is random</p> <ul> <li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li> </ul>"},{"location":"lcm/#definition-language","title":"Definition language","text":"<ul> <li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li> <li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li> </ul> <p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p> <p></p> <ul> <li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li> <li>On the right side the user can define some rule properties or observe the underlying generated java code.</li> </ul>"},{"location":"lcm/#the-blocks-library","title":"The blocks library","text":"<p>The following images describe some blocks found in the library.</p> <p>Blockly has syntax rules. It helps with colours to define them. </p> <p>So for example a parameter that is a Number cannot be \"glued\" with a String. Will need some conversion first</p> <p> </p>"},{"location":"lcm/#examples-of-rules","title":"Examples of Rules","text":"<p>The following images provide some examples of rules.</p>"},{"location":"lcm/#define-variables-according-to-cases","title":"define variables according to cases","text":"<p>In the following example we :</p> <ul> <li>define a String variable. </li> <li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li> <li>We output the value to the OSOM Log</li> <li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li> </ul> <p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p> <p></p>"},{"location":"lcm/#define-complex-osm-configs-for-day-0","title":"Define complex OSM configs for DAY 0","text":"<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p> <ul> <li> <p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p> </li> <li> <p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p> </li> <li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li> <li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li> <li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li> </ul> <p></p>"},{"location":"lcm/#define-and-instantiate-different-services-according-to-service-order-request","title":"Define and instantiate different services according to Service Order request","text":"<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p> <p>There are different ways to accomplish this:</p> <ul> <li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li> <li>change for example the VIMs that you deploy the NS</li> <li>change the NSD (that is use different VNFs)</li> </ul> <p>The following image displays for example the latter case.</p> <p></p>"},{"location":"lcm/#call-an-external-restful-service","title":"Call an external RESTful service","text":"<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p> <p></p> <p></p>"},{"location":"lcm/#create-new-service-orders","title":"Create New Service Orders","text":"<p>The following example calls to Order a New Service Specification with specific Parameter Values</p> <p></p>"},{"location":"nfvoconfig/","title":"NFV Orchestrator configuration","text":"<p>Currently we support Open Source MANO version EIGHT/NINE/TEN/ELEVEN/THIRTEEN. Later versions of OSM may also be supported by the existing configuration, as from OSM 9+ the project converged to the SOL005 interface, regarding the NBI, and SOL006 (YANG model), regarding the NFV/NS packaging. Also an implementation of a generic SOL005 interface is supported, but not extensively tested.</p> <p>Configuration of your target(s) NFVOs/MANO services with Openslice is performed through the NFV portal.</p> <ol> <li> <p>Login to {{yourdomain}}/nfvportal/</p> </li> <li> <p>Navigate to Admin &gt; Manage MANO Platforms &gt; Add New MANO Platform, pick one of the supported MANO platform(s), e.g. Name=OSMvTHIRTEEN, Version=OSMvTHIRTEEN and save. You may edit the saved MANO platforms after this.</p> </li> <li> <p>Navigate to Admin &gt; Manage MANO providers &gt; Add New MANO Provider and enter its details:</p> <ul> <li>Name and description of your choice. The selected name will supplement the NFV artifacts of this provider.</li> <li>One of the already defined MANO platforms</li> <li>API URL Endpoint, eg: https://10.10.10.10:9999 (This is the SOL005 NBI endpoint - Note the port 9999)</li> <li>Username, Password and Project of your OSM tenant.</li> </ul> </li> </ol> <p>Check EnabledForONBOARDING, if you want VNF/NS packages uploaded through the UI by the user, to also be automatically ONBOARDED to this MANO (1 step process). If left unchecked, the onboarding process must be performed manually after the VNF/NS package is uploaded to the portal, by the designated UI (2 step process).</p> <p>Check EnabledForSYNC, if you want to support the automatic synchronization of this MANO with OpenSlice. When enabled, the existing VNF/NS packages and VIMs (and any updates on them) of the registered MANO are also reflected to the portal to the respective UIs (Registered VNFs/NSDs and Manage Infrastructures). </p> <p>The synchronization is a continuous process that will confirm that the artifacts are still present in the MANO, updating the status field of the respective artifacts to <code>OSM_PRESENT</code>. If during this process, an artifact is deleted from the MANO, the respective status field will be updated to <code>OSM_MISSING</code>.</p>"},{"location":"portals_intro/","title":"OpenSlice Portals","text":"<p>Openslice comprises of a web landing page See Demo that navigates to the respective Portal:</p> <ul> <li>Services Portal See Demo</li> <li>NFV Portal See Demo</li> <li>Products Portal See Demo</li> <li>Testing Portal See Demo</li> <li>Resources Portal See Demo</li> </ul> <p>Following you may find the scope each portal focuses on and the main TMF APIs it supports.</p> <p>Services Portal is a designated portal for the: - Service Designer - To design Customer Facing Services as bundles of Resource Facing Services that map to specific Resourses (e.g. NFV, Testing, General Resources). Then, it is charged with the designed Services' exposure to public Service Catalogs. - Service Customer - To browse the public Service Catalogs and order the offered Services. The fulfilment process of the Service Order is also captured and the final deployed Services are exposed to the Customer.</p> <p>NFV Portal is a designated portal for the: Indicatively, the portal can be used to: - Register new a new MANO provider (e.g. OSM) - Synchronize the onboarded VNF/NS packages, and the VIMs of the registered MANO provider - Onboard/Delete VNF/NS packages on specific MANO provider - Deploy a NS to a target MANO provider</p> <p>More information can be found at NFV Services.</p> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure. -  Products Portal is a designated portal for the: - Product Designer - To design Products as bundles of available Services. Then, it is charged with the designed Products' exposure to public Product Catalogs. - Product Customer - To browse the public Product Catalogs and navigate to the respective offered Services.</p> <p>Testing Portal is a designated portal for the: - Testing Designer - To design Tests and provide the testing scripts as attachments to the latter. The Tests can be imported as Services at the Services Portal, and can be included in a Service Bundle.</p> TMF620 TMF632 TMF633 TMF634 TMF638 TMF639 TMF640 TMF641 TMF642 TMF653 TMF685 Services Portal x x x x x x Products Portal x x Testing Portal x x Resources Portal x x x x <p>The NFV Portal uses a proprietary API</p>"},{"location":"role_keycloak_management/","title":"Role management in Keycloak","text":"<p>Some initial configuration of Keycloak happens at Installation/Deployment time. Here are some notes regarding user management</p>"},{"location":"role_keycloak_management/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>There are cases that OpenSlice administrators need to configure Keycloak:</p> <ul> <li>Change user roles, e.g. make a Simple user a Service Designer</li> <li>Domain management</li> <li>User Password reset</li> </ul>"},{"location":"service_inventory/","title":"Service Inventory","text":"<p>After a Service Order completion, active services with their additional characteristics are found:</p> <ul> <li>From the Order Items of a selected Service order</li> <li>from the menu of Service inventory and then selecting details of each service</li> <li>through the Service Inventory API (TMF 638 - Service Inventory Management ) </li> </ul> <p>Openslice creates a Service for the requested CFS. Customers make Service Orders and Openslice instantiates the requested Service Specifications for each Service Order Item of a Service Order. Running Services instantiated by Openslice, reside in Openslice Service Inventory. The following picture displays how Service Specifications are related to Running Services and how Running Services relate with instantiated running Network Services. </p> <p></p> <p>There is a hierarchy of services. Usually an Instantiated CFS has Supporting Services some Instantiated RFSs. Then an Instantiated RFS is related to some running NS managed by NFVO</p>"},{"location":"service_inventory/#interacting-with-an-active-service-day-2-config","title":"Interacting with an Active Service (Day 2 config)","text":"<p>In some cases, if the underlying service is configured with actions (for example in OSM Day 2 primitive actions), there are characteristics that can be modified.  Usually they are named like : ::Primitive:: <p>The user can edit the characteristic with a new value. The value is propagated through the OSOM and NFVO down to the related VNF.</p>"},{"location":"service_inventory/#terminatinginactivating-a-service","title":"Terminating/Inactivating a service","text":"<p>You can terminate the service with one of the following processes:</p> <ul> <li>Select the related Service Order and terminate the Order Item. This will delete all the underlying related active services. The Order goes to ACKNOWLEDGED-&gt;INPROGRESS-&gt;COMPLETE</li> <li>To terminate or inactivate a service, select the specific service from the inventory, press Edit and set the State either to Inactive or Terminated</li> </ul> <p>Warning: if you terminate or inactivate a service the action cannot be undone. </p>"},{"location":"service_inventory/#uml-sequence-diagram","title":"uml: sequence diagram","text":"<p>Here I will embed PlantUML markup to generate a sequence diagram.</p> <p>I can include as many plantuml segments as I want in my Markdown, and the diagrams can be of any type supported by PlantUML.</p>"},{"location":"terminology/","title":"User Roles","text":"<ul> <li>User</li> <li>Service Designer</li> <li>OpenSlice administrator</li> </ul>"},{"location":"terminology/#terms","title":"Terms","text":"<ul> <li>Resource Facing Service Specification (RFSSpec): A Service that exposes a resource Specification as a Service.</li> <li>Customer Facing Service Specification (CFSSpec): Service exposed to users for Service Orders. Usually it exposes other CFSSpec(Service Bundle) or other RFSSpecs</li> <li>OpenSlice management cluster</li> <li>Service Specification: Detailed descriptions of services, including attributes, configurations, performance metrics, and SLAs.</li> <li>Service Catalog</li> <li>Service Categories</li> <li>Service Inventory</li> </ul>"},{"location":"under_construction/","title":"Under construction","text":"<p>under construction</p>"},{"location":"architecture/architecture/","title":"Architecture","text":"<p>Openslice offers the following main functionalities:</p> <ul> <li>Service Catalog Management: A CSP will have the ability to manage the Service Catalog Items, their attributes , organize in categories and decide what to make available to Customers</li> <li>Services Specifications: A CSP will be able to manage Service Specifications</li> <li>Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties</li> <li>Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs</li> <li>Service Order: The Customer will be able to place a Service Order</li> <li>Service Inventory: The Customer and Provider will be able to view deployed Services status</li> </ul> <p>The following figure displays the overall architecture of Openslice.</p> <p></p> <p>Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:</p> <ul> <li>Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility\u2019s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory</li> <li>An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service</li> <li>A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics</li> <li>An authentication server implementing Oauth2 authentication scheme</li> <li>A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)</li> <li>A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog</li> <li>A microservice that is capable to interface to an issue management system. For example it raises an issue to all related stakeholders (CSP, NOP, CSC) that a new Service Order is requested</li> <li>Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster</li> <li>A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs </li> </ul> <p>The following figure depicts how Openslice microservices are deployed</p> <p></p>"},{"location":"architecture/architecture/#deploying-openslice-in-multi-domain-scenarios","title":"Deploying Openslice in multi domain scenarios","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>See more Consuming Services From External Partner Organizations</p>"},{"location":"architecture/centrallog/","title":"Central Logging","text":"<p>Openslice follows the centralized log management concept, i.e. a type of logging solution system that consolidates the log data from different services and pushes it to a central, accessible and easy-to-use interface. </p> <p>For that reason, Elasticsearch is elected as an open-source centralized logging solution for collecting, parsing and storing logs towards a real-time data analytics tool that provides insights from any type of structured and unstructured data source.</p>"},{"location":"architecture/consumingServicesFromExternalPartners/","title":"Consuming Services From External Partner Organizations","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>In Openslice we can consume services from 3rd parties via Open APIs.</p> <p>We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:</p> <ul> <li>Import Service Specifications</li> <li>Create a Service Order</li> <li>Use the Service Inventory to query the status of the service ordered to the external partner organization</li> </ul>"},{"location":"architecture/consumingServicesFromExternalPartners/#define-an-organization-as-3rd-party-to-consume-services-east-west","title":"Define an Organization as 3rd party to consume services East-West","text":"<p>An organization must have the following characteristics in openslice catalog, like for example:</p> <p>\"EXTERNAL_TMFAPI_BASEURL\", \"http://portal.openslice.io\"</p> <p>\"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\", \"authOpensliceProvider\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTID\", \"osapiWebClientId\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\", \"secret\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2SCOPES\", scopes</p> <p>\"EXTERNAL_TMFAPI_OAUTH2TOKENURI\", \"http://portal.openslice.io/osapi-oauth-server/oauth/token\"</p> <p>\"EXTERNAL_TMFAPI_USERNAME\", \"admin\"</p> <p>\"EXTERNAL_TMFAPI_PASSWORD\", \"openslice\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATALOG_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification?type=CustomerFacingServiceSpecification\" (this is optional, fetch a list of service specs it will be relative with the BASEURL. If the url is empty then no specs will be fetched, the EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS might be used)</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/{categoryid}\" (this example will fetch all specs in a category. You may define comma separated URLs of categories API URL . This will  fetch  specifications of every defined category. If you want only one specific category put for example the uuid only of one category: \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d\". multiple urls should be \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d,/tmf-api/serviceCatalogManagement/v4/serviceCategory/9b6d8bf3-abd2-43c4-8154-c8c6fe5545b2\")</p> <p>\"EXTERNAL_TMFAPI_SERVICE_SPEC\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS\"= \"/test/v1/serviceorder\" (this is optional)</p> <p>An example Organization defined example in json:</p> <pre><code>\n{\n  \"uuid\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n  \"@baseType\": \"BaseEntity\",\n  \"@schemaLocation\": null,\n  \"@type\": null,\n  \"href\": null,\n  \"name\": \"Openslice.io\",\n  \"id\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n  \"isHeadOffice\": null,\n  \"isLegalEntity\": null,\n  \"nameType\": null,\n  \"organizationType\": null,\n  \"tradingName\": null,\n  \"contactMedium\": [],\n  \"creditRating\": [],\n  \"existsDuring\": null,\n  \"externalReference\": [],\n  \"organizationChildRelationship\": [],\n  \"organizationIdentification\": [],\n  \"organizationParentRelationship\": null,\n  \"otherName\": [],\n  \"partyCharacteristic\": [\n    {\n      \"uuid\": \"3a2f7221-e0a2-4a6b-88d1-534c8e1963f6\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"authOpensliceProvider\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"c24bb527-f178-4d38-9b93-2027c1732876\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_USERNAME\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"admin\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"27e45df8-414b-44c6-a5d5-3f064e2cfd3b\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_PASSWORD\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"openslice\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"e0e470b8-6024-4014-8a18-2333e5465ce1\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"secret\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"3e0de762-ac80-4c1e-a0a1-f265ff0899b4\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2SCOPES\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"admin;read\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"0bbb8314-f7f2-420d-9fed-ba054b15f886\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2TOKENURI\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"http://portal.openslice.io/osapi-oauth-server/oauth/token\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"3a567de4-79eb-4006-a500-3e5229b44175\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTID\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"osapiWebClientId\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_BASEURL\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"http://portal.openslice.io\",\n        \"alias\": null\n      }\n    }\n  ],\n  \"relatedParty\": [],\n  \"status\": null,\n  \"taxExemptionCertificate\": []\n}\n\n</code></pre>"},{"location":"architecture/issuemgt/","title":"Issue Management","text":"<p>For issue management support, Openslice relies on Bugzilla. Bugzilla is a ticketing tool that allows issue reporting and tracking via tickets to all relevant stakeholders. </p> <p>The figure below displays the overall issue management service architecture integrating Bugzilla as its core and how this tool interacts with other Openslice services presenting some distinctive scenarios. It should be noted that Bugzilla tickets will not only be used for bugs/errors, but also for general requests, e.g. Service Order procedure.</p> <p></p>"},{"location":"architecture/messagebus/","title":"Message Bus and exchanged Messages","text":"<p>Openslice has a Message bus which allows Openslice services to exchange messages via queues and topics.</p> <p>It is based on ActiveMQ.</p> <p>3rd party services can be attached to bus and subscribe to message topics or request resources via queues.</p>"},{"location":"architecture/messagebus/#queue-messages","title":"QUEUE MESSAGES","text":"Message Alias CATALOG_GET_SERVICEORDERS Name jms:queue:CATALOG.GET.SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_BY_ID Name jms:queue:CATALOG.GET.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body String orderid Description Return a ServiceOrder as String Json Message Alias CATALOG_UPD_SERVICEORDER_BY_ID Name jms:queue:CATALOG.UPD.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body ServiceOrderUpdate serviceOrder Headers \"orderid\"= orderid Description Returns a ServiceOrder as String Message Alias CATALOG_GET_SERVICESPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICESPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceSpecification Message Alias CATALOG_ADD_SERVICESPEC Name jms:queue:CATALOG.ADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecCreate Description Creates a ServiceSpecification and  returns a ServiceSpecification as String Message Alias CATALOG_UPD_SERVICESPEC Name jms:queue:CATALOG.UPD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId Description Updates a ServiceSpecification and  returns a ServiceSpecification as String. --- Message Alias CATALOG_UPDADD_SERVICESPEC Name jms:queue:CATALOG.UPDADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId, \"forceId\"=forceId Description Updates a ServiceSpecification and  returns a ServiceSpecification as String. If forceId is true then tries to assign the requested ID to the spec Message Alias CATALOG_ADD_SERVICEORDER Name jms:queue:CATALOG.ADD.SERVICEORDER Type queue Destination TMF API service Producers OSOM Body ServiceOrderCreate serviceOrder Headers Description Creates a ServiceOrder and  returns a ServiceOrder as String Message Alias CATALOG_GET_INITIAL_SERVICEORDERS_IDS Name jms:queue:CATALOG.GET.INITIAL_SERVICEORDERS Type queue Destination TMF API service Producers Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_IDS_BY_STATE Name jms:queue:CATALOG.GET.ACKNOWLEDGED_SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Headers \"orderstate\"= orderState Description String Json ArrayList of ServiceOrders Message Alias CATALOG_ADD_SERVICE Name jms:queue:CATALOG.ADD.SERVICE Type queue Destination TMF API service Producers OSOM Body ServiceCreate String json Headers \"orderid\"=orderid, \"serviceSpecid\"= specid Description Creates Service based an a Service Spec, Returns a Service object Message Alias CATALOG_UPD_SERVICE Name jms:queue:CATALOG.UPD.SERVICE Type queue Destination TMF API service Producers Body ServiceUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICE_BY_ID Name jms:queue:CATALOG.GET.SERVICE Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service instance <p>---| Message |    | | ------------- |----------------| |Alias |  CATALOG_GET_SERVICE_BY_ORDERID  | |Name |  jms:queue:CATALOG.GET.SERVICE_BY_ORDERID  | |Type | queue  | |Destination |   TMF API service | |Producers |  | |Body |  String serviceID | |Description |   returns Service IDs of a specific order given then order id |</p> Message Alias CATALOG_SERVICE_QUEUE_ITEMS_GET Name jms:queue:CATALOG.SERVICEQUEUEITEMS.GET Type queue Destination TMF API service Producers OSOM Body Description returns a LIST OF Service Queue Items --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_UPD Name jms:queue:CATALOG.SERVICEQUEUEITEM.UPDATE Type queue Destination TMF API service Producers OSOM Body String SERVICEQUEUEITEM Headers \"itemid\" = SERVICEQUEUEITEM id Description ill update a service queue item by id and return the instance --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_DELETE Name jms:queue:CATALOG.SERVICEQUEUEITEM.DELETE Type queue Destination TMF API service Producers OSOM Body Headers \"itemid\" = SERVICEQUEUEITEM id Description ill delete a service queue item by id Message Alias CATALOG_SERVICES_TO_TERMINATE Name jms:queue:CATALOG.GET.SERVICETOTERMINATE Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services with END DAte in the past --- Message Alias CATALOG_SERVICES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services from the inventory of partners Message Alias NFV_CATALOG_GET_NSD_BY_ID Name jms:queue:NFVCATALOG.GET.NSD_BY_ID Type queue Destination NFV Catalog service Producers TMF API, OSOM Body NSDid Description Returns a NetworkServiceDescriptor object Message Alias NFV_CATALOG_DEPLOY_NSD_REQ Name jms:queue:NFVCATALOG.DEPLOY.NSD_REQ Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers NSD id Description Returns a DeploymentDescriptor object as json string containing deployment info Message Alias NFV_CATALOG_UPD_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.UPD.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers DeploymentDescriptor id Description Updates and Returns a DeploymentDescriptor object as json string containing deployment info Message Alias GET_USER_BY_USERNAME Name jms:queue:GET.USER_BY_USERNAME Type queue Destination NFV Catalog service (this is temproary for now) Producers TMF API Body username Headers Description Returns a PortalUser object as json string containing user info Message Alias NFV_CATALOG_GET_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.GET.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body Deployment ID Description Returns a DeploymentDescriptor object Message Alias CATALOG_GET_EXTERNAL_SERVICE_PARTNERS Name jms:queue:CATALOG.GET.EXTERNALSERVICEPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description As a String Json ArrayList of Organizaton objects containing the characteristic name EXTERNAL_TMFAPI Message Alias CATALOG_UPD_EXTERNAL_SERVICESPEC Name jms:queue:CATALOG.UPD.EXTERNAL_SERVICESPEC Type queue Destination TMF API service Producers OSOM or maybe used by others that would like to update a Service Spec Body A serviceSpecification as json string Headers servicespecification id, orgid id Description Updates (or inserts if does not exist in catalog) an external service specification) Message Alias NFV_CATALOG_NSACTIONS_SCALE Name jms:queue:NSACTIONS.SCALE Type queue Destination TMF API service Producers OSOM or maybe used by others that would like scale a NS Body A ScaleDescriptor as json string Headers none Description performs a scale Message Alias NFV_CATALOG_NS_LCMCHANGED Name NFV_CATALOG_NS_LCMCHANGED Type topic Destination any Producers MANO client Body A json string Headers none Description A NFV_CATALOG_NS_LCMCHANGED message is published when LCM of a running NS is changed"},{"location":"architecture/messagebus/#alarms","title":"ALARMS","text":"Message Alias ALARMS_ADD_ALARM Name jms:queue:ALARMS.ADD.ALARM Type queue Publishers Consumers TMF API Body AlarmCreate Headers Description Add an alarm Message Alias ALARMS_UPDATE_ALARM Name jms:queue:ALARMS.UPDATE.ALARM Type queue Publishers Consumers TMF API Body AlarmUpdate Headers alarmid = alarm id, body (AlarmUpdate object) Description Update an alarm Message Alias ALARMS_GET_ALARM Name jms:queue:ALARMS.GET.ALARM Type queue Publishers Consumers TMF API Body Headers alarmid = alarm id Description get an alarm"},{"location":"architecture/messagebus/#event-topics-in-message-bus","title":"EVENT TOPICS IN Message Bus","text":"Message Alias EVENT_SERVICE_CREATE Name jms:topic:EVENT.SERVICE.CREATE Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_STATE_CHANGED Name jms:topic:EVENT.SERVICE.STATECHANGED Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_DELETE Name jms:topic:EVENT.SERVICE.DELETE Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICE.ATTRCHANGED Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ORDER_CREATE Name jms:topic:EVENT.SERVICEORDER.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to create a new issue Message Alias EVENT_SERVICE_ORDER_STATE_CHANGED Name jms:topic:EVENT.SERVICEORDER.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to update an issue Message Alias EVENT_SERVICE_ORDER_DELETE Name jms:topic:EVENT.SERVICEORDER.DELETE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_SERVICE_ORDER_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICEORDER.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_ALARM_CREATE Name jms:topic:EVENT.ALARM.CREATE Type topic Publishers TMF API Consumers OAS, BUGZILLA Service, CentralLog Service Body AlarmCreateEvent Headers Description The Event  contains the Alarm object in payload Message Alias CATALOG_ADD_RESOURCE Name jms:queue:CATALOG.ADD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceCreate Headers Description The Body  contains the ResourceCreate object to add Message Alias CATALOG_UPD_RESOURCE Name jms:queue:CATALOG.UPD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceUpdate Headers resourceid , propagateToSO Description The Body  contains the ResourceCreate object to update Message Alias CATALOG_GET_RESOURCE_BY_ID Name jms:queue:CATALOG.GET.RESOURCE Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body  contains the ResourceCreate object to update Message Alias CATALOG_RESOURCES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type topic Publishers TMF API Consumers any Body none Headers none Description retrieve all active services of partners Message Alias CATALOG_ADD_RESOURCESPEC Name jms:queue:CATALOG.ADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationCreate Headers Description The Body  contains the ResourceSpecificationCreate object to add Message Alias CATALOG_UPD_RESOURCESPEC Name jms:queue:CATALOG.UPD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationUpdate Headers resourceSpecId Description The Body  contains the ResourceSpecificationCreate object to update Message Alias CATALOG_GET_RESOURCESPEC_BY_ID Name jms:queue:CATALOG.GET.RESOURCESPEC_BY_ID Type topic Publishers TMF API Consumers any Body resourceSpecid Headers Description The Body  contains the object id to find Message Alias CATALOG_UPDADD_RESOURCESPEC Name jms:queue:CATALOG.UPDADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body  contains the ResourceSpecificationCreate object to update or create if not exist Message Alias EVENT_RESOURCE_CREATE Name jms:topic:EVENT.RESOURCE.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_STATE_CHANGED Name jms:topic:EVENT.RESOURCE.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_DELETE Name jms:topic:EVENT.SERVICE.RESOURCE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.RESOURCE.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias CATALOG_GET_LCMRULE_BY_ID Name jms:queue:CATALOG.GET.LCMRULE Type topic Publishers TMF API Consumers any Body lcmid Headers Description The Body  contains the LCMRuleSpec object Message Alias CATALOG_GET_LCMRULES_BY_SPECID_PHASE Name jms:queue:CATALOG.GET.LCMRULES_BY_SPECID_PHASE Type topic Publishers TMF API Consumers any Body Headers header.servicespecid, header.phasename Description The Body  contains the LCMRuleSpec objects of the specific Service Spec and the specific phase Message Alias CATALOG_GET_SERVICETESTSPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICETESTSPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceTestSpecification Message Alias CATALOG_ADD_SERVICETEST Name jms:queue:CATALOG.ADD.SERVICETEST Type queue Destination TMF API service Producers OSOM Body ServiceTestCreate String json Headers \"orderid\"=orderid, \"serviceTestSpecid\"= specid Description Creates Service Test based an a Service Test Spec, Returns a ServiceTest object Message Alias CATALOG_UPD_SERVICETEST Name jms:queue:CATALOG.UPD.SERVICETEST Type queue Destination TMF API service Producers Body ServiceTestUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service test by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICETEST_BY_ID Name jms:queue:CATALOG.GET.SERVICETEST Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service TEST instance Message Alias CRD_DEPLOY_CR_REQ Name jms:queue:CRD.DEPLOY.CR_REQ Type queue Destination CRD  service Producers OSOM Body CR spec as String Headers related service id Description Returns a String object containing deployment info Message Alias CRD_PATCH_CR_REQ Name jms:queue:CRD.PATCH.CR_REQ Type queue Destination CRD  service Producers OSOM Body CR  as String Headers related service id Description Returns a String object containing PATCH info Message Alias CRD_DELETE_CR_REQ Name jms:queue:CRD.DELETE.CR_REQ Type queue Destination CRD  service Producers OSOM Body CR  as String Headers related service id Description Returns a String object containing deletion info"},{"location":"architecture/nfvapi/","title":"API interaction","text":""},{"location":"architecture/nfvapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/nfvapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all vxfs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4\" http://localhost:13000/osapi/admin/vxfs\n</code></pre> <p>Example response:</p> <pre><code>[\n  {\n    \"id\": 1,\n    \"owner\": {\n      \"id\": 1,\n      \"organization\": \"ee\",\n      \"name\": \"Portal Administrator\",\n      \"email\": \"\",\n      \"username\": \"admin\",\n      \"createdAt\": null\n    },\n    \"uuid\": \"a954daf2-16da-4b7e-ae42-4825936d453c\",\n    \"name\": \"cirros_vnfd\",\n    \"iconsrc\": \"/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png\",\n    \"shortDescription\": \"cirros_vnfd\",\n    \"longDescription\": \"Simple VNF example with a cirros\",\n    \"version\": \"1.0\",\n    \"packageLocation\": \"/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz\",\n    \"dateCreated\": 1568971426000,\n    \"dateUpdated\": 1568981107000,\n    \"categories\": [\n      {\n        \"id\": 3,\n        \"name\": \"Service\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      },\n      {\n        \"id\": 2,\n        \"name\": \"Networking\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      }\n    ],\n    \"extensions\": [],\n    \"validationJobs\": [],\n    \"screenshots\": \"\",\n    \"vendor\": \"OSM\",\n    \"published\": false,\n    \"termsOfUse\": null,\n    \"descriptor\": \"vnfd-catalog:\\n    vnfd:\\n    -   connection-point:\\n        -   name: eth0\\n            type: VPORT\\n        description: Simple VNF example with a cirros\\n        id: cirros_vnfd\\n        logo: cirros-64.png\\n        mgmt-interface:\\n            cp: eth0\\n        name: cirros_vnfd\\n        short-name: cirros_vnfd\\n        vdu:\\n        -   count: 1\\n            description: cirros_vnfd-VM\\n            id: cirros_vnfd-VM\\n            image: cirros034\\n            interface:\\n            -   external-connection-point-ref: eth0\\n                name: eth0\\n                position: '1'\\n                type: EXTERNAL\\n                virtual-interface:\\n                    bandwidth: '0'\\n                    type: VIRTIO\\n                    vpci: 0000:00:0a.0\\n            name: cirros_vnfd-VM\\n            vm-flavor:\\n                memory-mb: 512\\n                storage-gb: 1\\n                vcpu-count: 1\\n        vendor: OSM\\n        version: '1.0'\\n\",\n    \"descriptorHTML\": \"&lt;h3&gt;cirros_vnfd&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;512 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;1 GB&lt;br&gt;\",\n    \"certified\": false,\n    \"certifiedBy\": null,\n    \"validationStatus\": \"UNDER_REVIEW\",\n    \"packagingFormat\": \"OSMvFIVE\",\n    \"supportedMANOPlatforms\": [\n      {\n        \"id\": 1,\n        \"name\": \"osm fivee\",\n        \"version\": \"osm fivee\",\n        \"description\": \"osm five\"\n      }\n    ],\n    \"vxfOnBoardedDescriptors\": [],\n    \"vfimagesVDU\": [\n      {\n        \"id\": 1,\n        \"name\": \"cirros034\",\n        \"uuid\": \"d4549610-8abd-42ad-97f4-0a64e1c93977\",\n        \"shortDescription\": \"Automatically created during vxf cirros_vnfd submission. Owner must update.\",\n        \"packageLocation\": null,\n        \"publicURL\": null,\n        \"dateCreated\": 1568971426000,\n        \"dateUpdated\": null,\n        \"refVxFs\": [\n          {\n            \"id\": 1,\n            \"name\": \"cirros_vnfd\"\n          }\n        ],\n        \"owner\": {\n          \"id\": 1,\n          \"organization\": \"ee\",\n          \"name\": \"Portal Administrator\",\n          \"email\": \"\",\n          \"username\": \"admin\",\n          \"active\": true,\n          \"currentSessionID\": null,\n          \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n          \"createdAt\": 1568711859000,\n          \"roles\": [\n            \"ADMIN\",\n            \"MENTOR\"\n          ]\n        },\n        \"published\": false,\n        \"termsOfUse\": null,\n        \"deployedInfrastructures\": []\n      }\n    ]\n  },\n  {\n    \"id\": 2,\n    \"owner\": {\n      \"id\": 1,\n      \"organization\": \"ee\",\n      \"name\": \"Portal Administrator\",\n      \"email\": \"\",\n      \"username\": \"admin\",\n      \"createdAt\": null\n    },\n    \"uuid\": \"4ab80095-a63e-4fe7-8598-e1c7e880706e\",\n    \"name\": \"cirros_sriov_vnfd\",\n    \"iconsrc\": null,\n    \"shortDescription\": \"cirros_sriov_vnf\",\n    \"longDescription\": \"Simple VNF example with a cirros SRIOV interface\",\n    \"version\": \"1.0\",\n    \"packageLocation\": \"/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz\",\n    \"dateCreated\": 1568971740000,\n    \"dateUpdated\": 1568981100000,\n    \"categories\": [\n      {\n        \"id\": 4,\n        \"name\": \"tyu\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      },\n      {\n        \"id\": 5,\n        \"name\": \"tyi\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      }\n    ],\n    \"extensions\": [],\n    \"validationJobs\": [],\n    \"screenshots\": \"\",\n    \"vendor\": \"OSM\",\n    \"published\": false,\n    \"termsOfUse\": null,\n    \"descriptor\": \"vnfd:vnfd-catalog:\\n  vnfd:\\n  - connection-point:\\n    - name: eth0\\n      type: VPORT\\n    - name: eth1\\n      type: VPORT\\n    description: Simple VNF example with a cirros SRIOV interface\\n    id: cirros_sriov_vnfd\\n    logo: cirros-64.png\\n    mgmt-interface:\\n      cp: eth0\\n    name: cirros_sriov_vnf\\n    short-name: cirros_sriov_vnf\\n    vdu:\\n    - count: 1\\n      description: cirros_sriov_vnfd-VM\\n      guest-epa:\\n        cpu-pinning-policy: DEDICATED\\n        cpu-thread-pinning-policy: PREFER\\n        mempage-size: SMALL\\n        numa-node-policy:\\n          mem-policy: STRICT\\n          node:\\n          - id: '1'\\n          node-cnt: '1'\\n      id: cirros_sriov_vnfd-VM\\n      image: cirros-0.3.6-x86_64\\n      interface:\\n      - external-connection-point-ref: eth0\\n        name: eth0\\n        position: '1'\\n        type: EXTERNAL\\n        virtual-interface:\\n          bandwidth: '0'\\n          type: VIRTIO\\n          vpci: 0000:00:0a.0\\n      - external-connection-point-ref: eth1\\n        name: eth1\\n        position: '2'\\n        type: EXTERNAL\\n        virtual-interface:\\n          type: SR-IOV\\n      name: cirros_sriov_vnfd-VM\\n      vm-flavor:\\n        memory-mb: 4096\\n        storage-gb: 10\\n        vcpu-count: 4\\n    vendor: OSM\\n    version: '1.0'\\n\",\n    \"descriptorHTML\": \"&lt;h3&gt;cirros_sriov_vnf&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros SRIOV interface&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;4096 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;10 GB&lt;br&gt;\",\n    \"certified\": false,\n    \"certifiedBy\": null,\n    \"validationStatus\": \"UNDER_REVIEW\",\n    \"packagingFormat\": \"OSMvFIVE\",\n    \"supportedMANOPlatforms\": [\n      {\n        \"id\": 1,\n        \"name\": \"osm fivee\",\n        \"version\": \"osm fivee\",\n        \"description\": \"osm five\"\n      }\n    ],\n    \"vxfOnBoardedDescriptors\": [],\n    \"vfimagesVDU\": [\n      {\n        \"id\": 2,\n        \"name\": \"cirros-0.3.6-x86_64\",\n        \"uuid\": \"be121176-1d62-4a1b-a3c1-7dce2e069d22\",\n        \"shortDescription\": \"Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.\",\n        \"packageLocation\": null,\n        \"publicURL\": null,\n        \"dateCreated\": 1568971740000,\n        \"dateUpdated\": null,\n        \"refVxFs\": [\n          {\n            \"id\": 2,\n            \"name\": \"cirros_sriov_vnfd\"\n          }\n        ],\n        \"owner\": {\n          \"id\": 1,\n          \"organization\": \"ee\",\n          \"name\": \"Portal Administrator\",\n          \"email\": \"\",\n          \"username\": \"admin\",\n          \"active\": true,\n          \"currentSessionID\": null,\n          \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n          \"createdAt\": 1568711859000,\n          \"roles\": [\n            \"ROLE_ADMIN\",\n            \"ROLE_MENTOR\"\n          ]\n        },\n        \"published\": false,\n        \"termsOfUse\": null,\n        \"deployedInfrastructures\": []\n      }\n    ]\n  }\n]\n</code></pre>"},{"location":"architecture/oauth/","title":"Authentication Server","text":"<p>Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment </p> <p>API users needs to authenticate.  All APIs (except grant token request) must include Bearer token in request Authorization header.</p>"},{"location":"architecture/oauth/#oauth-token","title":"OAuth token","text":"<p>Get first an oauth token, using your username and password. </p> <pre><code>curl -X POST http://portal.openslice.io/auth/realms/openslice/protocol/openid-connect/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=demouser' -d 'password=demouser' -d 'grant_type=password' -d 'client_id=osapiWebClientId' \n</code></pre> <p>response:</p> <pre><code>                                                       {\"access_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw\",\"expires_in\":300,\"refresh_expires_in\":1800,\"refresh_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwZjUxMDk5Yy0wNTIzLTRjNGQtODM0Zi1iNDc0YzBjOTA1MzkifQ.eyJleHAiOjE1ODgyNDIwNzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiZmViOTg5NWEtOTY5ZS00MzIzLWJjY2QtZTY2YzQ0NGE1MzJlIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0Iiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.cDTx9BE1Df8EfGYm3VLr_MNFeymxZtJhMtlK7PVbIuk\",\"token_type\":\"bearer\",\"not-before-policy\":1586797346,\"session_state\":\"3350f493-6627-4373-8544-defd27ad3c74\",\"scope\":\"profile email\"}\n\n</code></pre> <p>The <code>access_token</code> will be used next as a Bearer.</p> <pre><code>curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer yJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1MjQsImlhdCI6MTU4ODI0MDIyNCwianRpIjoiYjg0NGYxZDAtMzk3Mi00YTMyLThiMWEtZDAxMDY3OGZjMTQ4IiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tY2xpIiwic2Vzc2lvbl9zdGF0ZSI6ImFmMmMzZmY1LTE4YWQtNDFkNC1hYTAyLTFlMGJkNzNmOTM5MSIsImFjciI6IjEiLCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiZGVtb3VzZXIifQ.SMtgV1E44_K_MQumGXZtWsLGVhYNaoM8Pk-DiFIZtUP4Zu-ervOsxHVQMX1frgVERR4jJidBcSshy9TnJ3UjF4l33WujHltbs-1UPy-gaIufVuEpl8RmbjOti3Up70vLfLXbzb6kN6WaahgobWXlbJsSXXwaBPQP6vSX5KigCa8TmzXcuqom14lOrlU-RB2zQTlJ30p7d9ag-a7o3I5m9GZWLJCZW2UYMl1JkskTHKgilA8HFQY4C9DYwWu8YDMyzqQSNumrTlURalBFidFbZvb1kp4dAyct8TysSWSbxxiwaL2RX1PWUqk-5Fpc1Q6BnBC8muMheiukFuoSkuADAg'^C\nubuntu@portal:~$ curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw'\n\nResponse:\n\n\n[{\"uuid\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"lastUpdate\":\"2020-03-11T23:19:05Z\",\"@baseType\":\"BaseEntity\",\"@schemaLocation\":null,\"@type\":\"ServiceCatalog\",\"href\":null,\"name\":\"Example Facility Services\",\"description\":\"Example Facility Services\",\"lifecycleStatus\":\"Active\",\"version\":\"1.0\",\"validFor\":{\"endDateTime\":\"2039-11-20T23:07:21Z\",\"startDateTime\":\"2019-11-20T23:07:21Z\"},\"relatedParty\":null,\"id\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"category\":[{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"Generic Services\",\"@referredType\":null,\"id\":\"98b9adf1-a1d6-4165-855f-153ddc2131b1\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"External\",\"@referredType\":null,\"id\":\"08ffdb3c-6237-45d0-9f3a-d43b5fc5f0b6\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"eMBB\",\"@referredType\":null,\"id\":\"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"}]}]\n\n\n</code></pre>"},{"location":"architecture/osom/","title":"Openslice Service Orchestration and Order Management - OSOM","text":"<p>OSOM is a service responsible for:</p> <ul> <li>Service Order Management (SOM)</li> <li>Service Orchestration (SO)</li> </ul> <p>It uses open source Flowable Business process engine (https://www.flowable.org) .</p> <p>A Service Order follows the states as defined in TMF641 specification: </p> <p></p>"},{"location":"architecture/osom/#initial-state","title":"Initial state","text":"<p>When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.</p> <p></p> <p>Administrators are notified usually from the Ticketing System of a new order. They login to Openslice and change the State of the order either to ACKNOWLEDGED or REJECTED. If ACKNOWLEDGED they can Propose a startDate, add Notes, and add any additional service items</p>"},{"location":"architecture/osom/#order-scheduler","title":"Order scheduler","text":"<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p> <p></p> <p></p> <p>It retrieves all orders that are in ACKNOWLEDGED state and if the start date is in time it will initialize the process by settingn the order in IN_PROGRESS state. Finally the Start Order Process will start.</p>"},{"location":"architecture/osom/#start-order-process","title":"Start order process","text":"<p>This process for now is a draft simple prototype to make a simple orchestration via NFVO. Here the actual Services (TMF638/640 model) are created and attached to Service Order and Service Inventory.</p> <p></p> <p></p> <p>We expect here to check which tasks can be orchestrated by NFVO and which by human. We create the equivalent Services(TMF638/640 model) for this order.</p> <ol> <li>During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory</li> <li>The Services(TMF638 model) are assigned to the Order O1 In supportService List</li> <li>Each OrderItem OI1 is related to one serviceSpecification</li> <li>Each ServiceSpecification has also related serviceSpecRelationships</li> <li>So if we receive an order O1 for a ServiceSpec A which relates to (a bundle of) 3 specs(2 CFS, 1 RFS) we do the following:<ol> <li>Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1</li> <li>We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS) </li> <li>At this point the order will have 1 Local Service Orchestration Process(S_A),  2 supportingServices  refs(S_C1, S_C2) and 1 supportingResource(S_R1)</li> <li>The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory</li> <li>Service S_A will have: <ol> <li>startMode 1: Automatically by the managed environment</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> </ol> </li> <li>Services S_C1 and S_C2 we decide that cannot be orchestrated then they have <ol> <li>startMode: 3: Manually by the Provider of the Service</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> <li>If the CFS is a bundle spec it is further recursively orchestrated </li> </ol> </li> <li>Service S_R1 will have <ol> <li>startMode 1: Automatically by the managed environment.</li> <li>State: RESERVED</li> <li>IF The Service has the characteristic CharacteristicByName( \"NSDID\") it will be further processed by the NFVO </li> </ol> </li> </ol> </li> </ol> <p>There will be two instances of task \"User Task Manual Complete Service\" each for Services S_C1 and S_C2. The task is Transient for now. It displays only the services that are not automated!  Here is a flow for future:</p> <ol> <li>We wait here for human decision.</li> <li>From API we get a result:     a. If set to ACTIVE/TERMINATED then we complete the task     b. In any other state we stay in this task until it is resolved as in step a     c. The Status of ORDER O1 is also updated to PARTIAL</li> </ol> <p>There will be an instance of  NFVODeploymentRequest process  each for Service S_R1. (see later)</p> <ol> <li>This process is related with the NFVO orchestration</li> <li>It will send a msg to NFVO(s?) for a specific deployment request</li> </ol> <p>All services in \"Order Complete\" are in a status:</p> <ol> <li>Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED</li> <li>The Status of ORDER O1 is also updated to COMPLETED  or PARTIAL (in case we have some services running) or FAILED (in cases we have errors)</li> </ol> <p>A Service follows the states as defined in TMF638 Service Inventory specification: </p> <p></p>"},{"location":"architecture/osom/#nfvodeploymentrequest-process","title":"NFVODeploymentRequest process","text":"<p>This process is related with the NFVO orchestration It will send a msg to NFVO(s?) for a specific deployment request Then it checks the deployment status. It will wait 30 secs each time until the deployment is running (or failed)</p>"},{"location":"architecture/osom/#check-in-progress-orders-process","title":"Check In Progress orders process","text":"<p>Every 1 minute the \"Check In Progress Orders\" process is executed checking if a supported Service changed state (i.e. to ACTIVE) then the whole Order will change state (e.g. go to COMPLETED)</p> <p></p>"},{"location":"architecture/osom/#external-service-provider-deployment-request-process","title":"External Service Provider Deployment Request process","text":"<p>This process contains tasks for submitting order requests to external partners. - Submit Order To External Service Provider Task: This task creates automatically a Service Order request to a 3rd party provider SO that hosts the Service Specification - Check external service order fulfillment task: This task Check external partner for Service creations and updates our local inventory of services the service characteristics of remote Service Inventory</p>"},{"location":"architecture/osom/#fetch-partner-services-process","title":"Fetch Partner Services Process","text":"<p>Every 2 minutes the \"fetchPartnerServicesProcess\" process is executed checking remote Partner Organizations for changes in the published catalogues. The Fetch and Update External Partner Services Task is executed in paralle l for each Partner Organization </p>"},{"location":"architecture/osom/#local-service-orchestration-process","title":"Local Service Orchestration Process","text":"<p>This process handles automatically services that need to be further orchestrated or processed by OSOM. For example, for a CFS Bundled service we create such automated service instances that just aggregate the underlying services. </p>"},{"location":"architecture/tmfapi/","title":"TMF OpenAPI specification","text":"<p>PLease check the complete specification here.</p>"},{"location":"architecture/tmfapi/#api-interaction","title":"API interaction","text":""},{"location":"architecture/tmfapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/tmfapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all Service Catalogs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTc4NTA1MDcyLCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiMTFlNGYxYTUtZDY0Ny00YzA1LWE0ZGMtYWFhYzUyMjk4YzMwIiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.gm7cKdusDrdMRkxEiFU5sENKGRC1xwVj2SgPRmE9xxx\"  -H  \"accept: application/json;charset=utf-8\" -X GET \"http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog\"\n\n</code></pre> <p>response:</p> <pre><code>[\n  {\n    \"uuid\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n    \"lastUpdate\": \"2019-12-19T10:45:55Z\",\n    \"@baseType\": \"BaseEntity\",\n    \"@schemaLocation\": null,\n    \"@type\": \"ServiceCatalog\",\n    \"href\": null,\n    \"name\": \"Example Facility Services\",\n    \"description\": \"Example Facility Services\",\n    \"lifecycleStatus\": \"Active\",\n    \"version\": \"1.0\",\n    \"validFor\": {\n      \"endDateTime\": \"2039-11-20T23:07:21Z\",\n      \"startDateTime\": \"2019-11-20T23:07:21Z\"\n    },\n    \"relatedParty\": null,\n    \"id\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n    \"category\": [\n      {\n        \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"@schemaLocation\": null,\n        \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"href\": null,\n        \"name\": \"eMBB\",\n        \"@referredType\": null,\n        \"id\": \"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"\n      },\n      {\n        \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"@schemaLocation\": null,\n        \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"href\": null,\n        \"name\": \"Generic Services\",\n        \"@referredType\": null,\n        \"id\": \"98b9adf1-a1d6-4165-855f-153ddc2131b1\"\n      }\n    ]\n  }\n]\n</code></pre>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/","title":"CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster","text":""},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#intended-audience-osl-developers","title":"Intended Audience: OSL developers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>CRIDGE is a service designed to create and manage Custom Resources (CRs) based on Custom Resource Definitions (CRDs) installed on a Kubernetes cluster. By leveraging the OpenSlice (OSL), CRIDGE enables seamless integration and  orchestration within Kubernetes environments, utilizing Kubernetes APIs via the TMF APIs and models. Thus, more or less, OSL exposes Kubernetes APIs as TMF APIs and models.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>CRIDGE service allows OSL to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OSL services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>CRIDGE capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <p>OSL can expose CRs in service catalogs, facilitating their deployment in complex scenarios. These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</p> </li> </ol> <p>Why the CRIDGE name? we wanted to build a service that maps TMF models to CRDs; a kind of a CRD to TMF bridge. Therefore CRIDGE was born</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#approach","title":"Approach","text":"<p>OSL in general is responible for exposing service specifications  which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. The OSL Orchestrator (OSOM) will manage the lifecycle of the Service Order.</li> <li>OSOM creates a Resource in OSL Resource inventory and requests (via CRIDGE) a new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol> <p></p> <p>The provided image illustrates the architecture and workflow of the CRIDGE service, showing how it interacts with other components within a Kubernetes (K8s) cluster. Here is an explanation of the key components and flow in the diagram:</p> <ul> <li>Other OSL Services: This box represents various OSL services such as Service Spec Catalogue, Resource Spec Catalogue, Service Inventory, Resource Inventory, and OSOM (OpenSlice Service Orchestration and Management).</li> <li>Service Bus: This is the communication layer that facilitates interaction between the CRIDGE service and other OSL services.</li> <li>CRIDGE: CRIDGE acts as a bridge that converts CRDs (Custom Resource Definitions) to TMF (TM Forum) APIs and models. It enables the creation and management of Custom Resources (CRs) in the Kubernetes cluster.</li> <li> <p>K8s API: The Kubernetes API server, which is the central control point for managing the Kubernetes cluster. CRIDGE interacts with the K8s API to manage CRDs and CRs.</p> <p>CRD (Custom Resource Definition): A CRD is a way to define custom resources in Kubernetes cluster-wise. It allows the extension of Kubernetes API to create and manage user-defined resources. Example :</p> </li> </ul> <pre><code>        apiVersion: apiextensions.k8s.io/v1\n        kind: CustomResourceDefinition\n        metadata:\n            name: myresource.example.com\n</code></pre> <ul> <li>Namespaces: Kubernetes namespaces provide a way to partition resources within a cluster. The diagram shows that multiple namespaces (nsxx, nsyy, nsz) can be managed by CRIDGE.</li> </ul> <p>CR (Custom Resource):  A CR is an instance of a CRD. It represents the actual custom resource that is managed within the Kubernetes cluster. Example shown in different namespaces:</p> <pre><code>        apiVersion: example.com/v1\n        kind: Myresource\n        metadata:\n          name: example_resource_1\n</code></pre> <p>In a nutchell:</p> <ul> <li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> <li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> <li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> <li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>&gt; The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n&gt; Instances of Myresource are created in various namespaces, each with unique names like example_resource_1.\n</code></pre> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#handling-more-than-one-clusters","title":"Handling more than one clusters","text":"<p>A CRIDGE service is usually responsible for managing one cluster. In the following diagram we show how it can be used for managing multiple clusters:</p> <p></p> <p>We assume that there is an OSL Management cluster that OSL is installed. CRIDGE is also installed there if we would like to manage resources in the same management cluster.   - Each CRIDGE service has for example its own configuration to connect to target cluster  - Each CRIDGE can be installed either in the managed cluster or at the remote clusters. Connectivity is handled via the service bus  - Important: Each CRIDGE has a different context and API endpoints. This is used to request CRDs on a different cluster</p> <p>A CRD has a globally unique name for example mycrd.example.com. So we need to somehow identify also the different cluster</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OSL Resource Inventory need to be aware of these events.</p> <p>The sync process is found in the code and explained by the following picture:</p> <p></p> <p>WatcherService is executed when the cridge service application starts (see onApplicationEvent). First things:</p> <ul> <li>KubernetesClientResource is a class that wraps fabric8\u2019s KubernetesClient<ul> <li>This fabric8 KubernetesClient is initialized from the kubeconf and default context of the machine that runs CRIDGE</li> </ul> </li> <li>On CRIDGE Start up we try to register this cluster and context to OSL catalogs.<ul> <li>See registerKubernetesClientInOSLResource method which registers the KubernetesContextDefinition in Resource Inventory as a LogicalResource via  createOrUpdateResourceByNameCategoryVersion method</li> </ul> </li> <li>After the creation(or update) of this cluster as a Resource in OSL we proceed to create  SharedIndexInformers for CustomResourceDefinition objects</li> <li>In this way CRIDGE is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)</li> <li>The SharedIndexInformer events notify CRIDGE, which is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)<ul> <li>NOTE: The ADD event is raised every time also we run CRIDGE. Therefore, on ADD we do the method to createORupdate resource specifications and resources</li> </ul> </li> <li>On ADD event:<ul> <li>The CRD is transformed to OSL Kubernetes domain model: method kubernetesClientResource.KubernetesCRD2OpensliceCRD</li> <li>Then the OSL Kubernetes domain model is:<ul> <li>transformed to Resource Specification and is stored to catalog (see createOrUpdateResourceSpecByNameCategoryVersion)</li> <li>Transformed to Resource and is stored to catalog (see createOrUpdateResourceByNameCategoryVersion)</li> </ul> </li> <li>Conceptually while a CRD is a new resource located in the Kubernetes cluster resource, it is transformed also as a Resource Specification (a high-level entity) which is ready to be reused as an entity to other scenarios. The same concept as in Kubernetes where a CRD is a definition ready to be used for instantiating resources of this CRD</li> <li>Then for this CRD a Watcher is added for all Resources of this Kind (fabric8\u2019s GenericKubernetesResource entity)  </li> <li>When we have a newly added/updated/deleted resource of a certain CRD the method updateGenericKubernetesResourceInOSLCatalog is called for this object  (fabric8\u2019s GenericKubernetesResource entity)</li> <li>We examine if the resource has label org.etsi.osl.resourceId<ul> <li>This label is added by OSOM during service orders to correlate K8S requested resources with resources in inventory</li> </ul> </li> <li>If the label exists, we update the resource by ID updateResourceById</li> <li>Else a resource is created in catalog</li> </ul> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#deployment-of-a-new-cr-based-on-a-crd","title":"Deployment of a new CR based on a CRD","text":"<ul> <li>A message arrives to deploy a CR<ul> <li>The call examines if this CRIDGE service can handle the request (based on context and masterURL)</li> </ul> </li> <li>There are headers received and a crspec in json</li> <li>The crspec is unmarshaled as GenericKubernetesResource</li> <li>Headers are in format org.etsi.osl.*</li> <li>These headers are injected as labels <ul> <li>(see later in orchestration)</li> </ul> </li> <li>A  namespace is created for this resource</li> <li>Watchers are created for this namespace for e.g. new secrets, config maps etc , so that they can be available back as resources to the Inventory of OSL (Note only Secrets for now are watched)</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>See ExposingKubernetesResources</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p> <p>However, the following issue needs to be solved: ** How to map the CR lifecycle that is defined in the CRD with the TMF resource Lifecycle? **     - For this We introduced the following characteristics:  _CR_CHECK_FIELD, _CR_CHECKVAL_STANDBY, _CR_CHECKVAL_ALARM, _CR_CHECKVAL_AVAILABLE, _CR_CHECKVAL_RESERVED, _CR_CHECKVAL_UNKNOWN, _CR_CHECKVAL_SUSPENDED</p> <p>OSOM sends to CRIDGE a message with the following information:</p> <ul> <li>currentContextCluster: current context of cluster </li> <li>clusterMasterURL: current master url of the cluster </li> <li>org.etsi.osl.serviceId: This is the related service id that the created resource has a reference </li> <li>org.etsi.osl.resourceId: This is the related resource id that the created CR will wrap and reference.  </li> <li>org.etsi.osl.prefixName: we need to add a short prefix (default is cr) to various places. For example in K8s cannot start with a number </li> <li>org.etsi.osl.serviceOrderId: the related service order id of this deployment request </li> <li>org.etsi.osl.namespace: requested namespace name </li> <li>org.etsi.osl.statusCheckFieldName: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>org.etsi.osl.statusCheckValueStandby: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAlarm: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAvailable: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueReserved: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueUnknown: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li> <p>org.etsi.osl.statusCheckValueSuspended: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </p> </li> <li> <p>Parameters:</p> <ul> <li>aService reference to the service that the resource and the CR belongs to</li> <li>resourceCR reference the equivalent resource in TMF repo of the target CR. One to one mapping</li> <li>orderId related service order ID</li> <li>startDate start date of the deployment (not used currently)</li> <li>endDate end date of the deployment (not used currently)</li> <li>_CR_SPEC the spec that is sent to cridge (in json)</li> </ul> </li> <li> <p>Returns:</p> <ul> <li>a string response from cridge. It might return \"OK\" if everything is ok. \"SEE OTHER\" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. Any other response is handled as error</li> </ul> </li> <li> <p>CRIDGE receives the message and creates according to the labels the necessary CR</p> </li> <li>It monitors the created resource(s) in namespace (see the Sequence Diagram in previous images)</li> <li>It monitors and tries to figure out and map the Status of the CR to the TMF Status according to the provided org.etsi.osl.statusCheck* labels</li> <li>It sends to the message bus the current resource for creation or update to the TMF service inventory</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#whats-next","title":"What's next?","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> </ul>"},{"location":"contributing/developing/","title":"Developing","text":"<p>OpenSlice backend services are mainly implemented with Java 17 or above and Spring boot.</p> <p>OpenSlice uses various subsystems and depending on the module would you like to work, other subsystems must be present (you can disable them though in the code, e.g. at docker-compose.yaml file).</p> <p>To get the latest development branch:</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh \nsudo ./deploy.sh develop  #[or replace develop with other branch name]\n</code></pre> <p>You may follow the installation process, as described at \"develop\" tagged documentation.</p> <p>To work on a specific subsystem e.g. org.etsi.osl.tmf.api, you must:</p> <p>1a - Deploy only the core necessary subsystems through:</p> <pre><code>sudo docker compose --profile dev down;sudo docker compose --profile dev up -d --build\n</code></pre> <p>Note --profile dev that will only deploy the core dependency subsystems, instead   of the whole OpenSlice.</p> <p>1b - Or alternatively, commend out the respective container from the docker-compose.yaml file, so as to deploy the whole OpenSlice, except the subsystem you want to work on, following the provided installation steps.</p> <p>2 - Clone the respective repository, e.g. https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/tree/develop</p> <p>3 - Code :)</p>"},{"location":"contributing/developing/#general-requirements","title":"General requirements","text":"<ul> <li>Docker should be installed in your development environment</li> <li>Run the core subsystems (see above section)</li> </ul>"},{"location":"contributing/developing/#slack","title":"Slack","text":"<p>Feel free to join OpenSlice Slack for any development oriented questions.</p>"},{"location":"contributing/developing/#examples-of-developing-on-specific-subsystems","title":"Examples of developing on specific subsystems","text":""},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-api-service","title":"VNF/NSD Catalog Management and NSD Deployment API service","text":"<p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.api/-/tree/develop</p> <p>Check the docker-compose.yml file. Default port is 13080. Check specifically the datasource username/password, server port.</p> <p>Make sure that the core subsystems are up and running.</p> <p>Execute it with </p> <pre><code>mvn spring-boot:run\n</code></pre> <p>For verification, Swagger API of the service is at <code>http://localhost:13000/osapi/swagger-ui/index.html</code>. </p> <p>There, you may try there various REST actions and authenticate via the OAuth server without the use of the UI.</p>"},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-web-ui-service","title":"VNF/NSD Catalog Management and NSD Deployment WEB UI service","text":"<p>The Web UI is written in AngularJS.</p> <p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.web/-/tree/develop</p> <p>By default the project org.etsi.osl.portal.api exposes the folder ../org.etsi.osl.portal.web/src/ in a folder testweb (Check class MvcConfig.java in org.etsi.osl.portal.api) for development. (In production nginx is used). Point your browser to <code>http://localhost:13000/osapi/testweb/index.html/</code></p>"},{"location":"contributing/developing/#versionrelease-management","title":"Version/release management","text":"<p>Check this nice article on how we develop and release versions.</p> <p>https://nvie.com/posts/a-successful-git-branching-model/</p> <p>We develop in the develop branch and follow a issue driven development model.</p>"},{"location":"contributing/developing/#wishlist","title":"Wishlist","text":"<p>Check also our wishlist of new features. You can add your own.</p> <p>See Wishlist.</p>"},{"location":"contributing/wishlist/","title":"TMF API","text":"<ul> <li>RBAC of API endpoints</li> <li>TMF Ticketing API support</li> <li>TMF Product</li> <li>HATEOAS integration</li> <li>Select Specs that can be exposed to partners (maybe with a characteristic?)</li> </ul>"},{"location":"contributing/wishlist/#resource-management","title":"resource management","text":"<ul> <li>Resource Activation and Configuration API TMF702 (NEW) (https://projects.tmforum.org/wiki/pages/viewpage.action?pageId=128855518)</li> </ul>"},{"location":"contributing/wishlist/#tmf-web","title":"TMF WEB","text":""},{"location":"contributing/wishlist/#osom","title":"OSOM","text":"<ul> <li>Actions on service order item and acknowledge order status will define the lifecycle</li> <li>action shutdown on specific date for service order</li> <li>action edit on service order item</li> </ul>"},{"location":"contributing/wishlist/#dynamic-attribute-transformation","title":"Dynamic attribute transformation","text":"<ul> <li>DTM decision tables support per Service Specification</li> <li>Schedule Termination of completed order on running services</li> </ul>"},{"location":"contributing/wishlist/#nfvo-connectivity","title":"NFVO connectivity","text":""},{"location":"contributing/wishlist/#osm-client","title":"OSM Client","text":"<ul> <li>VNF/NSD config params Day 2</li> <li>NSD Lifcecylce</li> <li>NST support</li> </ul>"},{"location":"contributing/wishlist/#nfv-api","title":"NFV API","text":""},{"location":"contributing/wishlist/#nfv-web","title":"NFV WEB","text":""},{"location":"contributing/wishlist/#3rd-party-connectivity","title":"3rd party connectivity","text":""},{"location":"contributing/wishlist/#flowone-connector","title":"FlowOne connector","text":""},{"location":"contributing/wishlist/#openstack-connector","title":"Openstack connector","text":""},{"location":"contributing/wishlist/#kubernetes-connector","title":"Kubernetes connector","text":""},{"location":"contributing/wishlist/#centrallog","title":"CentralLog","text":"<ul> <li>Events from TMF to be written to Central Log</li> </ul>"},{"location":"contributing/wishlist/#authentication","title":"Authentication","text":""},{"location":"naas/exposed_apis/","title":"Supported TMFORUM exposed APIs","text":"Endpoint Title Description Version /tmf-api/serviceCatalogManagement/v4 633 Service Catalog Management Provides a catalog of services. 4.0.0 /tmf-api/productCatalogManagement/v4/ 620 Product Catalog Management Provides a catalog of products. 4.0.0 /tmf-api/productOrderingManagement/v4/ v622 Product Ordering Provides a standardized mechanism for placing a product order. 4.0.0 /tmf-api/resourceCatalogManagement/v4 634 Resource Catalog Management This is Swagger UI environment generated for the TMF Resource Catalog Management specification. 4.0.0 /tmf-api/serviceInventory/v4 638 Service Inventory Management Provides a consistent/standardized mechanism to query and manipulate the Service inventory. 4.0.0 /tmf-api/serviceOrdering/v4 641 API ServiceOrdering Provides a standardized mechanism for managing Service Order. 4.0.0 /tmf-api/serviceQualityManagement/v2 657 Service Quality Management This is Swagger UI environment generated for the TMF Service Quality Management specification. 2.0.0 /tmf-api/partyRoleManagement/v4/ 669 Party Role Management This is Swagger UI environment generated for the TMF Party Role Management specification. 4.0.0 /tmf-api/party/v4/organization 632 API Party Provides standardized mechanism for party management such as creation, update, retrieval, deletion and notification of events. 4.0.0 /tmf-api/agreementManagement/v2/ 651 Agreement Management T his is Swagger UI environment generated for the TMF Agreement Management specification. 2.0.0 /tmf-api/resourceOrderingManagement/v4 652 Resource Order Management-v4.0.0 This is Swagger UI environment generated for the TMF 652-Resource Order Management-v4.0.0 specification. 4.0.0 /tmf-api/accountManagement/v4 666 Account Management This is Swagger UI environment generated for the TMF Account Management specification. 4.0.0 /tmf-api/customerManagement/v4 629 Customer Management TMF Customer Management 4.0.0 /tmf-api/userinfo 691 Federated ID TMF Federated ID 1.0.0 /tmf-api/ServiceActivationAndConfiguration/v3/ 640 API Service Activation and Configuration Provides the ability to activate and configure Services. 3.0.0 /tmf-api/alarmManagement/v4/ 642 API Alarm 4.0.0 /tmf-api/serviceTestManagement/v4 653 Service Test Management Provides the ability to manage tests of provisioned Services. 4.0.0 /tmf-api/resourceInventoryManagement/v4 639 API Resource Inventory Management Provides the ability to manage Resources. 4.0.0 /tmf-api/lcmrulesmanagement/v1/ LCM Rules Custom API environment for LCM Rules 1.0.0 /tmf-api/resourcePoolManagement/v1 685 Resource Pool Management Resources that can be reserved are only in one pool. 1.0.0 /tmf-api/geographicSiteManagement/v5 674 Geographic Site Management Covers the operations to manage sites that can be associated with entities 5.0.0"},{"location":"naas/introduction/","title":"Network as a Service (NaaS)","text":"<p>This section describes some core concepts for Delivering Network as a Service in OpenSlice. There are many articles and reports on the subject like:</p> <ul> <li>TMF909 API Suite Specification for NaaS</li> <li>TMF926A Connectivity_as_a_Service </li> <li>TMF931-Open_Gateway_Onboarding_and_Ordering_Component_Suite</li> <li>GSMA Open Gatewy initiative</li> </ul> <p>In general Network as a Service (NaaS) is a  service model that allows users to consume network infrastructure and services , similar to how they would consume other cloud services like Software as a Service (SaaS) or Infrastructure as a Service (IaaS). NaaS abstracts the complexity of managing physical network infrastructure, providing users with virtualized network resources that can be dynamically allocated and managed through software.</p>"},{"location":"naas/introduction/#openslice-and-naas","title":"OpenSlice and NaaS","text":"<p>OpenSlice makes extensive use of TMFORUM's models and APIs. Therefore if one is familiar with TMF APIs the terminology and ideas are the same.</p> <p>To deliver NaaS we need to incorporate various APIs (see TMF909 API Suite Specification for NaaS). OpenSlice implements various TMF APIs to deliver NaaS and support the  lifecycle functions required to manage the network capabilities exposed as Network as a Service and managed by operational domains.</p>"},{"location":"naas/introduction/#whats-next","title":"What's next","text":"<ul> <li>For a complete list of supported APIs, see Supported APIs</li> <li>Check the defined user roles of OpenSlice in our Terminology</li> </ul>"},{"location":"naas/resource_catalog/","title":"OpenSlice Resource Catalog:","text":"<pre><code>* Resource Specifications: Defines the underlying resources required to deliver services, such as network components, servers, and software.\n* Resource Availability: Tracks the availability and status of resources to ensure efficient service delivery.\n</code></pre>"},{"location":"naas/service_catalog/","title":"OpenSlice Service Catalogs","text":"<p>OpenSlice offers complete management of  Service Catalogs.</p>"},{"location":"naas/service_catalog/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>OpenSlice offers complete management of  Service Catalogs which offer to end users:</p> <ul> <li>Service categories: Lists the available services, including their specifications and performance metrics.</li> <li>Service Bundles: Combines multiple services into a single offering to provide added value to customers.</li> </ul> <p>Service Catalogs contain Service Specifications (organized in Service Categories) exposed to users for Service Orders.</p>"},{"location":"naas/service_catalog/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following. Service catalogs and categories exposed in Service marketplace. </p> <p>In the menu the administrator can manage the Service Catalogs and Categories.</p> <p></p>"},{"location":"naas/service_catalog/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n\nendpoint examples:\n\n/serviceCatalogManagement/v4/serviceCatalog List or find ServiceCatalog objects\n/serviceCatalogManagement/v4/serviceCategory List or find ServiceCategory objects\n\n</code></pre>"},{"location":"naas/service_catalog/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition:  Service Template thus create a template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> <li>Service Catalog Integration: Add to Service Catalog the XXXX service  with all relevant details.</li> <li>Service Delivery/Order: Provision Service by Using the orchestration system to provision and configure the XXXX service based on customer orders.</li> </ul>"},{"location":"naas/service_catalog/#whats-next","title":"What's next","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Catalog and Categories here</li> </ul>"},{"location":"naas/service_inventory/","title":"Service Inventory","text":"<p>Service Inventory contains refences to running services that realize a Service Order</p>"},{"location":"naas/service_inventory/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>The Service Inventory is a repository that maintains detailed records of all active services and the underlying resources that support them. It acts as a central repository, tracking the lifecycle of each service from provisioning to decommissioning, and includes references to the specific virtual and physical resources that realize the service, such as servers, network components, storage, and software instances. </p> <p>This inventory enables real-time visibility into the status, configuration, and dependencies of each service, facilitating effective management, troubleshooting, and optimization. </p> <p>By providing a view of the active services, the Service Inventory includes services/resource allocation, and ensures that services are delivered in alignment with the inital requst. </p>"},{"location":"naas/service_inventory/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Inventory and any active Services (reconfigure or terminate).Various examples in this document will guide you to the usage and the management of the Services in Service Inventory.</p>"},{"location":"naas/service_inventory/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-638-ServiceInventoryManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceInventory/v4/service List or find Service objects</p>"},{"location":"naas/service_inventory/#whats-next","title":"What's next","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_ordering/","title":"Service Ordering","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders.</p>"},{"location":"naas/service_ordering/#intended-audience-service-designers-openslice-administrators","title":"Intended Audience: Service Designers, OpenSlice administrators","text":"<p>The Service Order process is a structured sequence of steps initiated by a customer's Service Order request for a specific service, aimed at delivering and activating the desired service or services (if it is a service bunlde), as well as its related services. It begins with the customer submitting a service request through OpenSlice Services portal or the Service Order API, specifying the necessary details such as service specification, configurations, and any specific requirements.</p> <p>The request is then validated and verified for completeness and eligibility by an administrator which marks the Service Order as ACKNOWLEDGED otherwise it rejects it. </p> <p>Once ACKNOWLEDGED, the service order is processed by OpenSlice orchestration system (OSOM), which schedules/automates the provisioning of the required resources and configurations, coordinating across various components such as MANO controlers for virtual network functions (VNFs), or Containerized controllers  or any 3rd party controllers or services or even physical infrastructure. The OpenSlice orchestration system ensures that all dependencies are managed and that the service is correctly configured.</p> <p>After provisioning, the service is activated and handed over to the customer, . This end-to-end process ensures a seamless, efficient, and automated delivery of services, enhancing customer satisfaction and operational efficiency.</p> <p>Ongoing monitoring and other actions can be performed by the Life Cycle management rules</p> <p>Future developments:  In future releases it might be possible the ongoing monitoring and support provided to ensure continuous performance and reliability. The service could undergoe a series of tests to ensure it meets the specified performance metrics and SLAs before delivering</p>"},{"location":"naas/service_ordering/#whats-next","title":"What's next","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_spec/","title":"OpenSlice Service Specification","text":"<p>OpenSlice offers complete management of Service Specifications.</p>"},{"location":"naas/service_spec/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Specification is an entity that describes a service offering. There are two types of Service Specifications:</p> <ul> <li>Resource Facing Service Specification</li> <li>Customer Facing Service Specification</li> </ul>"},{"location":"naas/service_spec/#resource-facing-service-specification","title":"Resource Facing Service Specification","text":"<p>Is a Service that It exposes a resource Specification as a Service. (For example expose a Network Service Descriptor as a Service)</p>"},{"location":"naas/service_spec/#customer-facing-service-specification","title":"Customer Facing Service Specification","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders. Usually it exposes other CFSSpec(as a Service Bundle) or other RFSSpecs</p>"},{"location":"naas/service_spec/#definition","title":"Definition","text":"<p>Usually a Service Specification has the following aspects:</p> <ul> <li>Name, Description, Version</li> <li>Marked as a Service Bundle: Combines multiple services into a single offering to provide added value to customers.</li> <li>if is is a Bundle then you must add Related Service Specifications</li> <li>If it is a Resource Facing Service Specification has multiple related Resource Facing Service Specifications</li> <li>Characteristics: a list of service characteristics and their type (TEXT, INTEGER, etc)</li> <li>Also they can be exposed as \"Configurable\" so to allow to end-users during the Service Order to select or type values</li> <li>A logo, displayed if needed in the Service Marketplace</li> <li>Any attachments that further help the user</li> <li>Life Cycle Rules that determine the behavior of the Service and instrument the Service Orchestrator. More on Life Cycle Rules here</li> </ul> <p>Service Designers can create a Service Specification from scratch or use some templates:</p> <pre><code>* Create a Service based from a Network Service Descriptor (NSD)\n* Create a Service based on a Kubernetes Operator\n* Create a Service based on the GSMA GST - Generic Slice Template\n</code></pre>"},{"location":"naas/service_spec/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following.</p> <p>Through the menu and dedicated forms the administrator can manage the Service Specifications. Various examples in this document will guide you to the usage and the design of the services.</p>"},{"location":"naas/service_spec/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceCatalogManagement/v4/serviceSpecification List or find ServiceSpecification objects</p>"},{"location":"naas/service_spec/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition:  Create a service specification template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> </ul>"},{"location":"naas/service_spec/#whats-next","title":"What's next","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Service Specifications in Catalog and Categories here (You need to login - see main guide page)</li> <li>Check the GSMA GST</li> </ul>"},{"location":"naas/nfv/nfvservices/","title":"NFV Services","text":"<p>NFV Services are managed through a dedicate UI the NFV portal (eg http://portal.openslice.io/nfvportal)</p> <p>Users are able through this portal to manage their NFV artifacts towards the NFVO, ( for example onboard VNFs and NSDs to a target OSM)</p> <p>Openslice NFV Services target to accommodate the following envisaged user roles. All users are assumed to be Authenticated:</p> <ul> <li>NFV developer: This role is responsible to upload VNF and NSD Descriptors in the Openslice services towards NFVO like OSM</li> <li>Services administrator: This role represents the user that are responsible for maintenance of the Openslice services</li> </ul> <p>(obsolete: )</p> <ul> <li>Testbed provider: This role represents users that are responsible for testbed administration, configuration, integration, adaptation, support, etc</li> <li>Experimenter: This role represents the user that will utilize our services and tools to deploy an experiment. That is the experiment description in terms of e.g.: NSD (Network Service Descriptor) or TOSCA Specification (in future versions)</li> </ul> <p>Finally an anonymous user role exists who has some really simple usage scenarios (e.g. signup through the portal)</p> <p>During the onboarding process the following occurs:</p> <p>\u2022 A NFV developer submits a NFV archive (VNF or NSD) (he can later manage if needed some metadata) \u2022 The administrator can manage the NFV artifact (e.g. edit it) \u2022 The administrator On-Boards the NFV artifact to the target MANO \u2022 The administrator can optionally mark the NFV: o As public in order to be publicly visible by all portal users o As Certified which means this is certified by a certain entity</p>"},{"location":"naas/nfv/nfvservices/#request-a-new-nsd-deployment-this-is-different-in-comparison-to-services","title":"Request a new NSD deployment (this is different in comparison to Services)","text":"<p>A developer requests a new network service deployment (which NSD, tentative dates, target infrastructure, etc.). The request is marked as UNDER_REVIEW</p> <ul> <li>The administrator is notified about the new request and he has the following options:</li> <li>Schedule the deployment for the requested dates or propose other dates. The request is marked as SCHEDULED</li> <li>Reject the request for some reason. The Request is marked as REJECTED</li> <li>Deploy the request to target VIM(s). The Request is marked as RUNNING</li> <li>Finalize the deployment and release resources. The Request is marked as COMPLETED</li> <li>every change of the request-lifecycle the experimenter is notified.</li> </ul>"},{"location":"service_design/intro/","title":"Service Design in OpenSlice","text":"<p>This section offers details on how to design Service Specifications and expose them in Service Catalogs</p>"},{"location":"service_design/intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Designers create detailed service specifications, which are then managed and exposed in service catalogs. These services are integrated into OpenSlice E2E service orchestration framework to automate and optimize the delivery of network services.</p> <p>OpenSlice can be used to design service specifications for various services, even not networking related services. Here we cover how service designers can expose services related to the NFV world and the containerized world.</p>"},{"location":"service_design/intro/#whats-next","title":"What's next","text":"<ul> <li>Design and expose services based on containerized resources via the Kubernetes Operator pattern</li> <li>Design and expose services based on NFV artifacts</li> </ul>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/","title":"Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>To illustrate the powerful concept of Kubernetes operators and how they can be utilized to offer a service through OpenSlice, let's provide an example of a \"Calculator as a Service.\" </p> <p>This example will demonstrate the flexibility and capabilities of Kubernetes operators in managing custom resources and automating operational tasks.</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#offering-calculator-as-a-service-through-openslice","title":"Offering \"Calculator as a Service\" through OpenSlice","text":"<ul> <li>We have a service that can accept two integers and an action (SUM, SUB, etc) and returns a result</li> <li>We would like to offer it as a Service through OpenSlice</li> <li>So when a user orders it with some initial parameters, OpenSlice will create it and return the result</li> <li>Also while the service is active, we can do further calculations, until we destroy it.</li> </ul> <p>Assume the following simple CRD of a calculator model accepting two params (spec section) and an action and returning a result (status section)</p> <p>The controller (the calculator code) is implemented in any language and is installed in a Kubernetes cluster</p> <pre><code>\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  name: mycalculators.examples.osl.etsi.org\nspec:\n  group: examples.osl.etsi.org\n  names:\n    kind: MyCalculator\n    plural: mycalculators\n    singular: mycalculator\n  scope: Namespaced\n  versions:\n  - name: v1alpha1\n    schema:\n      openAPIV3Schema:\n        properties:\n          spec:\n            properties:\n              parama:\n                type: integer\n              paramb:\n                type: integer\n              action:\n                type: string\n            type: object\n          status:\n            properties:\n              result:\n                type: integer\n              status:\n                type: string\n            type: object\n        type: object\n    served: true\n    storage: true\n    subresources:\n      status: {}\n</code></pre> <p>Request to the cluster (through e.g. kubectl apply)</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n  name: mycalculator.examples.osl.etsi.org\nspec:\n  parama: 170\n  paramb: 180\n  action: 'SUM'\n\n</code></pre> <p>Response</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n\u00a0 creationTimestamp: '2023-12-05T12:26:07Z\u2019\n\n&lt;snip&gt;\n\nstatus:\n\u00a0 result: 350\n\u00a0 status: CALCULATED\nspec:\n\u00a0 action: SUM\n\u00a0 parama: 170\n\u00a0 paramb: 180\n\n</code></pre> <p>To perform this through OpenSlice as a Service Specification ready to be ordered we need to do the following:</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#crd-is-saved-automatically-as-resource-specification","title":"CRD is saved automatically as Resource Specification","text":"<p>As soon as the CRD is deployed in the cluster (e.g. by your admin via kubctl or via any installation through the internet) it is automatically transformed and is available in OpenSlice catalogs as a Resource Specification.</p> <ul> <li>See also the fully qualified name of the resource specification. <ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@docker-desktop@https://kubernetes.docker.internal:6443/</li> <li>The resource specification name is quite unique, so you can install the CRD in many clusters around the internet. Each CRD on each cluster will appear here, for example:<ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@default_cluster@https://10.10.10.8:6443/</li> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@edge1_cluster@https://172.16.10.10:6443/</li> </ul> </li> <li>Having this OpenSlice can manage resources in multiple clusters</li> </ul> </li> </ul> <p></p> <p>See also the detailed characteristics. See how OpenSlice makes all characteristics automatically flat and expanded with key-value style</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-to-users","title":"Expose to Users","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#start-by-creating-a-resourcefacingservicespecification","title":"Start by Creating a ResourceFacingServiceSpecification","text":"<p>From the UI menu create a new Service Specification</p> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#creation-of-crd-related-characteristics","title":"Creation of CRD-related characteristics","text":"<ul> <li>We need now to adjust some characteristics of this CRD as Resource Specification.</li> <li>OpenSlice transalted automatically the CRD spec in a flat list of characteristics.So the \"spec\" section from the original yaml for example, is now unfold into: spec, spec.parama, spec.paramb, etc. the same for \"status\" object</li> <li> <p>We need to make OpenSlice aware of when the service will be active. </p> <ul> <li>So we go to characteristic _CR_CHECK_FIELD and we define that the field that shows the status of the service is the characteristic \"status.status\" (is a text field) </li> <li>Then we go to _CR_CHECKVAL_AVAILABLE and we define the value CALCULATED, which signals the following: When the characteristic \"status.status\" has the value \"CALCULATED\" then OpenSlice will mark the underlying service as \"ACTIVE\"</li> <li>We need also to define the yaml file that OpenSLice will use to create the new resource in the kubernetes cluster</li> <li>We insert the YAML in the characteristic _CR_SPEC</li> </ul> <p>the _CR_SPEC is: </p> </li> </ul> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n  name: mycalculator.examples.osl.etsi.org\nspec:\n  parama: 170\n  paramb: 180\n  action: 'SUM'\n\n</code></pre> <p></p> <p>However the values are fixed. How do we allow a user to pass parameters through OpenSlice</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-in-catalog","title":"Expose in Catalog","text":"<p>Create a new CustomerFacingServiceSpecification</p> <pre><code>- Go to the menu Service Specification&gt;New Service Specification\n- Create a service My Calulator and mark it as a Bundle\n- Go to Service Specification Relationships and add MyCalculatorRFS\n- The service will be automatically transformed to a \"CustomerFacingServiceSpecification\"\n- Add the following characteristics as the image shows:\n</code></pre> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#allow-users-to-pass-new-values-through-openslice","title":"Allow users to pass new values through OpenSlice","text":"<p>We need to Create LCM rules in CustomerFacingServiceSpecification:</p> <pre><code>- The goal of the rules is to allow the user to pass parameters to the actual resource towards the cluster.\n- we will create one rule that will pass the parameters just before creating the service (PRE_PROVISION phase)\n- we will create one rule that will pass the parameters while the service is active (SUPERVISION phase)\n- The rules will be the same\n</code></pre> <p></p> <p>If we see one rule it will look like the following:</p> <p></p> <ul> <li>We need to change the _CR_SPEC characteristic of the referenced ResourceFacingServiceSpecification</li> <li>First bring a block from Service&gt;Relationships&gt;Service Refs and drop the \"Service MyCalculatorRFS\" block</li> <li>Then add a list block from Lists</li> <li>Then add the block that modifies a referenced characteristic from Service&gt;Relationships&gt;Service Refs the block \"Set value to characteristic of a Referenced Service\"</li> <li>Add a block for text _CR_SPEC </li> <li>We use a block that changes a String according to variables Text&gt;\"A formatted text replacing variables from List\"</li> <li>See that we have as Input string the YAML string lines<ul> <li>see that parama, paramb has a %d (they accept integers), action is %s (accepts a string)</li> <li>See that the variables tha will replace the %d, %d and %s are an list<ul> <li>the first %d will be replaced with the value from characteristic spec.parama</li> <li>the second %d will be replaced with the value from characteristic spec.paramb</li> <li>the %s will be replaced with the value from characteristic spec.action</li> </ul> </li> </ul> </li> </ul> <p>If we see the SUPERVISION rule it will look like the following:</p> <ul> <li>It contains also the Result field, which takes the value from the referenced service</li> <li>Add a block for the Result field from Service&gt;Number blocks</li> <li>Add a  str to int block from Number blocks</li> <li>Add Service&gt;Relationships&gt;Service Refs and drop the input block [Service MyCalculatorRFS] \"Get Service details from current context running service\" and select from the drop down the \"serviceCharacteristicValue\"</li> <li>Add as name the \"status.result\" </li> </ul> <p></p> <p></p> <p>Expose it then to a catalogue for orders through the Service Categories and Service Catalogs</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#order-the-service","title":"Order the Service","text":"<p>When a user orders the service, it will look like this:</p> <p></p> <ul> <li>After the Service Order we have 2 services in service inventory on CFS and on RFS. Both have references to values</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The Actual resources are running in the Kubernetes cluster managed by OpenSlice</li> <li>The result is in the characteristic status.result of the running service</li> </ul> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#modify-the-running-service","title":"Modify the running service","text":"<p>The user can modify the service</p> <p></p> <ul> <li>After a while the update is applied to the cluster, the controller will pick up the resource update and patch the resource</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The result will be available to the respective characteristic \"Result\" after a few seconds, as need to go through various steps (OpenSlice orchestrator, down to kubernetes, to Calculator controller and back)</li> </ul> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/","title":"Expose and manage Kubernetes Custom Resource Definitions (Operators) in a Kubernetes Cluster","text":"<p>OpenSlice is capable of exposing Kubernetes Resources and Definitions as Service Specifications</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>OpenSlice is capable to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OpenSlice services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>OpenSlice capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <ul> <li>OpenSlice can expose CRs in service catalogs, facilitating their deployment in complex scenarios.</li> <li>These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#approach","title":"Approach","text":"<p>OpenSlice in general is responible for exposing service specifications  which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. </li> <li>OSOM creates a Resource in OSL Resource inventory and requests new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OpenSlice Resource Inventory need to be aware of these events.</p> <p>When installing OpenSlice you can configure at least one management cluster. OpenSlice connects via a provided kubeconf</p> <ul> <li>On Start up OSL  tries to register this cluster and context to OSL catalogs.</li> <li>After the registration of this cluster as a Resource in OSL OSL is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL</li> <li>Resources created by OpenSlice have labels, e.g. (org.etsi.osl.*)</li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>A CRD by default is exposed as a Resource Specification</p> <p>To ensure unique names across the clusters that OpenSlice can manage, the name of a CRD is constructed as follows:</p> <p><code>Kind @ ApiGroup/version @ ContextCluster @ masterURL</code></p> <p>For example you might see resource Specifications like:</p> <pre><code>- ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n- ```IPAddressPool@metallb.io/v1beta1@kubernetes@https://10.10.10.144:6443/```\n- ```Provider@pkg.crossplane.io/v1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p>All attributes of the CRD are translated into characteristics</p> <p>The following specific characteristics are added:</p> <pre><code>    - _CR_SPEC: Used for providing the json Custom Resource description to apply\n    - _CR_CHECK_FIELD: Used for providing the field that need to be checked for the resource status\n    - _CR_CHECKVAL_STANDBY: Used for providing the equivalent value from resource to signal the standby status\n    - _CR_CHECKVAL_ALARM: Used for providing the equivalent value from resource to signal the alarm status\n    - _CR_CHECKVAL_AVAILABLE: Used for providing the equivalent value from resource to signal the available status\n    - _CR_CHECKVAL_RESERVED: Used for providing the equivalent value from resource to signal the reserved status\n    - _CR_CHECKVAL_UNKNOWN: Used for providing the equivalent value from resource to signal the unknown status\n    - _CR_CHECKVAL_SUSPENDED: Used for providing the equivalent value from resource to signal the suspended status\n</code></pre> <ol> <li> <p>Create a new Service Specification and use this Resource Specification in Resource Specification Relationships</p> <ul> <li>Then the Service Specification is saved as ResourceFacingServiceSpecification</li> </ul> <p>1.1. You can give at this stage values to the characteristics:</p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>1.2. You can now create LCM rules if you wish</p> </li> <li> <p>Create a new Service Specification and use the Resource Facing Service Specification in Service Specification Relationships</p> <ul> <li>Then the Service Specification is saved as CustomerFacingServiceSpecification</li> </ul> <p>2.1. You can give at this stage values to the characteristics: </p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>2.2. You We can create LCM rules for this new Service Specification</p> <p>2.3. You Expose configurable values for users to configure during service order</p> </li> </ol> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM - OpenSlice Service Orchestrator, checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#mapping-the-cr-lifecycle-that-is-defined-in-the-crd-with-the-openslice-tmf-based-resource-lifecycle","title":"Mapping the CR lifecycle that is defined in the CRD with the OpenSLice (TMF-based) resource Lifecycle","text":"<p>OpenSlice adds automatically as we see the following characteristics: </p> <pre><code>    - _CR_CHECK_FIELD\n    - _CR_CHECKVAL_STANDBY\n    - _CR_CHECKVAL_ALARM\n    - _CR_CHECKVAL_AVAILABLE\n    - _CR_CHECKVAL_RESERVED\n    - _CR_CHECKVAL_UNKNOWN\n    - _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>These characteristics instrument OpenSlice services to manage and reflect the lifecycle of a kubernetes resource to OpenSlice's (TMF based) lifecycle</p> <ul> <li>_CR_CHECK_FIELD: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>_CR_CHECKVAL_STANDBY: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_ALARM: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_AVAILABLE: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_RESERVED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_UNKNOWN: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#whats-next","title":"What's next?","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> <li>Learn more about CRIDGE, the service in OSL that manages CRDs/CRs</li> </ul>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/","title":"Example: Offer Jenkins as a Service via Openslice","text":"<p>Before reading this example please make sure that you went through the Design Helm as a Service </p> <p>We will use the <code>Kind: Application</code> of ArgoCD and create a  ResourceFacingServiceSpecification for Jenkins</p> <pre><code>1. Go to Service Specifications\n2. Create New Specification\n3. Give a Name, eg. jenkinsrfs\n4. Go to Resource Specification Relationships\n5. Assign ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p></p> <p>Focus now on the characteristics configuration.</p> <p>First we need to map the lifecycle of ArgoCD Application to TMF Resource State</p> <p></p> <p>In ArgoCD the field health.status has the value that we need to check (Healty, Progressing, etc)</p> <p>The _CR_SPEC can be designed first in a YAML or json editor. Let's see a YAML definition:</p> <p>```</p> <p>apiVersion: argoproj.io/v1alpha1 kind: Application metadata:   finalizers:   - resources-finalizer.argocd.argoproj.io   name: openslice-jenkins   namespace: argocd spec:   project: default   destination:     namespace: opencrdtest     name: in-cluster   source:     repoURL: https://charts.jenkins.io     targetRevision: 4.6.1     chart: jenkins     helm:       values: |         controller:          service:          type: ClusterIP   syncPolicy:     automated:       prune: true       selfHeal: true       allowEmpty: false     syncOptions:     - Validate=false     - CreateNamespace=true     - PrunePropagationPolicy=foreground     - PruneLast=true     - RespectIgnoreDifferences=true ```</p> <p>NOTICE</p> <p>On each installation OSOM will change the name of the resource in order to be unique (will have a UUID)</p> <p><code>name: openslice-jenkins</code> </p> <p>destination namespace that ArgoCD will use is the name <code>opencrdtest</code></p> <p><code>destination:     namespace: opencrdtest</code></p> <p>This implies that ArgoCD installs the Jenkins always in the same namespace</p> <p>To avoid this we will create a simple pre-provision rule to change the namespace properly</p> <p>See the following image: </p> <p></p> <ol> <li>Drag-Drop the _CR_SPEC characteristic of jenkinsrfs from the Service&gt;Text blocks</li> <li>Drag-Drop Text&gt;Formatted text block</li> <li>Drag-Drop Text&gt;Multi-line text input block</li> <li>Copy paste the YAML text</li> <li>Change the spec: destination:namespace to the value %s</li> <li>Drag-Drop Lists&gt;Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context&gt;Current Service Order block and select the id. Connect it to the List</li> <li>Save the PRE_PROVISION Rule</li> </ol>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#expose-the-service-to-your-users","title":"Expose the service to your users","text":"<p>Expose then as CustomerFacingServiceSpecification by using the previous RFSS as Service Specification Relationship  1. Create a Jenkins service and mark as Bundle and save it  2. Go to Service Specification Relationships and assign Jenkinsrfs 3. Add also a Logo if you wish</p> <p></p> <p></p> <p>Expose it now to a Category and a Catalog to be available for ordering.</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#order-the-service","title":"Order the service","text":"<p>Order the service from the catalog. </p> <p>Soon the order will be completed and the Services will be active</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#how-to-access-the-jenkins-installation","title":"How to access the Jenkins installation:","text":"<p>From the Supporting services of the Service Order, select the ResourceFacingService (jenkinsrfs)</p> <p>The ResourceFacingService has also supporting resources in resource inventory.</p> <p></p> <p>One is the resource reference to the application (e.g. cr_tmpname...), the other is a secret (e.g. cr87893...). </p> <p>Click to go to the secret resource (This is in the Resource inventory of OpenSlice)</p> <p></p> <p>Use them to login in your Jenkins.</p> <p>Exposing Jenkins to you external is a matter of cluster configuration and request (nodeport, load balancing, etc)! This is not a topic for this example</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/","title":"Expose HELM charts as Service Specifications","text":"<p>Manage Helm charts installations via OpenSlice Service Specifications and Service Orders.</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. </p> <p>Helm is a tool that automates the creation, packaging, configuration, and deployment of Kubernetes applications by combining your configuration files into a single reusable package</p> <p>At the heart of Helm is the packaging format called charts. Each chart comprises one or more Kubernetes manifests -- and a given chart can have child charts and dependent charts, as well. Using Helm charts:</p> <pre><code>  - Reduces the complexity of deploying Microservices\n  - Enhances deployment speed\n  - Developers already know the technology\n</code></pre> <p>There are many Helm charts and Helm repositories there that are ready to be used</p> <p>Enable loose coupling and more orchestration scenarios</p> <p>Developers create and deploy applications in things they already know (e.g. Helm charts)</p> <p>Use the TMF models as wrapper entities around Helm charts</p> <p>Use OpenSlice to expose them in service catalogs and deploy them in complex scenarios (service bundles) involving also other systems:</p> <pre><code>- Include e.g. RAN controllers, \n- Pass values through life cycle rules from one service to another, \n- Manage multiple Helms in multiple clusters\n</code></pre>"},{"location":"service_design/kubernetes/helm/design_helmaas/#the-installation-of-helm-charts-is-based-on-openslice-crd-support","title":"The installation of HELM charts is based on OpenSlice CRD support","text":"<p>Please read more here</p> <p>For installing HELM charts we will use ArgoCD a well known Kubernetes-native continuous deployment (CD) tool </p> <p>ArgoCD is a Kubernetes-native continuous deployment (CD) tool</p> <p>While just deploying Heml charts is just a scenario for ArgoCD , in future one can exploit it for many things</p> <p>Despite some other tools like FluxCD, it provides also a UI which is useful for management and troubleshooting</p> <p>We will mainly use the CRD of <code>Kind: Application</code> that ArgoCD can manage</p> <p>Before proceeding, install ArgoCD in your management cluster, by following ArgoCD instructions</p> <p>As soon as you install ArgoCD, OpenSlice is automatically aware for specific new Kinds. The one we will use is is the <code>Kind: Application</code> that ArgoCD can manage under the apiGroup argoproj.io</p> <p>Browse to Resource Specifications. You will see an entry like the following:</p> <p><code>Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/</code></p> <p>see image: </p> <p></p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#whats-next","title":"What's next","text":"<p>See the Example: Offer Jenkins as a Service via Openslice </p>"},{"location":"service_ordering/ordering_services/","title":"Service Ordering","text":""},{"location":"service_ordering/ordering_services/#intended-audience-users","title":"Intended Audience: Users","text":""}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"<p>version: 2024Q2 - SNAPSHOT</p> <p>The ETSI Software Development Group for OpenSlice (SDG OSL) is developing an open-source service-based Operations Support System (OSS) to deliver Network as a Service (NaaS) following specifications from major SDOs including ETSI, TM Forum and GSMA.</p>"},{"location":"#usage","title":"Usage","text":"<p>OpenSlice can be used in managing 5G network services from the user device to the core network and cloud as well as for Orchestrating cloud resources across private and public clouds for enterprise applications.  OpenSlice is capable of supporting most of the features of an end-to-end (E2E) service orchestration framework while many of them will be more mature in future releases. The following figure displays the general usage of OpenSlice. </p> <p></p> <p>The image illustrates how OpenSlice supports the idea of an E2E network service orchestration framework by integrating multiple network components and layers, from user devices at the edge to radio, transport networks, core and public cloud services, ensuring seamless, secure, and efficient delivery of network services. Assuming that there are domain controllers for all the above domains OpenSlice can create the end-to-end service via the domain controllers by following the process of creating and deploying the end-to-end service by implementing transformations, and consuming APIs from various network entities. OpenSlice, in a nutchell, offers user interfaces where users can interact with the framework to order, expose, and manage service catalogs, services and resources that can be ordered, following business logic and policies and exposed through the APIs. </p>"},{"location":"#an-end-to-end-e2e-service-orchestration-framework","title":"An end-to-end (E2E) service orchestration framework","text":"<p>An end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, especially, Network as a Service (NaaS) a comprehensive system is needed that automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers. Such E2E frameworks enable users to consume network services on-demand, similar to how cloud computing services are consumed. Some key components and features of such frameworks are:</p> <ul> <li>Service Catalogs including predefined Network Services based on service templates for common network services like 5G core functions, 5G slices, VPNs, SD-WAN, firewalls, load balancers, etc. as well as custom Network services with Options for users to define their own network configurations.</li> <li>User Interface (UI) and APIs exposure, offering both a Self-Service Portal that allows users to request, configure, and manage network services as well as APIs for enabling programmatic access to network services for integration with other systems and automation scripts.</li> <li>Service Design and Creation tharough service templates based on predefined models for creating services.</li> <li>Automation and Workflow Management via Orchestration Engines, supporting  Process Automation for automating repetitive tasks and processes,  workflow management and orchestration for automating the provisioning, configuration, and management of network services while coordinating multiple workflows to ensure services are delivered efficiently, ensuring that services comply with predefined policies and standards.</li> <li>Standardized API exposure for seamless integration with different systems and services and APIs transformation support for converting data formats and protocols to ensure compatibility and information exhange between systems during workflows orchestration</li> <li>Service and Resource management and Orchestration while including the capability of multi-domain coordination in managing services/resources across different domains like cloud, 5G core, radios, transport network, and edge including dynamic allocation with adjusting resources based on demand and service requirements. To accomplish the above advanced technologies need to be exploited like, Containerized workloads,  Network Function Virtualization (NFV) which uses virtualized network functions to provide services like routing, switching, and security and Software-Defined Networking (SDN) which Controls the network programmatically to dynamically manage traffic and resources.</li> <li>Monitoring and Analytics including  Service Monitoring while continuously tracking the performance and health of services with capabilities to analyse data to optimize service delivery and predict issues. Real-Time Monitoring is also needed for tracking the performance and health of network services enabling analytics that provide insights for optimization and troubleshooting.</li> <li>Security and Access Control for ensuring only authorized users and systems can access network services. while implementing rules and policies to comply with regulatory requirements.</li> </ul>"},{"location":"#an-e2e-service-orchestration-workflow","title":"An E2E service orchestration workflow","text":"<p>In general an E2E service orchestration workflow includes the following phases:</p> <ul> <li>Service Request: Users or systems request a network service through the self-service portal or API. The request can specify details such as bandwidth, security features, geographic coverage, and duration.</li> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with the underlying components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> <li>Provisioning and Configuration: Services, network resources and network functions (VNFs) are instantiated and configured according to the service request during Service Orchestration through the orchestration engine. Other controllers manage their own domains, for example SDN controllers, manage the flow of data through the network to ensure optimal performance and adherence to policies, RAN controllers manage the RAN resoruces, Containerized controllers manage their workload, etc</li> <li>Service Delivery: The E2E network service is activated and made available to the user. Continuous monitoring ensures the service operates as expected, with automatic adjustments made as necessary.</li> <li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> <li>At the end of the service period, resources are decommissioned and reclaimed.</li> </ul>"},{"location":"#openslice-for-service-providers","title":"OpenSlice for Service Providers","text":"<p>OpenSlice is used by Service Providers to design Network Services, expose them in Service Catalogues and make them available for Service Orders. OpenSlice then can perform the E2E service orchestration workflow.</p> <p>There are various portals offering UI friendly access to users acting as Service Providers:</p> <ul> <li>The Services portal allows Service Providers to design and expose services.</li> <li>The Resource portal allows users to access resource specifications and running resources in resource inventory.</li> <li>The NFV portal allows users to manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Providers to manage test artifacts</li> <li>The Products portal allows Service Providers to expose services as products</li> </ul>"},{"location":"#openslice-for-service-consumers","title":"OpenSlice for Service Consumers","text":"<p>OpenSlice allows Service Consumers to browse the available offered service specifications in a self-service manner. It also supports TMFORUM Northbound APIs  regarding Service Catalog Management, Ordering, Resource, etc. There are various portals offering UI friendly access to users acting as Service Consumers:</p> <ul> <li>The Services portal allows Service Consumers to select and order predefined services.</li> <li>The Resource portal allows users to access running resources in resource inventory.</li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The Testing portal allows Service Consumers to manage test artifacts</li> <li>The Products portal allows Service Consumers to expose services as products</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>"},{"location":"#live-demo","title":"Live Demo","text":"<p>Check a live demo of OpenSlice in the following pages:</p> <p>(username=admin, password=openslice  or username=admin, password=changeme)</p> <ul> <li>OpenSlice demo: http://portal.openslice.io/</li> <li>OpenSlice Service Catalogs and ordering: http://portal.openslice.io/services/</li> <li>OpenSlice NFV Services onboarding: http://portal.openslice.io/nfvportal </li> </ul>"},{"location":"#probe-further","title":"Probe further","text":"<ul> <li>Installing OpenSlice. See the Deployment of OpenSlice</li> <li>Learn more on [how OpenSlice supports Network as a Service(NaaS)](./naas/introduction</li> <li>Who is implementing OpenSlice? See OSL ETSI SDG</li> <li>How OpenSlice works? See the Architecture of OpenSlice</li> </ul>"},{"location":"OpenSlice_deployment_examples/","title":"OpenSlice deployment examples","text":"<p>Here are some examples from past and current efforts that use OpenSlice in various cases.</p>"},{"location":"OpenSlice_deployment_examples/#5ginfire-eu-project2018","title":"5GinFIRE EU project(2018)","text":"<ul> <li>MultiVIM approach</li> <li>9 Testbeds</li> <li>Automotive, Smart City, eHeath, \u000bPPDR, Media, SDR, Cloud</li> <li>22 Experiment proposals from Verticals</li> <li>100+ Users</li> <li>VxF catalog: </li> <li>150+ ONBOARDED VxFs</li> <li>OSM TWO, FOUR, FIVE</li> <li>50+ are public to be reused</li> <li>NSD catalog: </li> <li>90+ ONBOARDED NSDs</li> <li>30+ are public to be reused</li> <li>500+ Deployment requests \u000b(orchestrations) performed</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5g-vinni-eu-project-2020","title":"5G-VINNI  EU project (2020)","text":"<ul> <li>Multi-vendor challenge \u2013 Commercial and opensource</li> <li>5G services on multiple sites</li> <li>Introduction of TMFORUM models and APIs </li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#5gasp-eu-project-2021-2024","title":"5GASP  EU project (2021-2024)","text":"<ul> <li>Support a multi-site CI/CD testing automated DevOps cycle for network Applications</li> <li>Multiple NFVOs</li> <li>Introducing Service Test models</li> <li>Introducing the Product models for a network application marketplace</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#fidal-eu-project-2023-","title":"FIDAL EU project (2023-)","text":"<ul> <li>Support multi-site automated testing</li> <li>Multiple testbeds/ different APIs</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#across-eu-project-2023-","title":"ACROSS EU project (2023-)","text":"<ul> <li>Used as a cross-domain orchestrator</li> <li>Support the multi-domain orchestrator</li> <li>Support Zero-touch provisioning concepts</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#incode-eu-project-2023-","title":"INCODE EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul> <p>[</p>"},{"location":"OpenSlice_deployment_examples/#imagineb5g-eu-project-2023-","title":"IMAGINEB5G EU project (2023-)","text":"<ul> <li>Support the provisioning of end-to-end domain services</li> </ul>"},{"location":"OpenSlice_deployment_examples/#etsi-zsm-poc-2","title":"ETSI ZSM PoC #2","text":"<ul> <li>Automated Network Slice Scaling in Multi-Site Environments</li> </ul> <p>[</p>"},{"location":"alarms_actions/","title":"Alarms","text":"<p>In Openslice parts of TMF642 Alarm Management API are currently implemented. Alarms can be managed through the TMF API endpoint as well as the UI.</p>"},{"location":"alarms_actions/#alarms-and-actions","title":"Alarms and Actions","text":"<p>Note: Actions is an experimental feature. We expect to have a more mature solution in future. The component in the architecture is the Openslcie Assurance Services</p> <p>Alarms can be automatically resolved by specific actions. Today only the following actions are offered.</p> <ul> <li>execDay2</li> <li>scaleServiceEqually</li> </ul>"},{"location":"alarms_actions/#execday2","title":"execDay2","text":"<p>Usually used to perform a Day2 configuration (towards OSM). To use it, Create a New Action Specification Name=execDay2 as following</p> <p></p> <p>Now make a Service Order for your service. In this example \u03c2\u03b5 used a cirros NSD</p> <p>Create a  New Action Rule for the running services as the following example:</p> <p></p> <p>The scope is the running cirros service. </p> <p>Params should be paramname=value;paramname2=value2;paramname3=value3 (must exist in the VNF otherwise OSM will raise an error).</p> <p>In this case should be filename=test.txt</p> <p>Primitive=touch</p> <p>ServiceId = select the service which will accept the Day2. In this case is the same</p> <p>To test it:</p> <p>Go to the Service Inventory and select the active Service.</p> <p>Note the UUID of the service (e.g. c4e7990a-e174-4cd2-9133-b10e56721e08 copy from address bar),  DeploymentRequestID and NSDID from characteristics</p> <p>You can either use the UUID of the service or the DeploymentRequestID  and POST to the Alarms endpoint ( /tmf-api/alarmManagement/v4/alarm)</p> <p>If the DeploymentRequestID  is used then POST:</p> <pre><code>\n{\n  \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n  \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n  \"state\": \"raised\",\n  \"alarmType\": \"qualityOfServiceAlarm\",\n  \"probableCause\": \"thresholdCrossed\",\n  \"ackState\": \"unacknowledged\",\n  \"perceivedSeverity\": \"major\",\n  \"sourceSystemId\": \"mano-client-service\",\n  \"alarmDetails\": \"NSID=3;DeploymentRequestID=1\",\n  \"specificProblem\": \"myalram raised\"\n}\n\n</code></pre> <p>If the UUID is used then POST:</p> <pre><code>\n{\n  \"alarmRaisedTime\": \"2021-06-29T12:30:24.675Z\",\n  \"alarmReportingTime\": \"2021-06-29T12:30:54.675Z\",\n  \"state\": \"raised\",\n  \"alarmType\": \"qualityOfServiceAlarm\",\n  \"probableCause\": \"thresholdCrossed\",\n  \"ackState\": \"unacknowledged\",\n  \"perceivedSeverity\": \"major\",\n  \"sourceSystemId\": \"mano-client-service\",\n  \"alarmDetails\": \"analarm\",\n  \"specificProblem\": \"myalram raised\",\n  \"affectedService\": [\n    {\n      \"id\": \"c4e7990a-e174-4cd2-9133-b10e56721e08\"\n    }\n  ]\n\n}\n\n</code></pre> <p>The Alarm to be created must have the affected Service ID equal to the running service from the scope (the cirros_ns)</p> <p>Go to service inventory you will see the notes and also the service characteristics for any  EXEC_ACTION updates</p> <p>You can also adjust the alarm conditions. They must match true so the alarm to be acknowledged So if another external service raises an Alarm (with POST) for the running service, a Day2 will be performed on another Service</p>"},{"location":"alarms_actions/#scaleserviceequally","title":"scaleServiceEqually","text":"<p>This action is used from getting a scaling event from OSM. Please see the next demo for details on how it works</p>"},{"location":"alarms_actions/#prototype-demo","title":"Prototype demo","text":"<p>You can watch how we used the prototype on the following ETSI ZMS PoC #2</p> <ul> <li>ETSI ZMS PoC #2: https://www.etsi.org/events/1905-webinar-zsm-poc-2-showcase-automated-network-slice-scaling-in-multi-site-environments/</li> </ul>"},{"location":"catalogs/","title":"Catalogs and Templates","text":"<p>The Openslice Service Catalogue (accessible through the API or Services portal) contains the representation of Service Specifications, either created from the provider defining service attributes, or by supporting the GSMA Generic Slice Templates (GST) as well as the VINNI Service Blueprint. The following scenarios are supported by the Openslice Service Catalogue.</p>"},{"location":"catalogs/#createdesign-a-service-specification","title":"Create/Design a Service Specification","text":""},{"location":"catalogs/#first-import-some-resources-as-resource-facing-services-rfss","title":"First Import some Resources as Resource Facing Services (RFSs)","text":"<p>If you have any NSDs as NFV artifacts, import them through the UI menu (Import from NSD list). Then an NSD is imported as a resource and an RFS automatically is created. RFSs then later are used to design a Customer Facing Service Specification</p>"},{"location":"catalogs/#createdesign-a-customer-facing-service-specification","title":"Create/Design a Customer Facing Service Specification","text":"<p>Customer Facing Service Specification are the services offered to customers.  You can create a new Service Specification from the menu. The services created through the UI are Customer Facing Services (CFS). Usually you create a CFS as a bundle and then you include Service Specification Relationships with RFSs or/and CFSs.</p> <p>Any Service Specification Characteristics from the RFS are copied to the CFS specification. A CFS can include multiple RFS or/and CFSs. For example you can create a CFS spec called \"A 5G Service\" which is a bundle of two other services (include them in Service Specification Relationships) such as 5G eMBB Slice and a Customer VPN. So when the user orders  \"A 5G Service\"  services from 5G eMBB Slice and a Customer VPN will be created during the order.</p>"},{"location":"catalogs/#initial-configuration-for-osm-deployment","title":"Initial configuration for OSM deployment","text":"<p>if you have an initial configuration that needs to be applied in the NSD deployment, then you go to the RFS (or CFS) and in Service Specification Characteristics go and edit the OSM_CONFIG characteristic.  You can add in the Service Characteristic Value, in the Value field something like the following example which gives a floating IP to a VNF:</p> <pre><code>{ \"nsdId\": \"e855be91-567b-45cf-9f86-18653e7ea\", \"vimAccountId\": \"4efd8bf4-5292-4634-87b7-7b3d49108\" , \"vnf\": [ {\"member-vnf-index\": \"1\", \"vdu\": [ {\"id\": \"MyCharmedVNF-VM\", \"interface\": [{\"name\": \"eth0\", \"floating-ip-required\": true }]}]}]}\n\n</code></pre> <p>or a more complex example (beautify it first if you want to view it, but in the parameter OSM_CONFIG must be minified like the example):</p> <pre><code>{\"nsdId\":\"e855be91-567b-45cf-9f86-18653e7\",\"vimAccountId\":\"4efd8bf4-5292-4634-87b7-7b3d491\",\"vnf\":[{\"member-vnf-index\":\"1\",\"vdu\":[{\"id\":\"haproxy_vdu\",\"interface\":[{\"name\":\"haproxy_vdu_eth1\",\"floating-ip-required\":true}]}]}],\"vld\":[{\"name\":\"pub_net\",\"vim-network-name\":\"OSMFIVE_selfservice01\"},{\"name\":\"management\",\"vim-network-name\":\"OSMFIVE_selfservice01\"},{\"name\":\"lba_net\",\"vim-network-name\":\"lba_net\",\"vnfd-connection-point-ref\":[{\"member-vnf-index-ref\":\"1\",\"vnfd-connection-point-ref\":\"haproxy_private\",\"ip-address\":\"192.168.28.2\"}]},{\"name\":\"backend_net\",\"vim-network-name\":\"backend_net\",\"vnfd-connection-point-ref\":[{\"member-vnf-index-ref\":\"3\",\"vnfd-connection-point-ref\":\"haproxy_public\",\"ip-address\":\"192.168.20.2\"}]},{\"name\":\"lb_sb_net\",\"vim-network-name\":\"lb_sb_net\",\"vnfd-connection-point-ref\":[{\"member-vnf-index-ref\":\"3\",\"vnfd-connection-point-ref\":\"haproxy_private\",\"ip-address\":\"192.168.28.2\"}]},{\"name\":\"breaking_point_Spain\",\"vim-network-name\":\"sb_repo_net\"},{\"name\":\"breaking_point_Greece\",\"vim-network-name\":\"5TONICexternal\"}],\"additionalParamsForVnf\":[{\"member-vnf-index\":\"2\",\"additionalParams\":{\"target_IP\":\"192.168.20.2\"}},{\"member-vnf-index\":\"4\",\"additionalParams\":{\"target1_IP\":\"192.168.21.2\",\"target2_IP\":\"10.154.252.10\"}}]}\n</code></pre> <p>You can leave the Alias and Unit of Measure as is. Check also the is Default.</p>"},{"location":"catalogs/#day-2-primitive-actions","title":"Day 2 Primitive Actions","text":"<p>NFVOs like OSM allow to perform actions while a service is running, for example change attributes or make actions on a specific VNF. To design this do something similar to the following example:</p> <ul> <li>Go to the RFS related to the NSD that contains VNFs with primitives</li> <li>create a characteristic named Primitive:: , e.g. Primitive::touch <li>select Value Type: ARRAY</li> <li>add Service Characteristic Value: i) alias=primitive, value= (e.g. touch), ii)  alias=member_vnf_index, value= (e.g. 1), iii) add the params that the user will change in alias the name of param and in value an initial value (e.g. alias=filename, value=myfile.txt) <p>In the above example, when the service is running and the user goes to service inventory to MODIFY it, changes the value of the alias=filename, value=myfile.txt, to value =secondfile.txt. Then inside the VNF a file will be created called secondfile.txt</p>"},{"location":"catalogs/#generic-slice-templates-gst","title":"Generic Slice Templates (GST)","text":"<p>(Offered only as a design for now. THere is no direct implementation to NFV) On October 16th 2019 GSMA published NG.116  Version 2.0 which defines the Generic Network Slice Template (GST). GST is a set of attributes that can characterise a type of network slice/service. GST is generic and is not tied to any specific network deployment. Here is a list of the various attributes of the template:</p> <ul> <li>Availability</li> <li>Area of Service</li> <li>Delay tolerance</li> <li>Deterministic communication</li> <li>Downlink throughput per network slice</li> <li>Downlink throughput per UE</li> <li>Energy efficiency</li> <li>Group communication support</li> <li>Isolation level</li> <li>Location based message delivery</li> <li>Maximum supported packet size</li> <li>Mission critical support</li> <li>MMTel support</li> <li>NB-IoT support</li> <li>Network Slice Customer network functions</li> <li>Number of connections</li> <li>Number of terminals</li> <li>Performance monitoring</li> <li>Performance prediction</li> <li>Positioning support</li> <li>Radio spectrum</li> <li>Reliability</li> <li>Root cause investigation</li> <li>Session and Service Continuity support </li> <li>Simultaneous use of the network slice</li> <li>Slice quality of service parameters</li> <li>Support for non-IP traffic </li> <li>Supported access technologies </li> <li>Supported device velocity </li> <li>Synchronicity</li> <li>Terminal density </li> <li>Uplink throughput per network slice </li> <li>Uplink throughput per UE</li> <li>User management openness</li> <li>User data access </li> <li>V2X communication mode</li> </ul> <p>Openslice offers the GST in a format that is machine readable and aligned with the TMF SID model. Here is a tentative approach in JSON : https://github.com/openslice/org.etsi.osl.tmf.api/blob/master/src/main/resources/gst.json</p> <p>Providers can clone a GST as e NEST directly in Openslice Web portal and the adjust the default attributes to their Service Specification</p>"},{"location":"catalogs/#5g-vinni-service-blueprint","title":"5G-VINNI Service Blueprint","text":"<p>(Offered only as a design for now. THere is no direct implementation to NFV) 5G-VINNI Service Blueprint is a special Service Specification defined by teh 5G-VINNI project. Many details can be found in document https://zenodo.org/record/3345612</p> <p>5G-VINNI Service Blueprint is a reusable self-contained specification of required network slice service (instances). As described in GST mapping VINNI-SB is also machine readable. </p> <p>Here is a tentative approach in JSON : https://github.com/openslice/org.etsi.osl.tmf.api/tree/master/src/main/resources/vinnisb</p> <p>5G-VINNI SB has many commonalities with GST as well as it offers Testing as a Service attributes.</p> <p>Next figure presents the high-level object model of a 5G-VINNI service blueprint.</p> <p>The 5G-VINNI SB as a first prototype approach is conceived as a CFS of a \u2018bundle\u2019 of services. It has some characteristics, like name, description, service type (eMBB, etc) and others. The constituent services are:</p> <ul> <li>A \u201cService Topology\u201d Service Specification which is related to a Network Service Resource topology (a Logical Resource Spec). It is considered at this stage as an RFS but is subject to change in future</li> <li>A \u201cVINNI SB Service Requirements\u201d Service Specification which is related to Service requirements. This is very similar to GST. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 1\u201d Service Specification which contains characteristics for service exposure on level 1 ( see D3.1 for details). It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 2\u201d Service Specification which contains characteristics for service exposure on level 2. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 3\u201d Service Specification which contains characteristics for service exposure on level 3. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Exposure Level 4\u201d Service Specification which contains characteristics for service exposure on level 4. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service 3rd part VNF\u201d Service Specification which contains characteristics for support 3rd party VNFs to be included in the service. It is considered at this stage as an RFS but is subject to change in future</li> <li>A \u201cVINNI SB Service 3rd part NSD\u201d Service Specification which contains characteristics for support 3rd party NSDs to be included in the service. It is considered at this stage as an RFS but is subject to change in future</li> <li>A \u201cVINNI SB Service Monitoring\u201d Service Specification which contains characteristics for offering Monitoring capabilities on the requested Service. It is considered at this stage a CFS.</li> <li>A \u201cVINNI SB Service Testing\u201d Service Specification which contains characteristics for offering Testing capabilities on the requested Service. It is considered at this stage a CFS.</li> </ul> <p></p>"},{"location":"catalogs/#manage-a-service-specification","title":"Manage a Service Specification","text":"<p>You can manage them though the Web UI</p>"},{"location":"catalogs/#assign-a-service-specification-to-service-categories-and-publish","title":"Assign a Service Specification to Service Categories and Publish","text":"<p>Just create categories and from the menu select the category and add services</p>"},{"location":"catalogs/#retireremove-a-service-specification","title":"Retire/Remove a Service Specification","text":"<p>Delete it from the category</p>"},{"location":"catalogs/#consume-and-expose-service-specifications-from-other-service-catalogues","title":"Consume and expose Service Specifications from other Service Catalogues","text":"<p>See more on Consuming Services From External Partner Organizations</p>"},{"location":"config_intro/","title":"Configuring and managing OpenSlice","text":""},{"location":"config_intro/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This section provides information on how to configure and manage different aspect of OpenSlice while in operation. For example:</p> <ul> <li>Manage user roles and access in Keycloak</li> <li>Configure/Manage NFVOs</li> <li>Advanced configuration scenarios</li> </ul>"},{"location":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>Following, you may thorough guides depending on the installation type of your choice:</p> <ul> <li>Installing via Docker Compose guide</li> <li>Installing via Kubernetes guide</li> </ul>"},{"location":"deploymentCompose/","title":"OpenSlice Deployment Guide with Docker Compose","text":""},{"location":"deploymentCompose/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":""},{"location":"deploymentCompose/#requirements","title":"Requirements","text":""},{"location":"deploymentCompose/#hardware-requirements","title":"Hardware requirements:","text":"Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 30 GB storage 50 GB storage"},{"location":"deploymentCompose/#software-requirements","title":"Software Requirements:","text":"<ul> <li>Docker: A running environment for Docker Compose services</li> </ul>"},{"location":"deploymentCompose/#preparing-the-environment","title":"Preparing the environment","text":""},{"location":"deploymentCompose/#1-backup-your-previous-database-if-necessary","title":"1. Backup your previous database if necessary:","text":"<pre><code>sudo docker exec amysql /usr/bin/mysqldump -u root --password=letmein ostmfdb &gt; backup_ostmfdb.sql\n</code></pre>"},{"location":"deploymentCompose/#2-install-docker","title":"2. Install docker","text":"<p>Since July 2023 Docker Compose V1 stopped receiving updates. OpenSlice fully reverted to Compose V2, which is integrated in the Docker installation.</p>"},{"location":"deploymentCompose/#3-configure-containers-to-properly-resolve-the-dns-of-your-domain-optional","title":"3. Configure containers to properly resolve the DNS of your domain (optional)","text":"<pre><code>sudo nano /etc/docker/daemon.json\n</code></pre> <p>and add:</p> <pre><code>{ \n  \"dns\": [\"8.8.8.8\", \"8.8.4.4\"]\n}\n</code></pre> <p>After editing daemon.json restart docker daemon for the changes to take place</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deploymentCompose/#downloading-the-project","title":"Downloading the project","text":""},{"location":"deploymentCompose/#1-create-a-new-folder-to-download-the-project","title":"1. Create a new folder to download the project","text":"<pre><code>mkdir openslice\n</code></pre> <pre><code>cd openslice\n</code></pre>"},{"location":"deploymentCompose/#2-download-the-deployment-script","title":"2. Download the deployment script","text":"<p>Download the deployment / environment preparation script</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh\n</code></pre> <p>Make it executable</p> <pre><code>sudo chmod +x deploy.sh\n</code></pre>"},{"location":"deploymentCompose/#3-run-the-deployment-script","title":"3. Run the deployment script","text":"<p>OpenSlice is a multi repo project. This script selects the same branch for all repositories of the project to pull from.</p> <p>After that it builds the respective jar files locally and installs all the npm packages needed for the UI.</p> <p>If you run the script without selecting a branch the the main branch is going to be selected.</p> <p>We recommend:</p> <ul> <li>main branch for the most stable experience and</li> <li>develop branch for an experience with the latest features (for develop branch installation, it is strongly advisable that you may as well follow the develop documentation)</li> </ul> <pre><code>sudo ./deploy.sh develop #[or replace main with other branch name]\n</code></pre> <p>We recommend running the deploy.sh script with root permissions! In other case, some directories may not be accessible by the project building tools and hinder the smooth installation.</p>"},{"location":"deploymentCompose/#configure-docker-compose-services","title":"Configure Docker Compose services","text":""},{"location":"deploymentCompose/#1-create-configuration-specific-docker-compose-file-from-the-template","title":"1. Create configuration specific Docker Compose file from the template","text":"<pre><code>cd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo cp docker-compose.yaml.configure docker-compose.yaml\n</code></pre>"},{"location":"deploymentCompose/#2-configure-mysql-portal-container-optional","title":"2. Configure mysql-portal container (optional)","text":"<ol> <li>In folder <code>org.etsi.osl.main/compose/mysql-init</code> edit the file <code>01-databases.sql</code>.</li> <li>In the <code>org.etsi.osl.main/compose/docker-compose.yaml</code> edit the credentials of the users that services use to connect to the databases, if you wish.<ul> <li>portaluser (default is 12345) and</li> <li>keycloak (default is password)</li> </ul> </li> </ol>"},{"location":"deploymentCompose/#3-configure-keycloak-container-optional","title":"3. Configure keycloak container (optional)","text":"<ol> <li> <p>If you made changes to keycloak's mysql credentials:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code>.</p> </li> </ol> <pre><code>DB_DATABASE: keycloak\nDB_USER: keycloak\nDB_PASSWORD: password\n</code></pre> <ol> <li> <p>If you want to change the keycloak admin password:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> </li> </ol> <pre><code>KEYCLOAK_PASSWORD: Pa55w0rd\n</code></pre>"},{"location":"deploymentCompose/#4-configure-bugzilla-container-optional","title":"4. Configure bugzilla container (optional)","text":"<p>If you want to utilise the Bugzilla connector:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n  \"spring.activemq.brokerUrl\": \"tcp://anartemis:61616?jms.watchTopicAdvisories=false\",\n  \"spring.activemq.user\": \"artemis\",\n  \"spring.activemq.password\": \"artemis\",\n  \"bugzillaurl\":\"\",\n  \"bugzillakey\":\"\",\n  \"main_operations_product\":\"\"\n}'\n</code></pre> <p>And add the provided Bugzilla installation information:</p> <pre><code>\"bugzillaurl\":\"bugzillaurl.xx:443/bugzilla/\",\n\"bugzillakey\":\"exampleKeyeqNNwxBlgxZgMEIne0Oeq0Bz\",\n\"main_operations_product\":\"Main Site Operations\" // this is the default product to issue tickets\n</code></pre> <p>Bugzilla should have the following components under the specified product:  </p> <ul> <li>NSD Deployment Request: Component used to schedule deployment req  </li> <li>Onboarding: Issues related to VNF/NSD Onboarding  </li> <li>Operations Support: Default component for operations support  </li> <li>Validation: Use to track validation processes of VNFs and NSDs  </li> <li>VPN Credentials/Access: Used for requesting VPN Credentials/Access   </li> </ul> <p>Also in the 'Main Site Operations' product, a version named 'unspecified' must be created.</p>"},{"location":"deploymentCompose/#5-configure-osportalapi-container-nfv-services-conditional","title":"5. Configure osportalapi container (NFV services) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}, as well as \"spring.portal.main.domain\" property.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n  \"spring.datasource.username\":\"root\",\n  \"spring.datasource.password\":\"letmein\",\n  \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n  \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",  \n  \"spring.portal.main.domain\": \"http://localhost\",\n  \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#6-osscapi-container-tmf-api-service-conditional","title":"6. osscapi container (TMF API service) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n  \"spring.datasource.username\":\"root\",\n  \"spring.datasource.password\":\"letmein\",\n  \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n  \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n  \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",  \n  \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#configure-nginx","title":"Configure nginx","text":"<p>In folder <code>org.etsi.osl.main/compose/nginx</code> create a configuration specific <code>nginx.conf</code> file.</p> <pre><code>cd org.etsi.osl.main/compose/nginx/\n</code></pre> <pre><code>sudo cp nginx.conf.default nginx.conf\n</code></pre> <p>If needed, in the nginx.conf file, edit the server_name for an non-local deployment.</p>"},{"location":"deploymentCompose/#configure-web-ui","title":"Configure Web UI","text":"<p>In folder <code>org.etsi.osl.portal.web/src/js/</code> create a configuration specific <code>config.js</code> file.</p> <pre><code>cd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>sudo cp config.js.default config.js\n</code></pre> <p>Edit the <code>config.js</code> file with the information of your domain. <code>ROOTURL</code> will automatically extract the the Origin (Protocol://Domain:Port) of the deployment, but you must change <code>APIURL</code> property, if you are not aiming for a localhost installation, e.g. \"https://portal.openslice.io\".</p> <p>Example file:</p> <pre><code>{     \n  BUGZILLA: \"ROOTURL/bugzilla/\",\n  STATUS: \"ROOTURL/status/\",\n  APIURL: \"http://localhost\",\n  WEBURL: \"ROOTURL/nfvportal\",\n  APIOAUTHURL: \"ROOTURL/auth/realms/openslice\",\n  APITMFURL: \"ROOTURL/tmf-api/serviceCatalogManagement/v4\"\n}\n</code></pre>"},{"location":"deploymentCompose/#configure-tmf-web-ui","title":"Configure TMF Web UI","text":"<p>In the folder <code>org.etsi.osl.tmf.web/src/assets/config</code> there are 3 files available for configuration:</p> <ul> <li>config.prod.json (Basic information + API configuration)</li> <li>theming.scss (CSS color palette theming)</li> <li>config.theming.json (HTML configuration - Logo, Favicon, Footer)</li> </ul> <p>The first 2 files above (i.e. config.prod.json, theming.scss) are essential for the successful deployment of OpenSlice, thus created automatically during the initial deployment at <code>org.etsi.osl.tmf.web/src/assets/config</code> directory as a copy of the default ones from the remote repository.</p> <p>Ensure that you check the <code>config.prod.json</code> and <code>theming.scss</code> files and readjust to your deployment if needed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <p>E.g. You may edit \"TITLE\", \"WIKI\", etc properties with your domain title. Also configure TMF's API and Keycloak's location for the web application, if needed.</p> <p>Example file:</p> <pre><code>{         \n    \"TITLE\": \"OpenSlice by ETSI\",\n    \"PORTALVERSION\":\"2024Q2\",\n    \"WIKI\": \"https://osl.etsi.org/documentation\",\n    \"BUGZILLA\": \"{BASEURL}/bugzilla/\",\n    \"STATUS\": \"{BASEURL}/status/\",\n    \"WEBURL\": \"{BASEURL}\",\n    \"PORTAL_REPO_APIURL\": \"{BASEURL}/osapi\",\n    \"ASSURANCE_SERVICE_MGMT_APIURL\": \"{BASEURL}/oas-api\",\n    \"APITMFURL\": \"{BASEURL}/tmf-api\",\n    \"OAUTH_CONFIG\" : {\n        \"issuer\": \"{BASEURL}/auth/realms/openslice\",\n        \"loginUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/auth\",\n        \"tokenEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/token\",\n        \"userinfoEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/userinfo\",\n        \"redirectUri\": \"{BASEURL}/redirect\",\n        \"logoutUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/logout\", \n        \"postLogoutRedirectUri\": \"{BASEURL}\",\n\n        \"responseType\": \"code\",\n        \"oidc\": false,\n        \"clientId\": \"osapiWebClientId\",\n        \"dummyClientSecret\": \"secret\",\n\n        \"requireHttps\": false,\n        \"useHttpBasicAuth\": true,\n        \"clearHashAfterLogin\": false,\n\n        \"showDebugInformation\": true\n    }\n}\n</code></pre> <p>The {BASEURL} placeholder in the file automatically detects the Origin (Protocol://Domain:Port) of the deployment and applies it to every respective property. E.g. If you are attempting a local deployment of OpenSlice, then {BASEURL} is automatically translated to \"http://localhost\". Similarly, you may use {BASEURL} to translate to a public deployment configuration, e.g. \"https://portal.openslice.io\".</p> <p>If further customization, apart from the default provided, is needed for branding (Logo, Footer) then <code>config.theming.json</code> needs to be created in io.openslice.tmf.web/src/assets/config directory, as follows:</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>sudo cp config.theming.default.json config.theming.json\n</code></pre> <p>IMPORTANT NOTE: If you want to apply changes to the JSON configuration files without the need to rebuild the application, you have to apply the changes at the <code>org.etsi.osl.tmf.web/dist/io-openslice-portal-web/assets/config</code> directory. Although, it is mandatory to also apply these changes to the <code>org.etsi.osl.tmf.web/src/assets/config</code> for persistancy, as after any future rebuild of OpenSlice the <code>/dist</code> directory is being overwritten along with its contents. The OpenSlice team strongly recommends to always apply your changes to the TMF web UI configuration files at <code>org.etsi.osl.tmf.web/src/assets/config</code> and rebuild the application.</p>"},{"location":"deploymentCompose/#deploy-openslice-via-docker-compose","title":"Deploy OpenSlice via Docker Compose","text":"<p>After configuring the services, and editing the docker compose file accordingly, the docker compose instantiation command can be performed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo docker compose --profile prod down;sudo docker compose --profile prod up -d --build\n</code></pre> <p>Depending on your machine, this process might take time. if for any reason the deployment fails during first time, please rerun the above before any further measures.</p>"},{"location":"deploymentCompose/#validating-deployments-and-container-monitoring","title":"Validating deployments and container monitoring","text":"<p>You can monitor containers' status with portainer at port 9000 (http://your-ip:9000).</p> <p>Initially, you may monitor the local machine at portainer.</p> <p>Please check that all containers are in running state.</p>"},{"location":"deploymentCompose/#post-installation-steps","title":"Post installation steps","text":"<p>After the successful deployment of OpenSlice, to ensure the E2E user experience, this section is mandatory. It contains crucial configuration in regard of authentication and user creation.</p>"},{"location":"deploymentCompose/#configure-keycloak-server","title":"Configure Keycloak server","text":"<p>The Keycloack server is managing authentication and running on a container at port 8080. It is also proxied to your host via nginx under http://localhost/auth. </p> <ul> <li> <p>Navigate to http://domain.com/auth/ or https://domain.com/auth/, (http://ipaddress:8080/auth/ or https://ipaddress:8443/auth/ which are directly accessible without proxy) </p> </li> <li> <p>Navigate to Administration Console </p> </li> <li> <p>Login with the credentials from section Configure keycloak container. Default values are:</p> <ul> <li>user: admin and </li> <li>password: Pa55w0rd</li> </ul> </li> </ul> <p>if you are running in HTTP you will get a message: HTTPS required.</p> <p>To resolve this issue when running in HTTP: </p> <ul> <li>Select the master realm from top left corner</li> <li>Go to login Tab and select \"Require SSL\": None</li> <li>Repeat for realm Openslice</li> </ul> <p>If you are running in HTTPS, then \"Require SSL\" can be left unchanged to external requests.</p>"},{"location":"deploymentCompose/#1-configure-redirects","title":"1. Configure redirects","text":"<p>Navigate to realm Openslice &gt; Clients &gt; osapiWebClientId and change the Root URL to your domain. </p> <p>Also, insert your domain, e.g. http://example.org/*, at:</p> <ul> <li>Valid Redirect URIs</li> <li>Web Origins</li> </ul>"},{"location":"deploymentCompose/#2-configure-email","title":"2. Configure email","text":"<p>Keycloak allows new users to register. Subsequently, this will also allow new users to register to the OpenSlice portal.</p> <p>Navigate to realm Openslice &gt; Realm Settings &gt; Login Tab &gt; check User registration, Verify email, Forgot password etc.</p> <p>Finally, enter the details of the mail server at the Email Tab.</p> <p>Email configuration is optional for test runs, but if not provided the above functionalities (e.g. external user registration) will not be possible.</p>"},{"location":"deploymentCompose/#3-add-an-openslice-admin-user","title":"3. Add an OpenSlice admin user","text":"<p>This step is mandatory so as to access the OpenSlice Web UI. To add an OpenSlice admin user you must:</p> <ul> <li>Navigate to realm Openslice &gt; Users &gt; Add user</li> <li>Set a password</li> <li>Upon creation, navigate to Role Mappings and add ADMIN to Assigned Roles list</li> </ul> <p>That user is different from the Keycloak admin user. It is required to login and browse the OpenSlice Web UI. The Role ADMIN guarantee full access through the OpenSlice UI, thus such a user is always required.</p>"},{"location":"deploymentCompose/#keycloak-at-localhost","title":"Keycloak at localhost","text":"<p>This is an important step if you run Keycloak on localhost!</p> <p>1 - Edit your Hosts File, adding the line below</p> <p><code>127.0.0.1 keycloak</code></p> <p>Hosts File Location:</p> <ul> <li> <p>In Linux/Unix, the file's location is at /etc/hosts </p> </li> <li> <p>In Windows, its location is at c:\\Windows\\System32\\Drivers\\etc\\hosts</p> </li> </ul> <p>2 - Replace http://localhost/auth/ with http://keycloak:8080/auth/ in your Keycloak config for AngularJS and Angular (see examples below).</p> <p>Explanation</p> <p>Nginx uses the http://keycloak:8080 URL, which is accessible via the internal docker system's network. The Front-end (TS/Angular) shall also use the http://keycloak:8080. This way, you will not get the invalid token error, as the API is acquiring the token from http://keycloak:8080 (internally) and the Front-end is getting verified by an issuer at the same URL, as well.</p> <p>2.1 - For the Angular configuration (TMF portal UI), navigate to  org.etsi.osl.tmf.web/src/assets/config and edit config.prod.json</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>nano config.prod.json\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>{         \n  \"OAUTH_CONFIG\" : {\n      \"issuer\": \"http://keycloak:8080/auth/realms/openslice\",\n      \"loginUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n      \"tokenEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",\n      \"userinfoEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/userinfo\",\n      \"redirectUri\": \"{BASEURL}/redirect\",\n      \"logoutUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/logout\", \n      \"postLogoutRedirectUri\": \"{BASEURL}\",\n  }\n}\n</code></pre> <p>Note the difference in changing {BASEURL} -&gt; http://keycloak:8080</p> <p>If you want the changes to take place immediately without rebuilding the project, then repeat the process for org.etsi.osl.tmf.web/dist/org.etsi.osl.tmf.web/assets/config/config.prod.json</p> <p>2.2 - For the AngularJS configuration (NVF portal UI), navigate to org.etsi.osl.portal.web/src/js and edit config.js</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>nano config.js\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>var appConfig = angular.module('portalwebapp.config',[]);\n\n\nappConfig.factory('APIEndPointService', function() {\n   return {       \n      APIOAUTHURL: \"http://keycloak:8080/auth/realms/openslice\",\n   };\n});\n</code></pre> <p>Note the difference in \"APIOAUTHURL\" property, changing ROOTURL -&gt; http://keycloak:8080</p>"},{"location":"deploymentCompose/#nfv-orchestrator-configuration","title":"NFV Orchestrator Configuration","text":"<p>After successfully deploying and configuring OpenSlice, you may configure its environment (e.g. the NFVO) that will facilitate the deployment of NFV artifacts.</p> <p>See NFV Orchestrator Configuration.</p>"},{"location":"deploymentK8s/","title":"OpenSlice Deployment Guide with Kubernetes","text":""},{"location":"deploymentK8s/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"location":"etsi_osl/","title":"The ETSi SDG OSL","text":"<p>OpenSlice is developed by the OSL ETSI Software Development Group see more info</p>"},{"location":"history/","title":"History","text":""},{"location":"history/#history","title":"History","text":"<ul> <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project 5GinFIRE by University of Patras, Greece</li> <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project 5G-VINNI by University of Patras, Greece</li> <li>OpenSlice has been a part of OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Group since 2023</li> </ul>"},{"location":"history/#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use OpenSlice in your research</p> <pre><code>\n@misc{tranoris2021openslice,\n      title={Openslice: An opensource OSS for Delivering Network Slice as a Service}, \n      author={Christos Tranoris},\n      year={2021},\n      eprint={2102.03290},\n      archivePrefix={arXiv},\n      primaryClass={cs.NI}\n}\n\n\n</code></pre>"},{"location":"lcm/","title":"Lifecycle Management (LCM) Rules","text":"<ul> <li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li> </ul> <p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p> <ul> <li>PRE_PROVISION</li> <li>CREATION</li> <li>AFTER_ACTIVATION </li> <li>SUPERVISION </li> <li>AFTER_DEACTIVATION </li> </ul> <p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p> <p></p> <ul> <li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li> <li>CREATION rules: Run while the referenced service dependencies of a service are created</li> <li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li> <li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li> <li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li> </ul> <p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p> <ul> <li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li> <li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li> <li>Define complex OSM Configs based on other dependencies and passing variables</li> <li>Define any dependencies when creating the referenced services</li> <li>Dynamically include new service dependencies</li> <li>Create new service orders so include dynamically other services</li> <li>Call external (RESTful) services (via http(s), define payload, examine response)</li> </ul>"},{"location":"lcm/#examine-if-the-rules-are-executed-successfully","title":"Examine if the rules are executed successfully","text":"<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully  or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>"},{"location":"lcm/#lcm-rules-and-osom-service-orchestration","title":"LCM Rules and OSOM Service Orchestration","text":"<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p> <p></p>"},{"location":"lcm/#define-rules","title":"Define rules","text":"<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p> <p></p> <p>Execution order of rules on a specific phase is random</p> <ul> <li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li> </ul>"},{"location":"lcm/#definition-language","title":"Definition language","text":"<ul> <li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li> <li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li> </ul> <p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p> <p></p> <ul> <li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li> <li>On the right side the user can define some rule properties or observe the underlying generated java code.</li> </ul>"},{"location":"lcm/#the-blocks-library","title":"The blocks library","text":"<p>The following images describe some blocks found in the library.</p> <p>Blockly has syntax rules. It helps with colours to define them. </p> <p>So for example a parameter that is a Number cannot be \"glued\" with a String. Will need some conversion first</p> <p> </p>"},{"location":"lcm/#examples-of-rules","title":"Examples of Rules","text":"<p>The following images provide some examples of rules.</p>"},{"location":"lcm/#define-variables-according-to-cases","title":"define variables according to cases","text":"<p>In the following example we :</p> <ul> <li>define a String variable. </li> <li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li> <li>We output the value to the OSOM Log</li> <li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li> </ul> <p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p> <p></p>"},{"location":"lcm/#define-complex-osm-configs-for-day-0","title":"Define complex OSM configs for DAY 0","text":"<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p> <ul> <li> <p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p> </li> <li> <p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p> </li> <li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li> <li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li> <li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li> </ul> <p></p>"},{"location":"lcm/#define-and-instantiate-different-services-according-to-service-order-request","title":"Define and instantiate different services according to Service Order request","text":"<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p> <p>There are different ways to accomplish this:</p> <ul> <li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li> <li>change for example the VIMs that you deploy the NS</li> <li>change the NSD (that is use different VNFs)</li> </ul> <p>The following image displays for example the latter case.</p> <p></p>"},{"location":"lcm/#call-an-external-restful-service","title":"Call an external RESTful service","text":"<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p> <p></p> <p></p>"},{"location":"lcm/#create-new-service-orders","title":"Create New Service Orders","text":"<p>The following example calls to Order a New Service Specification with specific Parameter Values</p> <p></p>"},{"location":"nfvoconfig/","title":"NFV Orchestrator configuration","text":"<p>Currently we support Open Source MANO version EIGHT/NINE/TEN/ELEVEN/THIRTEEN. Later versions of OSM may also be supported by the existing configuration, as from OSM 9+ the project converged to the SOL005 interface, regarding the NBI, and SOL006 (YANG model), regarding the NFV/NS packaging. Also an implementation of a generic SOL005 interface is supported, but not extensively tested.</p> <p>Configuration of your target(s) NFVOs/MANO services with Openslice is performed through the NFV portal.</p> <ol> <li> <p>Login to {{yourdomain}}/nfvportal/</p> </li> <li> <p>Navigate to Admin &gt; Manage MANO Platforms &gt; Add New MANO Platform, pick one of the supported MANO platform(s), e.g. Name=OSMvTHIRTEEN, Version=OSMvTHIRTEEN and save. You may edit the saved MANO platforms after this.</p> </li> <li> <p>Navigate to Admin &gt; Manage MANO providers &gt; Add New MANO Provider and enter its details:</p> <ul> <li>Name and description of your choice. The selected name will supplement the NFV artifacts of this provider.</li> <li>One of the already defined MANO platforms</li> <li>API URL Endpoint, eg: https://10.10.10.10:9999 (This is the SOL005 NBI endpoint - Note the port 9999)</li> <li>Username, Password and Project of your OSM tenant.</li> </ul> </li> </ol> <p>Check EnabledForONBOARDING, if you want VNF/NS packages uploaded through the UI by the user, to also be automatically ONBOARDED to this MANO (1 step process). If left unchecked, the onboarding process must be performed manually after the VNF/NS package is uploaded to the portal, by the designated UI (2 step process).</p> <p>Check EnabledForSYNC, if you want to support the automatic synchronization of this MANO with OpenSlice. When enabled, the existing VNF/NS packages and VIMs (and any updates on them) of the registered MANO are also reflected to the portal to the respective UIs (Registered VNFs/NSDs and Manage Infrastructures). </p> <p>The synchronization is a continuous process that will confirm that the artifacts are still present in the MANO, updating the status field of the respective artifacts to <code>OSM_PRESENT</code>. If during this process, an artifact is deleted from the MANO, the respective status field will be updated to <code>OSM_MISSING</code>.</p>"},{"location":"portals_intro/","title":"OpenSlice Portals","text":"<p>Openslice comprises of a web landing page See Demo that navigates to the respective Portal:</p> <ul> <li>Services Portal See Demo</li> <li>NFV Portal See Demo</li> <li>Products Portal See Demo</li> <li>Testing Portal See Demo</li> <li>Resources Portal See Demo</li> </ul> <p>Following you may find the scope each portal focuses on and the main TMF APIs it supports.</p> <p>Services Portal is a designated portal for the: - Service Designer - To design Customer Facing Services as bundles of Resource Facing Services that map to specific Resourses (e.g. NFV, Testing, General Resources). Then, it is charged with the designed Services' exposure to public Service Catalogs. - Service Customer - To browse the public Service Catalogs and order the offered Services. The fulfilment process of the Service Order is also captured and the final deployed Services are exposed to the Customer.</p> <p>NFV Portal is a designated portal for the: Indicatively, the portal can be used to: - Register new a new MANO provider (e.g. OSM) - Synchronize the onboarded VNF/NS packages, and the VIMs of the registered MANO provider - Onboard/Delete VNF/NS packages on specific MANO provider - Deploy a NS to a target MANO provider</p> <p>More information can be found at NFV Services.</p> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure. -  Products Portal is a designated portal for the: - Product Designer - To design Products as bundles of available Services. Then, it is charged with the designed Products' exposure to public Product Catalogs. - Product Customer - To browse the public Product Catalogs and navigate to the respective offered Services.</p> <p>Testing Portal is a designated portal for the: - Testing Designer - To design Tests and provide the testing scripts as attachments to the latter. The Tests can be imported as Services at the Services Portal, and can be included in a Service Bundle.</p> TMF620 TMF632 TMF633 TMF634 TMF638 TMF639 TMF640 TMF641 TMF642 TMF653 TMF685 Services Portal x x x x x x Products Portal x x Testing Portal x x Resources Portal x x x x <p>The NFV Portal uses a proprietary API</p>"},{"location":"role_keycloak_management/","title":"Role management in Keycloak","text":"<p>Some initial configuration of Keycloak happens at Installation/Deployment time. Here are some notes regarding user management</p>"},{"location":"role_keycloak_management/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>There are cases that OpenSlice administrators need to configure Keycloak:</p> <ul> <li>Change user roles, e.g. make a Simple user a Service Designer</li> <li>Domain management</li> <li>User Password reset</li> </ul>"},{"location":"service_inventory/","title":"Service Inventory","text":"<p>After a Service Order completion, active services with their additional characteristics are found:</p> <ul> <li>From the Order Items of a selected Service order</li> <li>from the menu of Service inventory and then selecting details of each service</li> <li>through the Service Inventory API (TMF 638 - Service Inventory Management ) </li> </ul> <p>Openslice creates a Service for the requested CFS. Customers make Service Orders and Openslice instantiates the requested Service Specifications for each Service Order Item of a Service Order. Running Services instantiated by Openslice, reside in Openslice Service Inventory. The following picture displays how Service Specifications are related to Running Services and how Running Services relate with instantiated running Network Services. </p> <p></p> <p>There is a hierarchy of services. Usually an Instantiated CFS has Supporting Services some Instantiated RFSs. Then an Instantiated RFS is related to some running NS managed by NFVO</p>"},{"location":"service_inventory/#interacting-with-an-active-service-day-2-config","title":"Interacting with an Active Service (Day 2 config)","text":"<p>In some cases, if the underlying service is configured with actions (for example in OSM Day 2 primitive actions), there are characteristics that can be modified.  Usually they are named like : ::Primitive:: <p>The user can edit the characteristic with a new value. The value is propagated through the OSOM and NFVO down to the related VNF.</p>"},{"location":"service_inventory/#terminatinginactivating-a-service","title":"Terminating/Inactivating a service","text":"<p>You can terminate the service with one of the following processes:</p> <ul> <li>Select the related Service Order and terminate the Order Item. This will delete all the underlying related active services. The Order goes to ACKNOWLEDGED-&gt;INPROGRESS-&gt;COMPLETE</li> <li>To terminate or inactivate a service, select the specific service from the inventory, press Edit and set the State either to Inactive or Terminated</li> </ul> <p>Warning: if you terminate or inactivate a service the action cannot be undone. </p>"},{"location":"service_inventory/#uml-sequence-diagram","title":"uml: sequence diagram","text":"<p>Here I will embed PlantUML markup to generate a sequence diagram.</p> <p>I can include as many plantuml segments as I want in my Markdown, and the diagrams can be of any type supported by PlantUML.</p>"},{"location":"terminology/","title":"User Roles","text":"<ul> <li>User</li> <li>Service Designer</li> <li>OpenSlice administrator</li> </ul>"},{"location":"terminology/#terms","title":"Terms","text":"<ul> <li>Resource Facing Service Specification (RFSSpec): A Service that exposes a resource Specification as a Service.</li> <li>Customer Facing Service Specification (CFSSpec): Service exposed to users for Service Orders. Usually it exposes other CFSSpec(Service Bundle) or other RFSSpecs</li> <li>OpenSlice management cluster</li> <li>Service Specification: Detailed descriptions of services, including attributes, configurations, performance metrics, and SLAs.</li> <li>Service Catalog</li> <li>Service Categories</li> <li>Service Inventory</li> </ul>"},{"location":"under_construction/","title":"Under construction","text":"<p>under construction</p>"},{"location":"architecture/architecture/","title":"Architecture","text":"<p>Openslice offers the following main functionalities:</p> <ul> <li>Service Catalog Management: A CSP will have the ability to manage the Service Catalog Items, their attributes , organize in categories and decide what to make available to Customers</li> <li>Services Specifications: A CSP will be able to manage Service Specifications</li> <li>Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties</li> <li>Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs</li> <li>Service Order: The Customer will be able to place a Service Order</li> <li>Service Inventory: The Customer and Provider will be able to view deployed Services status</li> </ul> <p>The following figure displays the overall architecture of Openslice.</p> <p></p> <p>Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:</p> <ul> <li>Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility\u2019s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory</li> <li>An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service</li> <li>A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics</li> <li>An authentication server implementing Oauth2 authentication scheme</li> <li>A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)</li> <li>A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog</li> <li>A microservice that is capable to interface to an issue management system. For example it raises an issue to all related stakeholders (CSP, NOP, CSC) that a new Service Order is requested</li> <li>Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster</li> <li>A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs </li> </ul> <p>The following figure depicts how Openslice microservices are deployed</p> <p></p>"},{"location":"architecture/architecture/#deploying-openslice-in-multi-domain-scenarios","title":"Deploying Openslice in multi domain scenarios","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>See more Consuming Services From External Partner Organizations</p>"},{"location":"architecture/centrallog/","title":"Central Logging","text":"<p>Openslice follows the centralized log management concept, i.e. a type of logging solution system that consolidates the log data from different services and pushes it to a central, accessible and easy-to-use interface. </p> <p>For that reason, Elasticsearch is elected as an open-source centralized logging solution for collecting, parsing and storing logs towards a real-time data analytics tool that provides insights from any type of structured and unstructured data source.</p>"},{"location":"architecture/consumingServicesFromExternalPartners/","title":"Consuming Services From External Partner Organizations","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>In Openslice we can consume services from 3rd parties via Open APIs.</p> <p>We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:</p> <ul> <li>Import Service Specifications</li> <li>Create a Service Order</li> <li>Use the Service Inventory to query the status of the service ordered to the external partner organization</li> </ul>"},{"location":"architecture/consumingServicesFromExternalPartners/#define-an-organization-as-3rd-party-to-consume-services-east-west","title":"Define an Organization as 3rd party to consume services East-West","text":"<p>An organization must have the following characteristics in openslice catalog, like for example:</p> <p>\"EXTERNAL_TMFAPI_BASEURL\", \"http://portal.openslice.io\"</p> <p>\"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\", \"authOpensliceProvider\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTID\", \"osapiWebClientId\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\", \"secret\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2SCOPES\", scopes</p> <p>\"EXTERNAL_TMFAPI_OAUTH2TOKENURI\", \"http://portal.openslice.io/osapi-oauth-server/oauth/token\"</p> <p>\"EXTERNAL_TMFAPI_USERNAME\", \"admin\"</p> <p>\"EXTERNAL_TMFAPI_PASSWORD\", \"openslice\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATALOG_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification?type=CustomerFacingServiceSpecification\" (this is optional, fetch a list of service specs it will be relative with the BASEURL. If the url is empty then no specs will be fetched, the EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS might be used)</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/{categoryid}\" (this example will fetch all specs in a category. You may define comma separated URLs of categories API URL . This will  fetch  specifications of every defined category. If you want only one specific category put for example the uuid only of one category: \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d\". multiple urls should be \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d,/tmf-api/serviceCatalogManagement/v4/serviceCategory/9b6d8bf3-abd2-43c4-8154-c8c6fe5545b2\")</p> <p>\"EXTERNAL_TMFAPI_SERVICE_SPEC\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS\"= \"/test/v1/serviceorder\" (this is optional)</p> <p>An example Organization defined example in json:</p> <pre><code>\n{\n  \"uuid\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n  \"@baseType\": \"BaseEntity\",\n  \"@schemaLocation\": null,\n  \"@type\": null,\n  \"href\": null,\n  \"name\": \"Openslice.io\",\n  \"id\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n  \"isHeadOffice\": null,\n  \"isLegalEntity\": null,\n  \"nameType\": null,\n  \"organizationType\": null,\n  \"tradingName\": null,\n  \"contactMedium\": [],\n  \"creditRating\": [],\n  \"existsDuring\": null,\n  \"externalReference\": [],\n  \"organizationChildRelationship\": [],\n  \"organizationIdentification\": [],\n  \"organizationParentRelationship\": null,\n  \"otherName\": [],\n  \"partyCharacteristic\": [\n    {\n      \"uuid\": \"3a2f7221-e0a2-4a6b-88d1-534c8e1963f6\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"authOpensliceProvider\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"c24bb527-f178-4d38-9b93-2027c1732876\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_USERNAME\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"admin\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"27e45df8-414b-44c6-a5d5-3f064e2cfd3b\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_PASSWORD\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"openslice\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"e0e470b8-6024-4014-8a18-2333e5465ce1\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"secret\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"3e0de762-ac80-4c1e-a0a1-f265ff0899b4\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2SCOPES\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"admin;read\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"0bbb8314-f7f2-420d-9fed-ba054b15f886\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2TOKENURI\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"http://portal.openslice.io/osapi-oauth-server/oauth/token\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"3a567de4-79eb-4006-a500-3e5229b44175\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTID\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"osapiWebClientId\",\n        \"alias\": null\n      }\n    },\n    {\n      \"uuid\": \"6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e\",\n      \"@baseType\": \"BaseEntity\",\n      \"@schemaLocation\": null,\n      \"@type\": null,\n      \"href\": null,\n      \"name\": \"EXTERNAL_TMFAPI_BASEURL\",\n      \"valueType\": null,\n      \"value\": {\n        \"value\": \"http://portal.openslice.io\",\n        \"alias\": null\n      }\n    }\n  ],\n  \"relatedParty\": [],\n  \"status\": null,\n  \"taxExemptionCertificate\": []\n}\n\n</code></pre>"},{"location":"architecture/issuemgt/","title":"Issue Management","text":"<p>For issue management support, Openslice relies on Bugzilla. Bugzilla is a ticketing tool that allows issue reporting and tracking via tickets to all relevant stakeholders. </p> <p>The figure below displays the overall issue management service architecture integrating Bugzilla as its core and how this tool interacts with other Openslice services presenting some distinctive scenarios. It should be noted that Bugzilla tickets will not only be used for bugs/errors, but also for general requests, e.g. Service Order procedure.</p> <p></p>"},{"location":"architecture/messagebus/","title":"Message Bus and exchanged Messages","text":"<p>Openslice has a Message bus which allows Openslice services to exchange messages via queues and topics.</p> <p>It is based on ActiveMQ.</p> <p>3rd party services can be attached to bus and subscribe to message topics or request resources via queues.</p>"},{"location":"architecture/messagebus/#queue-messages","title":"QUEUE MESSAGES","text":"Message Alias CATALOG_GET_SERVICEORDERS Name jms:queue:CATALOG.GET.SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_BY_ID Name jms:queue:CATALOG.GET.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body String orderid Description Return a ServiceOrder as String Json Message Alias CATALOG_UPD_SERVICEORDER_BY_ID Name jms:queue:CATALOG.UPD.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body ServiceOrderUpdate serviceOrder Headers \"orderid\"= orderid Description Returns a ServiceOrder as String Message Alias CATALOG_GET_SERVICESPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICESPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceSpecification Message Alias CATALOG_ADD_SERVICESPEC Name jms:queue:CATALOG.ADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecCreate Description Creates a ServiceSpecification and  returns a ServiceSpecification as String Message Alias CATALOG_UPD_SERVICESPEC Name jms:queue:CATALOG.UPD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId Description Updates a ServiceSpecification and  returns a ServiceSpecification as String. --- Message Alias CATALOG_UPDADD_SERVICESPEC Name jms:queue:CATALOG.UPDADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId, \"forceId\"=forceId Description Updates a ServiceSpecification and  returns a ServiceSpecification as String. If forceId is true then tries to assign the requested ID to the spec Message Alias CATALOG_ADD_SERVICEORDER Name jms:queue:CATALOG.ADD.SERVICEORDER Type queue Destination TMF API service Producers OSOM Body ServiceOrderCreate serviceOrder Headers Description Creates a ServiceOrder and  returns a ServiceOrder as String Message Alias CATALOG_GET_INITIAL_SERVICEORDERS_IDS Name jms:queue:CATALOG.GET.INITIAL_SERVICEORDERS Type queue Destination TMF API service Producers Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_IDS_BY_STATE Name jms:queue:CATALOG.GET.ACKNOWLEDGED_SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Headers \"orderstate\"= orderState Description String Json ArrayList of ServiceOrders Message Alias CATALOG_ADD_SERVICE Name jms:queue:CATALOG.ADD.SERVICE Type queue Destination TMF API service Producers OSOM Body ServiceCreate String json Headers \"orderid\"=orderid, \"serviceSpecid\"= specid Description Creates Service based an a Service Spec, Returns a Service object Message Alias CATALOG_UPD_SERVICE Name jms:queue:CATALOG.UPD.SERVICE Type queue Destination TMF API service Producers Body ServiceUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICE_BY_ID Name jms:queue:CATALOG.GET.SERVICE Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service instance <p>---| Message |    | | ------------- |----------------| |Alias |  CATALOG_GET_SERVICE_BY_ORDERID  | |Name |  jms:queue:CATALOG.GET.SERVICE_BY_ORDERID  | |Type | queue  | |Destination |   TMF API service | |Producers |  | |Body |  String serviceID | |Description |   returns Service IDs of a specific order given then order id |</p> Message Alias CATALOG_SERVICE_QUEUE_ITEMS_GET Name jms:queue:CATALOG.SERVICEQUEUEITEMS.GET Type queue Destination TMF API service Producers OSOM Body Description returns a LIST OF Service Queue Items --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_UPD Name jms:queue:CATALOG.SERVICEQUEUEITEM.UPDATE Type queue Destination TMF API service Producers OSOM Body String SERVICEQUEUEITEM Headers \"itemid\" = SERVICEQUEUEITEM id Description ill update a service queue item by id and return the instance --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_DELETE Name jms:queue:CATALOG.SERVICEQUEUEITEM.DELETE Type queue Destination TMF API service Producers OSOM Body Headers \"itemid\" = SERVICEQUEUEITEM id Description ill delete a service queue item by id Message Alias CATALOG_SERVICES_TO_TERMINATE Name jms:queue:CATALOG.GET.SERVICETOTERMINATE Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services with END DAte in the past --- Message Alias CATALOG_SERVICES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services from the inventory of partners Message Alias NFV_CATALOG_GET_NSD_BY_ID Name jms:queue:NFVCATALOG.GET.NSD_BY_ID Type queue Destination NFV Catalog service Producers TMF API, OSOM Body NSDid Description Returns a NetworkServiceDescriptor object Message Alias NFV_CATALOG_DEPLOY_NSD_REQ Name jms:queue:NFVCATALOG.DEPLOY.NSD_REQ Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers NSD id Description Returns a DeploymentDescriptor object as json string containing deployment info Message Alias NFV_CATALOG_UPD_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.UPD.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers DeploymentDescriptor id Description Updates and Returns a DeploymentDescriptor object as json string containing deployment info Message Alias GET_USER_BY_USERNAME Name jms:queue:GET.USER_BY_USERNAME Type queue Destination NFV Catalog service (this is temproary for now) Producers TMF API Body username Headers Description Returns a PortalUser object as json string containing user info Message Alias NFV_CATALOG_GET_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.GET.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body Deployment ID Description Returns a DeploymentDescriptor object Message Alias CATALOG_GET_EXTERNAL_SERVICE_PARTNERS Name jms:queue:CATALOG.GET.EXTERNALSERVICEPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description As a String Json ArrayList of Organizaton objects containing the characteristic name EXTERNAL_TMFAPI Message Alias CATALOG_UPD_EXTERNAL_SERVICESPEC Name jms:queue:CATALOG.UPD.EXTERNAL_SERVICESPEC Type queue Destination TMF API service Producers OSOM or maybe used by others that would like to update a Service Spec Body A serviceSpecification as json string Headers servicespecification id, orgid id Description Updates (or inserts if does not exist in catalog) an external service specification) Message Alias NFV_CATALOG_NSACTIONS_SCALE Name jms:queue:NSACTIONS.SCALE Type queue Destination TMF API service Producers OSOM or maybe used by others that would like scale a NS Body A ScaleDescriptor as json string Headers none Description performs a scale Message Alias NFV_CATALOG_NS_LCMCHANGED Name NFV_CATALOG_NS_LCMCHANGED Type topic Destination any Producers MANO client Body A json string Headers none Description A NFV_CATALOG_NS_LCMCHANGED message is published when LCM of a running NS is changed"},{"location":"architecture/messagebus/#alarms","title":"ALARMS","text":"Message Alias ALARMS_ADD_ALARM Name jms:queue:ALARMS.ADD.ALARM Type queue Publishers Consumers TMF API Body AlarmCreate Headers Description Add an alarm Message Alias ALARMS_UPDATE_ALARM Name jms:queue:ALARMS.UPDATE.ALARM Type queue Publishers Consumers TMF API Body AlarmUpdate Headers alarmid = alarm id, body (AlarmUpdate object) Description Update an alarm Message Alias ALARMS_GET_ALARM Name jms:queue:ALARMS.GET.ALARM Type queue Publishers Consumers TMF API Body Headers alarmid = alarm id Description get an alarm"},{"location":"architecture/messagebus/#event-topics-in-message-bus","title":"EVENT TOPICS IN Message Bus","text":"Message Alias EVENT_SERVICE_CREATE Name jms:topic:EVENT.SERVICE.CREATE Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_STATE_CHANGED Name jms:topic:EVENT.SERVICE.STATECHANGED Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_DELETE Name jms:topic:EVENT.SERVICE.DELETE Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICE.ATTRCHANGED Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ORDER_CREATE Name jms:topic:EVENT.SERVICEORDER.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to create a new issue Message Alias EVENT_SERVICE_ORDER_STATE_CHANGED Name jms:topic:EVENT.SERVICEORDER.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to update an issue Message Alias EVENT_SERVICE_ORDER_DELETE Name jms:topic:EVENT.SERVICEORDER.DELETE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_SERVICE_ORDER_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICEORDER.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_ALARM_CREATE Name jms:topic:EVENT.ALARM.CREATE Type topic Publishers TMF API Consumers OAS, BUGZILLA Service, CentralLog Service Body AlarmCreateEvent Headers Description The Event  contains the Alarm object in payload Message Alias CATALOG_ADD_RESOURCE Name jms:queue:CATALOG.ADD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceCreate Headers Description The Body  contains the ResourceCreate object to add Message Alias CATALOG_UPD_RESOURCE Name jms:queue:CATALOG.UPD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceUpdate Headers resourceid , propagateToSO Description The Body  contains the ResourceCreate object to update Message Alias CATALOG_GET_RESOURCE_BY_ID Name jms:queue:CATALOG.GET.RESOURCE Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body  contains the ResourceCreate object to update Message Alias CATALOG_RESOURCES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type topic Publishers TMF API Consumers any Body none Headers none Description retrieve all active services of partners Message Alias CATALOG_ADD_RESOURCESPEC Name jms:queue:CATALOG.ADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationCreate Headers Description The Body  contains the ResourceSpecificationCreate object to add Message Alias CATALOG_UPD_RESOURCESPEC Name jms:queue:CATALOG.UPD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationUpdate Headers resourceSpecId Description The Body  contains the ResourceSpecificationCreate object to update Message Alias CATALOG_GET_RESOURCESPEC_BY_ID Name jms:queue:CATALOG.GET.RESOURCESPEC_BY_ID Type topic Publishers TMF API Consumers any Body resourceSpecid Headers Description The Body  contains the object id to find Message Alias CATALOG_UPDADD_RESOURCESPEC Name jms:queue:CATALOG.UPDADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body  contains the ResourceSpecificationCreate object to update or create if not exist Message Alias EVENT_RESOURCE_CREATE Name jms:topic:EVENT.RESOURCE.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_STATE_CHANGED Name jms:topic:EVENT.RESOURCE.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_DELETE Name jms:topic:EVENT.SERVICE.RESOURCE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.RESOURCE.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias CATALOG_GET_LCMRULE_BY_ID Name jms:queue:CATALOG.GET.LCMRULE Type topic Publishers TMF API Consumers any Body lcmid Headers Description The Body  contains the LCMRuleSpec object Message Alias CATALOG_GET_LCMRULES_BY_SPECID_PHASE Name jms:queue:CATALOG.GET.LCMRULES_BY_SPECID_PHASE Type topic Publishers TMF API Consumers any Body Headers header.servicespecid, header.phasename Description The Body  contains the LCMRuleSpec objects of the specific Service Spec and the specific phase Message Alias CATALOG_GET_SERVICETESTSPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICETESTSPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceTestSpecification Message Alias CATALOG_ADD_SERVICETEST Name jms:queue:CATALOG.ADD.SERVICETEST Type queue Destination TMF API service Producers OSOM Body ServiceTestCreate String json Headers \"orderid\"=orderid, \"serviceTestSpecid\"= specid Description Creates Service Test based an a Service Test Spec, Returns a ServiceTest object Message Alias CATALOG_UPD_SERVICETEST Name jms:queue:CATALOG.UPD.SERVICETEST Type queue Destination TMF API service Producers Body ServiceTestUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service test by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICETEST_BY_ID Name jms:queue:CATALOG.GET.SERVICETEST Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service TEST instance Message Alias CRD_DEPLOY_CR_REQ Name jms:queue:CRD.DEPLOY.CR_REQ Type queue Destination CRD  service Producers OSOM Body CR spec as String Headers related service id Description Returns a String object containing deployment info Message Alias CRD_PATCH_CR_REQ Name jms:queue:CRD.PATCH.CR_REQ Type queue Destination CRD  service Producers OSOM Body CR  as String Headers related service id Description Returns a String object containing PATCH info Message Alias CRD_DELETE_CR_REQ Name jms:queue:CRD.DELETE.CR_REQ Type queue Destination CRD  service Producers OSOM Body CR  as String Headers related service id Description Returns a String object containing deletion info"},{"location":"architecture/nfvapi/","title":"API interaction","text":""},{"location":"architecture/nfvapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/nfvapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all vxfs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4\" http://localhost:13000/osapi/admin/vxfs\n</code></pre> <p>Example response:</p> <pre><code>[\n  {\n    \"id\": 1,\n    \"owner\": {\n      \"id\": 1,\n      \"organization\": \"ee\",\n      \"name\": \"Portal Administrator\",\n      \"email\": \"\",\n      \"username\": \"admin\",\n      \"createdAt\": null\n    },\n    \"uuid\": \"a954daf2-16da-4b7e-ae42-4825936d453c\",\n    \"name\": \"cirros_vnfd\",\n    \"iconsrc\": \"/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png\",\n    \"shortDescription\": \"cirros_vnfd\",\n    \"longDescription\": \"Simple VNF example with a cirros\",\n    \"version\": \"1.0\",\n    \"packageLocation\": \"/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz\",\n    \"dateCreated\": 1568971426000,\n    \"dateUpdated\": 1568981107000,\n    \"categories\": [\n      {\n        \"id\": 3,\n        \"name\": \"Service\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      },\n      {\n        \"id\": 2,\n        \"name\": \"Networking\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      }\n    ],\n    \"extensions\": [],\n    \"validationJobs\": [],\n    \"screenshots\": \"\",\n    \"vendor\": \"OSM\",\n    \"published\": false,\n    \"termsOfUse\": null,\n    \"descriptor\": \"vnfd-catalog:\\n    vnfd:\\n    -   connection-point:\\n        -   name: eth0\\n            type: VPORT\\n        description: Simple VNF example with a cirros\\n        id: cirros_vnfd\\n        logo: cirros-64.png\\n        mgmt-interface:\\n            cp: eth0\\n        name: cirros_vnfd\\n        short-name: cirros_vnfd\\n        vdu:\\n        -   count: 1\\n            description: cirros_vnfd-VM\\n            id: cirros_vnfd-VM\\n            image: cirros034\\n            interface:\\n            -   external-connection-point-ref: eth0\\n                name: eth0\\n                position: '1'\\n                type: EXTERNAL\\n                virtual-interface:\\n                    bandwidth: '0'\\n                    type: VIRTIO\\n                    vpci: 0000:00:0a.0\\n            name: cirros_vnfd-VM\\n            vm-flavor:\\n                memory-mb: 512\\n                storage-gb: 1\\n                vcpu-count: 1\\n        vendor: OSM\\n        version: '1.0'\\n\",\n    \"descriptorHTML\": \"&lt;h3&gt;cirros_vnfd&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;512 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;1 GB&lt;br&gt;\",\n    \"certified\": false,\n    \"certifiedBy\": null,\n    \"validationStatus\": \"UNDER_REVIEW\",\n    \"packagingFormat\": \"OSMvFIVE\",\n    \"supportedMANOPlatforms\": [\n      {\n        \"id\": 1,\n        \"name\": \"osm fivee\",\n        \"version\": \"osm fivee\",\n        \"description\": \"osm five\"\n      }\n    ],\n    \"vxfOnBoardedDescriptors\": [],\n    \"vfimagesVDU\": [\n      {\n        \"id\": 1,\n        \"name\": \"cirros034\",\n        \"uuid\": \"d4549610-8abd-42ad-97f4-0a64e1c93977\",\n        \"shortDescription\": \"Automatically created during vxf cirros_vnfd submission. Owner must update.\",\n        \"packageLocation\": null,\n        \"publicURL\": null,\n        \"dateCreated\": 1568971426000,\n        \"dateUpdated\": null,\n        \"refVxFs\": [\n          {\n            \"id\": 1,\n            \"name\": \"cirros_vnfd\"\n          }\n        ],\n        \"owner\": {\n          \"id\": 1,\n          \"organization\": \"ee\",\n          \"name\": \"Portal Administrator\",\n          \"email\": \"\",\n          \"username\": \"admin\",\n          \"active\": true,\n          \"currentSessionID\": null,\n          \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n          \"createdAt\": 1568711859000,\n          \"roles\": [\n            \"ADMIN\",\n            \"MENTOR\"\n          ]\n        },\n        \"published\": false,\n        \"termsOfUse\": null,\n        \"deployedInfrastructures\": []\n      }\n    ]\n  },\n  {\n    \"id\": 2,\n    \"owner\": {\n      \"id\": 1,\n      \"organization\": \"ee\",\n      \"name\": \"Portal Administrator\",\n      \"email\": \"\",\n      \"username\": \"admin\",\n      \"createdAt\": null\n    },\n    \"uuid\": \"4ab80095-a63e-4fe7-8598-e1c7e880706e\",\n    \"name\": \"cirros_sriov_vnfd\",\n    \"iconsrc\": null,\n    \"shortDescription\": \"cirros_sriov_vnf\",\n    \"longDescription\": \"Simple VNF example with a cirros SRIOV interface\",\n    \"version\": \"1.0\",\n    \"packageLocation\": \"/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz\",\n    \"dateCreated\": 1568971740000,\n    \"dateUpdated\": 1568981100000,\n    \"categories\": [\n      {\n        \"id\": 4,\n        \"name\": \"tyu\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      },\n      {\n        \"id\": 5,\n        \"name\": \"tyi\",\n        \"productsCount\": 1,\n        \"appscount\": 0,\n        \"vxFscount\": 1\n      }\n    ],\n    \"extensions\": [],\n    \"validationJobs\": [],\n    \"screenshots\": \"\",\n    \"vendor\": \"OSM\",\n    \"published\": false,\n    \"termsOfUse\": null,\n    \"descriptor\": \"vnfd:vnfd-catalog:\\n  vnfd:\\n  - connection-point:\\n    - name: eth0\\n      type: VPORT\\n    - name: eth1\\n      type: VPORT\\n    description: Simple VNF example with a cirros SRIOV interface\\n    id: cirros_sriov_vnfd\\n    logo: cirros-64.png\\n    mgmt-interface:\\n      cp: eth0\\n    name: cirros_sriov_vnf\\n    short-name: cirros_sriov_vnf\\n    vdu:\\n    - count: 1\\n      description: cirros_sriov_vnfd-VM\\n      guest-epa:\\n        cpu-pinning-policy: DEDICATED\\n        cpu-thread-pinning-policy: PREFER\\n        mempage-size: SMALL\\n        numa-node-policy:\\n          mem-policy: STRICT\\n          node:\\n          - id: '1'\\n          node-cnt: '1'\\n      id: cirros_sriov_vnfd-VM\\n      image: cirros-0.3.6-x86_64\\n      interface:\\n      - external-connection-point-ref: eth0\\n        name: eth0\\n        position: '1'\\n        type: EXTERNAL\\n        virtual-interface:\\n          bandwidth: '0'\\n          type: VIRTIO\\n          vpci: 0000:00:0a.0\\n      - external-connection-point-ref: eth1\\n        name: eth1\\n        position: '2'\\n        type: EXTERNAL\\n        virtual-interface:\\n          type: SR-IOV\\n      name: cirros_sriov_vnfd-VM\\n      vm-flavor:\\n        memory-mb: 4096\\n        storage-gb: 10\\n        vcpu-count: 4\\n    vendor: OSM\\n    version: '1.0'\\n\",\n    \"descriptorHTML\": \"&lt;h3&gt;cirros_sriov_vnf&lt;/h3&gt;&lt;br&gt;&lt;b&gt;Vendor: &lt;/b&gt;OSM&lt;br&gt;&lt;b&gt;Version: &lt;/b&gt;1.0&lt;br&gt;&lt;b&gt;Description: &lt;/b&gt;Simple VNF example with a cirros SRIOV interface&lt;br&gt;&lt;b&gt;VM Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;vCPU Count: &lt;/b&gt;1&lt;br&gt;&lt;b&gt;Memory: &lt;/b&gt;4096 MB&lt;br&gt;&lt;b&gt;Storage: &lt;/b&gt;10 GB&lt;br&gt;\",\n    \"certified\": false,\n    \"certifiedBy\": null,\n    \"validationStatus\": \"UNDER_REVIEW\",\n    \"packagingFormat\": \"OSMvFIVE\",\n    \"supportedMANOPlatforms\": [\n      {\n        \"id\": 1,\n        \"name\": \"osm fivee\",\n        \"version\": \"osm fivee\",\n        \"description\": \"osm five\"\n      }\n    ],\n    \"vxfOnBoardedDescriptors\": [],\n    \"vfimagesVDU\": [\n      {\n        \"id\": 2,\n        \"name\": \"cirros-0.3.6-x86_64\",\n        \"uuid\": \"be121176-1d62-4a1b-a3c1-7dce2e069d22\",\n        \"shortDescription\": \"Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.\",\n        \"packageLocation\": null,\n        \"publicURL\": null,\n        \"dateCreated\": 1568971740000,\n        \"dateUpdated\": null,\n        \"refVxFs\": [\n          {\n            \"id\": 2,\n            \"name\": \"cirros_sriov_vnfd\"\n          }\n        ],\n        \"owner\": {\n          \"id\": 1,\n          \"organization\": \"ee\",\n          \"name\": \"Portal Administrator\",\n          \"email\": \"\",\n          \"username\": \"admin\",\n          \"active\": true,\n          \"currentSessionID\": null,\n          \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n          \"createdAt\": 1568711859000,\n          \"roles\": [\n            \"ROLE_ADMIN\",\n            \"ROLE_MENTOR\"\n          ]\n        },\n        \"published\": false,\n        \"termsOfUse\": null,\n        \"deployedInfrastructures\": []\n      }\n    ]\n  }\n]\n</code></pre>"},{"location":"architecture/oauth/","title":"Authentication Server","text":"<p>Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment </p> <p>API users needs to authenticate.  All APIs (except grant token request) must include Bearer token in request Authorization header.</p>"},{"location":"architecture/oauth/#oauth-token","title":"OAuth token","text":"<p>Get first an oauth token, using your username and password. </p> <pre><code>curl -X POST http://portal.openslice.io/auth/realms/openslice/protocol/openid-connect/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=demouser' -d 'password=demouser' -d 'grant_type=password' -d 'client_id=osapiWebClientId' \n</code></pre> <p>response:</p> <pre><code>                                                       {\"access_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw\",\"expires_in\":300,\"refresh_expires_in\":1800,\"refresh_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwZjUxMDk5Yy0wNTIzLTRjNGQtODM0Zi1iNDc0YzBjOTA1MzkifQ.eyJleHAiOjE1ODgyNDIwNzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiZmViOTg5NWEtOTY5ZS00MzIzLWJjY2QtZTY2YzQ0NGE1MzJlIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0Iiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.cDTx9BE1Df8EfGYm3VLr_MNFeymxZtJhMtlK7PVbIuk\",\"token_type\":\"bearer\",\"not-before-policy\":1586797346,\"session_state\":\"3350f493-6627-4373-8544-defd27ad3c74\",\"scope\":\"profile email\"}\n\n</code></pre> <p>The <code>access_token</code> will be used next as a Bearer.</p> <pre><code>curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer yJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1MjQsImlhdCI6MTU4ODI0MDIyNCwianRpIjoiYjg0NGYxZDAtMzk3Mi00YTMyLThiMWEtZDAxMDY3OGZjMTQ4IiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tY2xpIiwic2Vzc2lvbl9zdGF0ZSI6ImFmMmMzZmY1LTE4YWQtNDFkNC1hYTAyLTFlMGJkNzNmOTM5MSIsImFjciI6IjEiLCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiZGVtb3VzZXIifQ.SMtgV1E44_K_MQumGXZtWsLGVhYNaoM8Pk-DiFIZtUP4Zu-ervOsxHVQMX1frgVERR4jJidBcSshy9TnJ3UjF4l33WujHltbs-1UPy-gaIufVuEpl8RmbjOti3Up70vLfLXbzb6kN6WaahgobWXlbJsSXXwaBPQP6vSX5KigCa8TmzXcuqom14lOrlU-RB2zQTlJ30p7d9ag-a7o3I5m9GZWLJCZW2UYMl1JkskTHKgilA8HFQY4C9DYwWu8YDMyzqQSNumrTlURalBFidFbZvb1kp4dAyct8TysSWSbxxiwaL2RX1PWUqk-5Fpc1Q6BnBC8muMheiukFuoSkuADAg'^C\nubuntu@portal:~$ curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw'\n\nResponse:\n\n\n[{\"uuid\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"lastUpdate\":\"2020-03-11T23:19:05Z\",\"@baseType\":\"BaseEntity\",\"@schemaLocation\":null,\"@type\":\"ServiceCatalog\",\"href\":null,\"name\":\"Example Facility Services\",\"description\":\"Example Facility Services\",\"lifecycleStatus\":\"Active\",\"version\":\"1.0\",\"validFor\":{\"endDateTime\":\"2039-11-20T23:07:21Z\",\"startDateTime\":\"2019-11-20T23:07:21Z\"},\"relatedParty\":null,\"id\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"category\":[{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"Generic Services\",\"@referredType\":null,\"id\":\"98b9adf1-a1d6-4165-855f-153ddc2131b1\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"External\",\"@referredType\":null,\"id\":\"08ffdb3c-6237-45d0-9f3a-d43b5fc5f0b6\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"eMBB\",\"@referredType\":null,\"id\":\"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"}]}]\n\n\n</code></pre>"},{"location":"architecture/osom/","title":"Openslice Service Orchestration and Order Management - OSOM","text":"<p>OSOM is a service responsible for:</p> <ul> <li>Service Order Management (SOM)</li> <li>Service Orchestration (SO)</li> </ul> <p>It uses open source Flowable Business process engine (https://www.flowable.org) .</p> <p>A Service Order follows the states as defined in TMF641 specification: </p> <p></p>"},{"location":"architecture/osom/#initial-state","title":"Initial state","text":"<p>When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.</p> <p></p> <p>Administrators are notified usually from the Ticketing System of a new order. They login to Openslice and change the State of the order either to ACKNOWLEDGED or REJECTED. If ACKNOWLEDGED they can Propose a startDate, add Notes, and add any additional service items</p>"},{"location":"architecture/osom/#order-scheduler","title":"Order scheduler","text":"<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p> <p></p> <p></p> <p>It retrieves all orders that are in ACKNOWLEDGED state and if the start date is in time it will initialize the process by settingn the order in IN_PROGRESS state. Finally the Start Order Process will start.</p>"},{"location":"architecture/osom/#start-order-process","title":"Start order process","text":"<p>This process for now is a draft simple prototype to make a simple orchestration via NFVO. Here the actual Services (TMF638/640 model) are created and attached to Service Order and Service Inventory.</p> <p></p> <p></p> <p>We expect here to check which tasks can be orchestrated by NFVO and which by human. We create the equivalent Services(TMF638/640 model) for this order.</p> <ol> <li>During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory</li> <li>The Services(TMF638 model) are assigned to the Order O1 In supportService List</li> <li>Each OrderItem OI1 is related to one serviceSpecification</li> <li>Each ServiceSpecification has also related serviceSpecRelationships</li> <li>So if we receive an order O1 for a ServiceSpec A which relates to (a bundle of) 3 specs(2 CFS, 1 RFS) we do the following:<ol> <li>Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1</li> <li>We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS) </li> <li>At this point the order will have 1 Local Service Orchestration Process(S_A),  2 supportingServices  refs(S_C1, S_C2) and 1 supportingResource(S_R1)</li> <li>The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory</li> <li>Service S_A will have: <ol> <li>startMode 1: Automatically by the managed environment</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> </ol> </li> <li>Services S_C1 and S_C2 we decide that cannot be orchestrated then they have <ol> <li>startMode: 3: Manually by the Provider of the Service</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> <li>If the CFS is a bundle spec it is further recursively orchestrated </li> </ol> </li> <li>Service S_R1 will have <ol> <li>startMode 1: Automatically by the managed environment.</li> <li>State: RESERVED</li> <li>IF The Service has the characteristic CharacteristicByName( \"NSDID\") it will be further processed by the NFVO </li> </ol> </li> </ol> </li> </ol> <p>There will be two instances of task \"User Task Manual Complete Service\" each for Services S_C1 and S_C2. The task is Transient for now. It displays only the services that are not automated!  Here is a flow for future:</p> <ol> <li>We wait here for human decision.</li> <li>From API we get a result:     a. If set to ACTIVE/TERMINATED then we complete the task     b. In any other state we stay in this task until it is resolved as in step a     c. The Status of ORDER O1 is also updated to PARTIAL</li> </ol> <p>There will be an instance of  NFVODeploymentRequest process  each for Service S_R1. (see later)</p> <ol> <li>This process is related with the NFVO orchestration</li> <li>It will send a msg to NFVO(s?) for a specific deployment request</li> </ol> <p>All services in \"Order Complete\" are in a status:</p> <ol> <li>Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED</li> <li>The Status of ORDER O1 is also updated to COMPLETED  or PARTIAL (in case we have some services running) or FAILED (in cases we have errors)</li> </ol> <p>A Service follows the states as defined in TMF638 Service Inventory specification: </p> <p></p>"},{"location":"architecture/osom/#nfvodeploymentrequest-process","title":"NFVODeploymentRequest process","text":"<p>This process is related with the NFVO orchestration It will send a msg to NFVO(s?) for a specific deployment request Then it checks the deployment status. It will wait 30 secs each time until the deployment is running (or failed)</p>"},{"location":"architecture/osom/#check-in-progress-orders-process","title":"Check In Progress orders process","text":"<p>Every 1 minute the \"Check In Progress Orders\" process is executed checking if a supported Service changed state (i.e. to ACTIVE) then the whole Order will change state (e.g. go to COMPLETED)</p> <p></p>"},{"location":"architecture/osom/#external-service-provider-deployment-request-process","title":"External Service Provider Deployment Request process","text":"<p>This process contains tasks for submitting order requests to external partners. - Submit Order To External Service Provider Task: This task creates automatically a Service Order request to a 3rd party provider SO that hosts the Service Specification - Check external service order fulfillment task: This task Check external partner for Service creations and updates our local inventory of services the service characteristics of remote Service Inventory</p>"},{"location":"architecture/osom/#fetch-partner-services-process","title":"Fetch Partner Services Process","text":"<p>Every 2 minutes the \"fetchPartnerServicesProcess\" process is executed checking remote Partner Organizations for changes in the published catalogues. The Fetch and Update External Partner Services Task is executed in paralle l for each Partner Organization </p>"},{"location":"architecture/osom/#local-service-orchestration-process","title":"Local Service Orchestration Process","text":"<p>This process handles automatically services that need to be further orchestrated or processed by OSOM. For example, for a CFS Bundled service we create such automated service instances that just aggregate the underlying services. </p>"},{"location":"architecture/tmfapi/","title":"TMF OpenAPI specification","text":"<p>PLease check the complete specification here.</p>"},{"location":"architecture/tmfapi/#api-interaction","title":"API interaction","text":""},{"location":"architecture/tmfapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/tmfapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all Service Catalogs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTc4NTA1MDcyLCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiMTFlNGYxYTUtZDY0Ny00YzA1LWE0ZGMtYWFhYzUyMjk4YzMwIiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.gm7cKdusDrdMRkxEiFU5sENKGRC1xwVj2SgPRmE9xxx\"  -H  \"accept: application/json;charset=utf-8\" -X GET \"http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog\"\n\n</code></pre> <p>response:</p> <pre><code>[\n  {\n    \"uuid\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n    \"lastUpdate\": \"2019-12-19T10:45:55Z\",\n    \"@baseType\": \"BaseEntity\",\n    \"@schemaLocation\": null,\n    \"@type\": \"ServiceCatalog\",\n    \"href\": null,\n    \"name\": \"Example Facility Services\",\n    \"description\": \"Example Facility Services\",\n    \"lifecycleStatus\": \"Active\",\n    \"version\": \"1.0\",\n    \"validFor\": {\n      \"endDateTime\": \"2039-11-20T23:07:21Z\",\n      \"startDateTime\": \"2019-11-20T23:07:21Z\"\n    },\n    \"relatedParty\": null,\n    \"id\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n    \"category\": [\n      {\n        \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"@schemaLocation\": null,\n        \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"href\": null,\n        \"name\": \"eMBB\",\n        \"@referredType\": null,\n        \"id\": \"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"\n      },\n      {\n        \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"@schemaLocation\": null,\n        \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n        \"href\": null,\n        \"name\": \"Generic Services\",\n        \"@referredType\": null,\n        \"id\": \"98b9adf1-a1d6-4165-855f-153ddc2131b1\"\n      }\n    ]\n  }\n]\n</code></pre>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/","title":"CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster","text":""},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#intended-audience-osl-developers","title":"Intended Audience: OSL developers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>CRIDGE is a service designed to create and manage Custom Resources (CRs) based on Custom Resource Definitions (CRDs) installed on a Kubernetes cluster. By leveraging the OpenSlice (OSL), CRIDGE enables seamless integration and  orchestration within Kubernetes environments, utilizing Kubernetes APIs via the TMF APIs and models. Thus, more or less, OSL exposes Kubernetes APIs as TMF APIs and models.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>CRIDGE service allows OSL to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OSL services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>CRIDGE capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <p>OSL can expose CRs in service catalogs, facilitating their deployment in complex scenarios. These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</p> </li> </ol> <p>Why the CRIDGE name? we wanted to build a service that maps TMF models to CRDs; a kind of a CRD to TMF bridge. Therefore CRIDGE was born</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#approach","title":"Approach","text":"<p>OSL in general is responible for exposing service specifications  which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. The OSL Orchestrator (OSOM) will manage the lifecycle of the Service Order.</li> <li>OSOM creates a Resource in OSL Resource inventory and requests (via CRIDGE) a new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol> <p></p> <p>The provided image illustrates the architecture and workflow of the CRIDGE service, showing how it interacts with other components within a Kubernetes (K8s) cluster. Here is an explanation of the key components and flow in the diagram:</p> <ul> <li>Other OSL Services: This box represents various OSL services such as Service Spec Catalogue, Resource Spec Catalogue, Service Inventory, Resource Inventory, and OSOM (OpenSlice Service Orchestration and Management).</li> <li>Service Bus: This is the communication layer that facilitates interaction between the CRIDGE service and other OSL services.</li> <li>CRIDGE: CRIDGE acts as a bridge that converts CRDs (Custom Resource Definitions) to TMF (TM Forum) APIs and models. It enables the creation and management of Custom Resources (CRs) in the Kubernetes cluster.</li> <li> <p>K8s API: The Kubernetes API server, which is the central control point for managing the Kubernetes cluster. CRIDGE interacts with the K8s API to manage CRDs and CRs.</p> <p>CRD (Custom Resource Definition): A CRD is a way to define custom resources in Kubernetes cluster-wise. It allows the extension of Kubernetes API to create and manage user-defined resources. Example :</p> </li> </ul> <pre><code>        apiVersion: apiextensions.k8s.io/v1\n        kind: CustomResourceDefinition\n        metadata:\n            name: myresource.example.com\n</code></pre> <ul> <li>Namespaces: Kubernetes namespaces provide a way to partition resources within a cluster. The diagram shows that multiple namespaces (nsxx, nsyy, nsz) can be managed by CRIDGE.</li> </ul> <p>CR (Custom Resource):  A CR is an instance of a CRD. It represents the actual custom resource that is managed within the Kubernetes cluster. Example shown in different namespaces:</p> <pre><code>        apiVersion: example.com/v1\n        kind: Myresource\n        metadata:\n          name: example_resource_1\n</code></pre> <p>In a nutchell:</p> <ul> <li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> <li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> <li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> <li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>&gt; The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n&gt; Instances of Myresource are created in various namespaces, each with unique names like example_resource_1.\n</code></pre> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#handling-more-than-one-clusters","title":"Handling more than one clusters","text":"<p>A CRIDGE service is usually responsible for managing one cluster. In the following diagram we show how it can be used for managing multiple clusters:</p> <p></p> <p>We assume that there is an OSL Management cluster that OSL is installed. CRIDGE is also installed there if we would like to manage resources in the same management cluster.   - Each CRIDGE service has for example its own configuration to connect to target cluster  - Each CRIDGE can be installed either in the managed cluster or at the remote clusters. Connectivity is handled via the service bus  - Important: Each CRIDGE has a different context and API endpoints. This is used to request CRDs on a different cluster</p> <p>A CRD has a globally unique name for example mycrd.example.com. So we need to somehow identify also the different cluster</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OSL Resource Inventory need to be aware of these events.</p> <p>The sync process is found in the code and explained by the following picture:</p> <p></p> <p>WatcherService is executed when the cridge service application starts (see onApplicationEvent). First things:</p> <ul> <li>KubernetesClientResource is a class that wraps fabric8\u2019s KubernetesClient<ul> <li>This fabric8 KubernetesClient is initialized from the kubeconf and default context of the machine that runs CRIDGE</li> </ul> </li> <li>On CRIDGE Start up we try to register this cluster and context to OSL catalogs.<ul> <li>See registerKubernetesClientInOSLResource method which registers the KubernetesContextDefinition in Resource Inventory as a LogicalResource via  createOrUpdateResourceByNameCategoryVersion method</li> </ul> </li> <li>After the creation(or update) of this cluster as a Resource in OSL we proceed to create  SharedIndexInformers for CustomResourceDefinition objects</li> <li>In this way CRIDGE is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)</li> <li>The SharedIndexInformer events notify CRIDGE, which is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)<ul> <li>NOTE: The ADD event is raised every time also we run CRIDGE. Therefore, on ADD we do the method to createORupdate resource specifications and resources</li> </ul> </li> <li>On ADD event:<ul> <li>The CRD is transformed to OSL Kubernetes domain model: method kubernetesClientResource.KubernetesCRD2OpensliceCRD</li> <li>Then the OSL Kubernetes domain model is:<ul> <li>transformed to Resource Specification and is stored to catalog (see createOrUpdateResourceSpecByNameCategoryVersion)</li> <li>Transformed to Resource and is stored to catalog (see createOrUpdateResourceByNameCategoryVersion)</li> </ul> </li> <li>Conceptually while a CRD is a new resource located in the Kubernetes cluster resource, it is transformed also as a Resource Specification (a high-level entity) which is ready to be reused as an entity to other scenarios. The same concept as in Kubernetes where a CRD is a definition ready to be used for instantiating resources of this CRD</li> <li>Then for this CRD a Watcher is added for all Resources of this Kind (fabric8\u2019s GenericKubernetesResource entity)  </li> <li>When we have a newly added/updated/deleted resource of a certain CRD the method updateGenericKubernetesResourceInOSLCatalog is called for this object  (fabric8\u2019s GenericKubernetesResource entity)</li> <li>We examine if the resource has label org.etsi.osl.resourceId<ul> <li>This label is added by OSOM during service orders to correlate K8S requested resources with resources in inventory</li> </ul> </li> <li>If the label exists, we update the resource by ID updateResourceById</li> <li>Else a resource is created in catalog</li> </ul> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#deployment-of-a-new-cr-based-on-a-crd","title":"Deployment of a new CR based on a CRD","text":"<ul> <li>A message arrives to deploy a CR<ul> <li>The call examines if this CRIDGE service can handle the request (based on context and masterURL)</li> </ul> </li> <li>There are headers received and a crspec in json</li> <li>The crspec is unmarshaled as GenericKubernetesResource</li> <li>Headers are in format org.etsi.osl.*</li> <li>These headers are injected as labels <ul> <li>(see later in orchestration)</li> </ul> </li> <li>A  namespace is created for this resource</li> <li>Watchers are created for this namespace for e.g. new secrets, config maps etc , so that they can be available back as resources to the Inventory of OSL (Note only Secrets for now are watched)</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>See ExposingKubernetesResources</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p> <p>However, the following issue needs to be solved: ** How to map the CR lifecycle that is defined in the CRD with the TMF resource Lifecycle? **     - For this We introduced the following characteristics:  _CR_CHECK_FIELD, _CR_CHECKVAL_STANDBY, _CR_CHECKVAL_ALARM, _CR_CHECKVAL_AVAILABLE, _CR_CHECKVAL_RESERVED, _CR_CHECKVAL_UNKNOWN, _CR_CHECKVAL_SUSPENDED</p> <p>OSOM sends to CRIDGE a message with the following information:</p> <ul> <li>currentContextCluster: current context of cluster </li> <li>clusterMasterURL: current master url of the cluster </li> <li>org.etsi.osl.serviceId: This is the related service id that the created resource has a reference </li> <li>org.etsi.osl.resourceId: This is the related resource id that the created CR will wrap and reference.  </li> <li>org.etsi.osl.prefixName: we need to add a short prefix (default is cr) to various places. For example in K8s cannot start with a number </li> <li>org.etsi.osl.serviceOrderId: the related service order id of this deployment request </li> <li>org.etsi.osl.namespace: requested namespace name </li> <li>org.etsi.osl.statusCheckFieldName: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>org.etsi.osl.statusCheckValueStandby: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAlarm: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAvailable: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueReserved: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueUnknown: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li> <p>org.etsi.osl.statusCheckValueSuspended: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </p> </li> <li> <p>Parameters:</p> <ul> <li>aService reference to the service that the resource and the CR belongs to</li> <li>resourceCR reference the equivalent resource in TMF repo of the target CR. One to one mapping</li> <li>orderId related service order ID</li> <li>startDate start date of the deployment (not used currently)</li> <li>endDate end date of the deployment (not used currently)</li> <li>_CR_SPEC the spec that is sent to cridge (in json)</li> </ul> </li> <li> <p>Returns:</p> <ul> <li>a string response from cridge. It might return \"OK\" if everything is ok. \"SEE OTHER\" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. Any other response is handled as error</li> </ul> </li> <li> <p>CRIDGE receives the message and creates according to the labels the necessary CR</p> </li> <li>It monitors the created resource(s) in namespace (see the Sequence Diagram in previous images)</li> <li>It monitors and tries to figure out and map the Status of the CR to the TMF Status according to the provided org.etsi.osl.statusCheck* labels</li> <li>It sends to the message bus the current resource for creation or update to the TMF service inventory</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#probe-further","title":"Probe further","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> </ul>"},{"location":"contributing/developing/","title":"Developing","text":"<p>OpenSlice backend services are mainly implemented with Java 17 or above and Spring boot.</p> <p>OpenSlice uses various subsystems and depending on the module would you like to work, other subsystems must be present (you can disable them though in the code, e.g. at docker-compose.yaml file).</p> <p>To get the latest development branch:</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh \nsudo ./deploy.sh develop  #[or replace develop with other branch name]\n</code></pre> <p>You may follow the installation process, as described at \"develop\" tagged documentation.</p> <p>To work on a specific subsystem e.g. org.etsi.osl.tmf.api, you must:</p> <p>1a - Deploy only the core necessary subsystems through:</p> <pre><code>sudo docker compose --profile dev down;sudo docker compose --profile dev up -d --build\n</code></pre> <p>Note --profile dev that will only deploy the core dependency subsystems, instead   of the whole OpenSlice.</p> <p>1b - Or alternatively, commend out the respective container from the docker-compose.yaml file, so as to deploy the whole OpenSlice, except the subsystem you want to work on, following the provided installation steps.</p> <p>2 - Clone the respective repository, e.g. https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/tree/develop</p> <p>3 - Code :)</p>"},{"location":"contributing/developing/#general-requirements","title":"General requirements","text":"<ul> <li>Docker should be installed in your development environment</li> <li>Run the core subsystems (see above section)</li> </ul>"},{"location":"contributing/developing/#slack","title":"Slack","text":"<p>Feel free to join OpenSlice Slack for any development oriented questions.</p>"},{"location":"contributing/developing/#examples-of-developing-on-specific-subsystems","title":"Examples of developing on specific subsystems","text":""},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-api-service","title":"VNF/NSD Catalog Management and NSD Deployment API service","text":"<p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.api/-/tree/develop</p> <p>Check the docker-compose.yml file. Default port is 13080. Check specifically the datasource username/password, server port.</p> <p>Make sure that the core subsystems are up and running.</p> <p>Execute it with </p> <pre><code>mvn spring-boot:run\n</code></pre> <p>For verification, Swagger API of the service is at <code>http://localhost:13000/osapi/swagger-ui/index.html</code>. </p> <p>There, you may try there various REST actions and authenticate via the OAuth server without the use of the UI.</p>"},{"location":"contributing/developing/#vnfnsd-catalog-management-and-nsd-deployment-web-ui-service","title":"VNF/NSD Catalog Management and NSD Deployment WEB UI service","text":"<p>The Web UI is written in AngularJS.</p> <p>Clone the repository: https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.web/-/tree/develop</p> <p>By default the project org.etsi.osl.portal.api exposes the folder ../org.etsi.osl.portal.web/src/ in a folder testweb (Check class MvcConfig.java in org.etsi.osl.portal.api) for development. (In production nginx is used). Point your browser to <code>http://localhost:13000/osapi/testweb/index.html/</code></p>"},{"location":"contributing/developing/#versionrelease-management","title":"Version/release management","text":"<p>Check this nice article on how we develop and release versions.</p> <p>https://nvie.com/posts/a-successful-git-branching-model/</p> <p>We develop in the develop branch and follow a issue driven development model.</p>"},{"location":"contributing/developing/#wishlist","title":"Wishlist","text":"<p>Check also our wishlist of new features. You can add your own.</p> <p>See Wishlist.</p>"},{"location":"contributing/wishlist/","title":"TMF API","text":"<ul> <li>RBAC of API endpoints</li> <li>TMF Ticketing API support</li> <li>TMF Product</li> <li>HATEOAS integration</li> <li>Select Specs that can be exposed to partners (maybe with a characteristic?)</li> </ul>"},{"location":"contributing/wishlist/#resource-management","title":"resource management","text":"<ul> <li>Resource Activation and Configuration API TMF702 (NEW) (https://projects.tmforum.org/wiki/pages/viewpage.action?pageId=128855518)</li> </ul>"},{"location":"contributing/wishlist/#tmf-web","title":"TMF WEB","text":""},{"location":"contributing/wishlist/#osom","title":"OSOM","text":"<ul> <li>Actions on service order item and acknowledge order status will define the lifecycle</li> <li>action shutdown on specific date for service order</li> <li>action edit on service order item</li> </ul>"},{"location":"contributing/wishlist/#dynamic-attribute-transformation","title":"Dynamic attribute transformation","text":"<ul> <li>DTM decision tables support per Service Specification</li> <li>Schedule Termination of completed order on running services</li> </ul>"},{"location":"contributing/wishlist/#nfvo-connectivity","title":"NFVO connectivity","text":""},{"location":"contributing/wishlist/#osm-client","title":"OSM Client","text":"<ul> <li>VNF/NSD config params Day 2</li> <li>NSD Lifcecylce</li> <li>NST support</li> </ul>"},{"location":"contributing/wishlist/#nfv-api","title":"NFV API","text":""},{"location":"contributing/wishlist/#nfv-web","title":"NFV WEB","text":""},{"location":"contributing/wishlist/#3rd-party-connectivity","title":"3rd party connectivity","text":""},{"location":"contributing/wishlist/#flowone-connector","title":"FlowOne connector","text":""},{"location":"contributing/wishlist/#openstack-connector","title":"Openstack connector","text":""},{"location":"contributing/wishlist/#kubernetes-connector","title":"Kubernetes connector","text":""},{"location":"contributing/wishlist/#centrallog","title":"CentralLog","text":"<ul> <li>Events from TMF to be written to Central Log</li> </ul>"},{"location":"contributing/wishlist/#authentication","title":"Authentication","text":""},{"location":"naas/exposed_apis/","title":"Supported TMFORUM exposed APIs","text":"Endpoint Title Description Version /tmf-api/serviceCatalogManagement/v4 633 Service Catalog Management Provides a catalog of services. 4.0.0 /tmf-api/productCatalogManagement/v4/ 620 Product Catalog Management Provides a catalog of products. 4.0.0 /tmf-api/productOrderingManagement/v4/ v622 Product Ordering Provides a standardized mechanism for placing a product order. 4.0.0 /tmf-api/resourceCatalogManagement/v4 634 Resource Catalog Management This is Swagger UI environment generated for the TMF Resource Catalog Management specification. 4.0.0 /tmf-api/serviceInventory/v4 638 Service Inventory Management Provides a consistent/standardized mechanism to query and manipulate the Service inventory. 4.0.0 /tmf-api/serviceOrdering/v4 641 API ServiceOrdering Provides a standardized mechanism for managing Service Order. 4.0.0 /tmf-api/serviceQualityManagement/v2 657 Service Quality Management This is Swagger UI environment generated for the TMF Service Quality Management specification. 2.0.0 /tmf-api/partyRoleManagement/v4/ 669 Party Role Management This is Swagger UI environment generated for the TMF Party Role Management specification. 4.0.0 /tmf-api/party/v4/organization 632 API Party Provides standardized mechanism for party management such as creation, update, retrieval, deletion and notification of events. 4.0.0 /tmf-api/agreementManagement/v2/ 651 Agreement Management T his is Swagger UI environment generated for the TMF Agreement Management specification. 2.0.0 /tmf-api/resourceOrderingManagement/v4 652 Resource Order Management-v4.0.0 This is Swagger UI environment generated for the TMF 652-Resource Order Management-v4.0.0 specification. 4.0.0 /tmf-api/accountManagement/v4 666 Account Management This is Swagger UI environment generated for the TMF Account Management specification. 4.0.0 /tmf-api/customerManagement/v4 629 Customer Management TMF Customer Management 4.0.0 /tmf-api/userinfo 691 Federated ID TMF Federated ID 1.0.0 /tmf-api/ServiceActivationAndConfiguration/v3/ 640 API Service Activation and Configuration Provides the ability to activate and configure Services. 3.0.0 /tmf-api/alarmManagement/v4/ 642 API Alarm 4.0.0 /tmf-api/serviceTestManagement/v4 653 Service Test Management Provides the ability to manage tests of provisioned Services. 4.0.0 /tmf-api/resourceInventoryManagement/v4 639 API Resource Inventory Management Provides the ability to manage Resources. 4.0.0 /tmf-api/lcmrulesmanagement/v1/ LCM Rules Custom API environment for LCM Rules 1.0.0 /tmf-api/resourcePoolManagement/v1 685 Resource Pool Management Resources that can be reserved are only in one pool. 1.0.0 /tmf-api/geographicSiteManagement/v5 674 Geographic Site Management Covers the operations to manage sites that can be associated with entities 5.0.0"},{"location":"naas/gst_to_tmf/","title":"Generic Slice Template as a Service Specification","text":""},{"location":"naas/gst_to_tmf/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>GSMA Generic Slice Template (GST) Defines customer-oriented service requirements, E.g. Availability, Area of service, delay tolerance, etc. and attempts to narrow down the gap between (network) service customers and vendors</p> <p>Moreove it Proposes standardized Network Slice Templates (NESTs) to target specific use cases</p> <p>In OpenSlice we made an effort and translated the GST to a Service Specification model. So Service Designers can use it as a template to design a new Service.</p> <p>The image illustrates the relationship between the GSMA Generic Slice Template (GST), TM Forum Service Specification, and how they are utilized within OpenSlice to offer network services.</p> <p></p> <p>The GST to TM Forum via OpenSlice:</p> <pre><code>    * GST Attributes List: A comprehensive list of service attributes, such as availability, delay tolerance, downlink throughput, energy efficiency, isolation level, mission-critical support, and many others.\n    * TMF Service Specification: Demonstrates the transformation of GST attributes into a TM Forum service specification, showing JSON code snippets that define service parameters.\n    * Offered Service based on GST: Represents the final offered service, an example of a GST-based service shown as an entry in a catalog, ready to be consumed by customers.\n</code></pre> <p>What was our flow:</p> <pre><code>* Started with defining service requirements and attributes using GST.\n* Translated these GST attributes into a formal TM Forum service specification.\n* Service Offering in OpenSlice: The service specification is then used to create and offer a specific network service within OpenSlice, available for customer selection and deployment.\n</code></pre>"},{"location":"naas/gst_to_tmf/#probe-further","title":"Probe further","text":"<p>See v9 of the  GST model in GSMA here</p>"},{"location":"naas/introduction/","title":"Network as a Service (NaaS)","text":"<p>This section describes some core concepts for Delivering Network as a Service in OpenSlice. There are many articles and reports on the subject like:</p> <ul> <li>TMF909 API Suite Specification for NaaS</li> <li>TMF926A Connectivity_as_a_Service </li> <li>TMF931-Open_Gateway_Onboarding_and_Ordering_Component_Suite</li> <li>GSMA Open Gatewy initiative</li> </ul> <p>In general Network as a Service (NaaS) is a  service model that allows users to consume network infrastructure and services , similar to how they would consume other cloud services like Software as a Service (SaaS) or Infrastructure as a Service (IaaS). NaaS abstracts the complexity of managing physical network infrastructure, providing users with virtualized network resources that can be dynamically allocated and managed through software.</p>"},{"location":"naas/introduction/#openslice-and-naas","title":"OpenSlice and NaaS","text":"<p>OpenSlice makes extensive use of TMFORUM's models and APIs. Therefore if one is familiar with TMF APIs the terminology and ideas are the same.</p> <p>To deliver NaaS we need to incorporate various APIs (see TMF909 API Suite Specification for NaaS). OpenSlice implements various TMF APIs to deliver NaaS and support the  lifecycle functions required to manage the network capabilities exposed as Network as a Service and managed by operational domains.</p>"},{"location":"naas/introduction/#probe-further","title":"Probe further","text":"<ul> <li>For a complete list of supported APIs, see Supported APIs</li> <li>Check the defined user roles of OpenSlice in our Terminology</li> </ul>"},{"location":"naas/lcm_intro/","title":"Service Lifecycle management","text":"<ul> <li>Lifecycle Management: The orchestration framework handles updates, scaling, and any necessary modifications throughout the service lifecycle.</li> </ul>"},{"location":"naas/resource_catalog/","title":"OpenSlice Resource Catalog:","text":"<pre><code>* Resource Specifications: Defines the underlying resources required to deliver services, such as network components, servers, and software.\n* Resource Availability: Tracks the availability and status of resources to ensure efficient service delivery.\n</code></pre>"},{"location":"naas/service_catalog/","title":"OpenSlice Service Catalogs","text":"<p>OpenSlice offers complete management of  Service Catalogs.</p>"},{"location":"naas/service_catalog/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>OpenSlice offers complete management of  Service Catalogs which offer to end users:</p> <ul> <li>Service categories: Lists the available services, including their specifications and performance metrics.</li> <li>Service Bundles: Combines multiple services into a single offering to provide added value to customers.</li> </ul> <p>Service Catalogs contain Service Specifications (organized in Service Categories) exposed to users for Service Orders.</p>"},{"location":"naas/service_catalog/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following. Service catalogs and categories exposed in Service marketplace. </p> <p>In the menu the administrator can manage the Service Catalogs and Categories.</p> <p></p>"},{"location":"naas/service_catalog/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n\nendpoint examples:\n\n/serviceCatalogManagement/v4/serviceCatalog List or find ServiceCatalog objects\n/serviceCatalogManagement/v4/serviceCategory List or find ServiceCategory objects\n\n</code></pre>"},{"location":"naas/service_catalog/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition:  Service Template thus create a template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> <li>Service Catalog Integration: Add to Service Catalog the XXXX service  with all relevant details.</li> <li>Service Delivery/Order: Provision Service by Using the orchestration system to provision and configure the XXXX service based on customer orders.</li> </ul>"},{"location":"naas/service_catalog/#probe-further","title":"Probe further","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Catalog and Categories here</li> </ul>"},{"location":"naas/service_inventory/","title":"Service Inventory","text":"<p>Service Inventory contains refences to running services that realize a Service Order</p>"},{"location":"naas/service_inventory/#intended-audience-service-designers-openslice-administrators-users","title":"Intended Audience: Service Designers, OpenSlice administrators, Users","text":"<p>The Service Inventory is a repository that maintains detailed records of all active services and the underlying resources that support them. It acts as a central repository, tracking the lifecycle of each service from provisioning to decommissioning, and includes references to the specific virtual and physical resources that realize the service, such as servers, network components, storage, and software instances. </p> <p>This inventory enables real-time visibility into the status, configuration, and dependencies of each service, facilitating effective management, troubleshooting, and optimization. </p> <p>By providing a view of the active services, the Service Inventory includes services/resource allocation, and ensures that services are delivered in alignment with the inital requst. </p>"},{"location":"naas/service_inventory/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Inventory and any active Services (reconfigure or terminate).Various examples in this document will guide you to the usage and the management of the Services in Service Inventory.</p>"},{"location":"naas/service_inventory/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-638-ServiceInventoryManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceInventory/v4/service List or find Service objects</p>"},{"location":"naas/service_inventory/#probe-further","title":"Probe further","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_ordering/","title":"Service Ordering","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders.</p>"},{"location":"naas/service_ordering/#intended-audience-service-designers-openslice-administrators","title":"Intended Audience: Service Designers, OpenSlice administrators","text":"<p>The Service Order process is a structured sequence of steps initiated by a customer's Service Order request for a specific service, aimed at delivering and activating the desired service or services (if it is a service bunlde), as well as its related services. It begins with the customer submitting a service request through OpenSlice Services portal or the Service Order API, specifying the necessary details such as service specification, configurations, and any specific requirements.</p> <p>The request is then validated and verified for completeness and eligibility by an administrator which marks the Service Order as ACKNOWLEDGED otherwise it rejects it. </p> <p>Once ACKNOWLEDGED, the service order is processed by OpenSlice orchestration system (OSOM), which schedules/automates the provisioning of the required resources and configurations, coordinating across various components such as MANO controlers for virtual network functions (VNFs), or Containerized controllers  or any 3rd party controllers or services or even physical infrastructure. The OpenSlice orchestration system ensures that all dependencies are managed and that the service is correctly configured.</p> <p>After provisioning, the service is activated and handed over to the customer, . This end-to-end process ensures a seamless, efficient, and automated delivery of services, enhancing customer satisfaction and operational efficiency.</p> <p>Ongoing monitoring and other actions can be performed by the Life Cycle management rules</p> <p>Future developments:  In future releases it might be possible the ongoing monitoring and support provided to ensure continuous performance and reliability. The service could undergoe a series of tests to ensure it meets the specified performance metrics and SLAs before delivering</p>"},{"location":"naas/service_ordering/#ui-management","title":"UI management","text":"<p>Through the menu and dedicated forms the administrator can manage the Service Orders. Various examples in this document will guide you to the usage and the management of the Service Orders.</p>"},{"location":"naas/service_ordering/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-641-ServiceOrdering-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceOrdering/v4/serviceOrder List or find ServiceOrder objects</p>"},{"location":"naas/service_ordering/#probe-further","title":"Probe further","text":"<ul> <li>See Ordering Services from catalogs</li> <li>See Service Design</li> </ul>"},{"location":"naas/service_spec/","title":"OpenSlice Service Specification","text":"<p>OpenSlice offers complete management of Service Specifications.</p>"},{"location":"naas/service_spec/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Specification is an entity that describes a service offering. There are two types of Service Specifications:</p> <ul> <li>Resource Facing Service Specification</li> <li>Customer Facing Service Specification</li> </ul>"},{"location":"naas/service_spec/#resource-facing-service-specification","title":"Resource Facing Service Specification","text":"<p>Is a Service that It exposes a resource Specification as a Service. (For example expose a Network Service Descriptor as a Service)</p>"},{"location":"naas/service_spec/#customer-facing-service-specification","title":"Customer Facing Service Specification","text":"<p>Customer Facing Service Specifications - or also CFSSpec (organized in Service Categories) are exposed to users for Service Orders. Usually it exposes other CFSSpec(as a Service Bundle) or other RFSSpecs</p>"},{"location":"naas/service_spec/#definition","title":"Definition","text":"<p>Usually a Service Specification has the following aspects:</p> <ul> <li>Name, Description, Version</li> <li>Marked as a Service Bundle: Combines multiple services into a single offering to provide added value to customers.</li> <li>if is is a Bundle then you must add Related Service Specifications</li> <li>If it is a Resource Facing Service Specification has multiple related Resource Facing Service Specifications</li> <li>Characteristics: a list of service characteristics and their type (TEXT, INTEGER, etc)</li> <li>Also they can be exposed as \"Configurable\" so to allow to end-users during the Service Order to select or type values</li> <li>A logo, displayed if needed in the Service Marketplace</li> <li>Any attachments that further help the user</li> <li>Life Cycle Rules that determine the behavior of the Service and instrument the Service Orchestrator. More on Life Cycle Rules here</li> </ul> <p>Service Designers can create a Service Specification from scratch or use some templates:</p> <pre><code>* Create a Service based from a Network Service Descriptor (NSD)\n* Create a Service based on a Kubernetes Operator\n* Create a Service based on the GSMA GST - Generic Slice Template\n</code></pre>"},{"location":"naas/service_spec/#ui-management","title":"UI management","text":"<p>In the UI this looks like the following.</p> <p>Through the menu and dedicated forms the administrator can manage the Service Specifications. Various examples in this document will guide you to the usage and the design of the services.</p>"},{"location":"naas/service_spec/#api-exposed","title":"API exposed","text":"<p>When installing OpenSlice the API endpoints can be browsed at: </p> <pre><code>[YOURDOMAIN]/tmf-api/swagger-ui/index.html?urls.primaryName=tmf-api-633-ServiceCatalogManagement-v4.0.0\n</code></pre> <p>endpoint examples:</p> <p>/serviceCatalogManagement/v4/serviceSpecification List or find ServiceSpecification objects</p>"},{"location":"naas/service_spec/#example-use-case","title":"Example Use Case","text":"<p>Scenario: A service provider wants to offer a new managed XXXX service to enterprise customers.</p> <ul> <li>Service Definition:  Create a service specification template for the XXXX service, including specifications for bandwidth, network features, and performance metrics.</li> </ul>"},{"location":"naas/service_spec/#probe-further","title":"Probe further","text":"<ul> <li>Read the model of Service Catalogs in TMF TMF633 Service Catalog API User Guide v4.0.0</li> <li>Check a demo of the API here</li> <li>Check a demo of the Service Specifications in Catalog and Categories here (You need to login - see main guide page)</li> <li>Check the GSMA GST</li> </ul>"},{"location":"naas/so_intro/","title":"Service Orchestration","text":"<ul> <li>Service Orchestration: The orchestration engine evaluates the request, determines the necessary resources, and initiates the automated workflows.It interacts with underlying controller components (e.g. 5G Core, Radios, Containerized controllers, NFV, SDN controllers ) to provision and configure the required network functions and connectivity.</li> </ul>"},{"location":"naas/so_intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>OpenSlice end-to-end (E2E) service orchestration framework is designed to manage and automate the entire lifecycle of services across multiple domains and technologies. For delivering, Network as a Service (NaaS) OpenSlice automates and manages the entire lifecycle of network services, from provisioning to monitoring and decommissioning, while ensuring seamless integration, operation, and delivery of services from the initial request to the final delivery, spanning all involved components and layers.</p> <p>This section provides an overview of the Service Orchestration process</p>"},{"location":"naas/nfv/nfvservices/","title":"NFV Services","text":"<p>NFV Services are managed through a dedicate UI the NFV portal (eg http://portal.openslice.io/nfvportal)</p> <p>Users are able through this portal to manage their NFV artifacts towards the NFVO, ( for example onboard VNFs and NSDs to a target OSM)</p> <p>Openslice NFV Services target to accommodate the following envisaged user roles. All users are assumed to be Authenticated:</p> <ul> <li>NFV developer: This role is responsible to upload VNF and NSD Descriptors in the Openslice services towards NFVO like OSM</li> <li>Services administrator: This role represents the user that are responsible for maintenance of the Openslice services</li> </ul> <p>(obsolete: )</p> <ul> <li>Testbed provider: This role represents users that are responsible for testbed administration, configuration, integration, adaptation, support, etc</li> <li>Experimenter: This role represents the user that will utilize our services and tools to deploy an experiment. That is the experiment description in terms of e.g.: NSD (Network Service Descriptor) or TOSCA Specification (in future versions)</li> </ul> <p>Finally an anonymous user role exists who has some really simple usage scenarios (e.g. signup through the portal)</p> <p>During the onboarding process the following occurs:</p> <p>\u2022 A NFV developer submits a NFV archive (VNF or NSD) (he can later manage if needed some metadata) \u2022 The administrator can manage the NFV artifact (e.g. edit it) \u2022 The administrator On-Boards the NFV artifact to the target MANO \u2022 The administrator can optionally mark the NFV: o As public in order to be publicly visible by all portal users o As Certified which means this is certified by a certain entity</p>"},{"location":"naas/nfv/nfvservices/#request-a-new-nsd-deployment-this-is-different-in-comparison-to-services","title":"Request a new NSD deployment (this is different in comparison to Services)","text":"<p>A developer requests a new network service deployment (which NSD, tentative dates, target infrastructure, etc.). The request is marked as UNDER_REVIEW</p> <ul> <li>The administrator is notified about the new request and he has the following options:</li> <li>Schedule the deployment for the requested dates or propose other dates. The request is marked as SCHEDULED</li> <li>Reject the request for some reason. The Request is marked as REJECTED</li> <li>Deploy the request to target VIM(s). The Request is marked as RUNNING</li> <li>Finalize the deployment and release resources. The Request is marked as COMPLETED</li> <li>every change of the request-lifecycle the experimenter is notified.</li> </ul>"},{"location":"service_design/intro/","title":"Service Design in OpenSlice","text":"<p>This section offers details on how to design Service Specifications and expose them in Service Catalogs</p>"},{"location":"service_design/intro/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Service Designers create detailed service specifications, which are then managed and exposed in service catalogs. These services are integrated into OpenSlice E2E service orchestration framework to automate and optimize the delivery of network services.</p> <p>OpenSlice can be used to design service specifications for various services, even not networking related services. Here we cover how service designers can expose services related to the NFV world and the containerized world.</p>"},{"location":"service_design/intro/#probe-further","title":"Probe further","text":"<ul> <li>Design and expose services based on containerized resources via the Kubernetes Operator pattern</li> <li>Design and expose services based on NFV artifacts</li> </ul>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/","title":"Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>To illustrate the powerful concept of Kubernetes operators and how they can be utilized to offer a service through OpenSlice, let's provide an example of a \"Calculator as a Service.\" </p> <p>This example will demonstrate the flexibility and capabilities of Kubernetes operators in managing custom resources and automating operational tasks.</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#offering-calculator-as-a-service-through-openslice","title":"Offering \"Calculator as a Service\" through OpenSlice","text":"<ul> <li>We have a service that can accept two integers and an action (SUM, SUB, etc) and returns a result</li> <li>We would like to offer it as a Service through OpenSlice</li> <li>So when a user orders it with some initial parameters, OpenSlice will create it and return the result</li> <li>Also while the service is active, we can do further calculations, until we destroy it.</li> </ul> <p>Assume the following simple CRD of a calculator model accepting two params (spec section) and an action and returning a result (status section)</p> <p>The controller (the calculator code) is implemented in any language and is installed in a Kubernetes cluster</p> <pre><code>\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  name: mycalculators.examples.osl.etsi.org\nspec:\n  group: examples.osl.etsi.org\n  names:\n    kind: MyCalculator\n    plural: mycalculators\n    singular: mycalculator\n  scope: Namespaced\n  versions:\n  - name: v1alpha1\n    schema:\n      openAPIV3Schema:\n        properties:\n          spec:\n            properties:\n              parama:\n                type: integer\n              paramb:\n                type: integer\n              action:\n                type: string\n            type: object\n          status:\n            properties:\n              result:\n                type: integer\n              status:\n                type: string\n            type: object\n        type: object\n    served: true\n    storage: true\n    subresources:\n      status: {}\n</code></pre> <p>Request to the cluster (through e.g. kubectl apply)</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n  name: mycalculator.examples.osl.etsi.org\nspec:\n  parama: 170\n  paramb: 180\n  action: 'SUM'\n\n</code></pre> <p>Response</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n\u00a0 creationTimestamp: '2023-12-05T12:26:07Z\u2019\n\n&lt;snip&gt;\n\nstatus:\n\u00a0 result: 350\n\u00a0 status: CALCULATED\nspec:\n\u00a0 action: SUM\n\u00a0 parama: 170\n\u00a0 paramb: 180\n\n</code></pre> <p>To perform this through OpenSlice as a Service Specification ready to be ordered we need to do the following:</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#crd-is-saved-automatically-as-resource-specification","title":"CRD is saved automatically as Resource Specification","text":"<p>As soon as the CRD is deployed in the cluster (e.g. by your admin via kubctl or via any installation through the internet) it is automatically transformed and is available in OpenSlice catalogs as a Resource Specification.</p> <ul> <li>See also the fully qualified name of the resource specification. <ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@docker-desktop@https://kubernetes.docker.internal:6443/</li> <li>The resource specification name is quite unique, so you can install the CRD in many clusters around the internet. Each CRD on each cluster will appear here, for example:<ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@default_cluster@https://10.10.10.8:6443/</li> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@edge1_cluster@https://172.16.10.10:6443/</li> </ul> </li> <li>Having this OpenSlice can manage resources in multiple clusters</li> </ul> </li> </ul> <p></p> <p>See also the detailed characteristics. See how OpenSlice makes all characteristics automatically flat and expanded with key-value style</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-to-users","title":"Expose to Users","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#start-by-creating-a-resourcefacingservicespecification","title":"Start by Creating a ResourceFacingServiceSpecification","text":"<p>From the UI menu create a new Service Specification</p> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#creation-of-crd-related-characteristics","title":"Creation of CRD-related characteristics","text":"<ul> <li>We need now to adjust some characteristics of this CRD as Resource Specification.</li> <li>OpenSlice transalted automatically the CRD spec in a flat list of characteristics.So the \"spec\" section from the original yaml for example, is now unfold into: spec, spec.parama, spec.paramb, etc. the same for \"status\" object</li> <li> <p>We need to make OpenSlice aware of when the service will be active. </p> <ul> <li>So we go to characteristic _CR_CHECK_FIELD and we define that the field that shows the status of the service is the characteristic \"status.status\" (is a text field) </li> <li>Then we go to _CR_CHECKVAL_AVAILABLE and we define the value CALCULATED, which signals the following: When the characteristic \"status.status\" has the value \"CALCULATED\" then OpenSlice will mark the underlying service as \"ACTIVE\"</li> <li>We need also to define the yaml file that OpenSLice will use to create the new resource in the kubernetes cluster</li> <li>We insert the YAML in the characteristic _CR_SPEC</li> </ul> <p>the _CR_SPEC is: </p> </li> </ul> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n  name: mycalculator.examples.osl.etsi.org\nspec:\n  parama: 170\n  paramb: 180\n  action: 'SUM'\n\n</code></pre> <p></p> <p>However the values are fixed. How do we allow a user to pass parameters through OpenSlice</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-in-catalog","title":"Expose in Catalog","text":"<p>Create a new CustomerFacingServiceSpecification</p> <pre><code>- Go to the menu Service Specification&gt;New Service Specification\n- Create a service My Calulator and mark it as a Bundle\n- Go to Service Specification Relationships and add MyCalculatorRFS\n- The service will be automatically transformed to a \"CustomerFacingServiceSpecification\"\n- Add the following characteristics as the image shows:\n</code></pre> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#allow-users-to-pass-new-values-through-openslice","title":"Allow users to pass new values through OpenSlice","text":"<p>We need to Create LCM rules in CustomerFacingServiceSpecification:</p> <pre><code>- The goal of the rules is to allow the user to pass parameters to the actual resource towards the cluster.\n- we will create one rule that will pass the parameters just before creating the service (PRE_PROVISION phase)\n- we will create one rule that will pass the parameters while the service is active (SUPERVISION phase)\n- The rules will be the same\n</code></pre> <p></p> <p>If we see one rule it will look like the following:</p> <p></p> <ul> <li>We need to change the _CR_SPEC characteristic of the referenced ResourceFacingServiceSpecification</li> <li>First bring a block from Service&gt;Relationships&gt;Service Refs and drop the \"Service MyCalculatorRFS\" block</li> <li>Then add a list block from Lists</li> <li>Then add the block that modifies a referenced characteristic from Service&gt;Relationships&gt;Service Refs the block \"Set value to characteristic of a Referenced Service\"</li> <li>Add a block for text _CR_SPEC </li> <li>We use a block that changes a String according to variables Text&gt;\"A formatted text replacing variables from List\"</li> <li>See that we have as Input string the YAML string lines<ul> <li>see that parama, paramb has a %d (they accept integers), action is %s (accepts a string)</li> <li>See that the variables tha will replace the %d, %d and %s are an list<ul> <li>the first %d will be replaced with the value from characteristic spec.parama</li> <li>the second %d will be replaced with the value from characteristic spec.paramb</li> <li>the %s will be replaced with the value from characteristic spec.action</li> </ul> </li> </ul> </li> </ul> <p>If we see the SUPERVISION rule it will look like the following:</p> <ul> <li>It contains also the Result field, which takes the value from the referenced service</li> <li>Add a block for the Result field from Service&gt;Number blocks</li> <li>Add a  str to int block from Number blocks</li> <li>Add Service&gt;Relationships&gt;Service Refs and drop the input block [Service MyCalculatorRFS] \"Get Service details from current context running service\" and select from the drop down the \"serviceCharacteristicValue\"</li> <li>Add as name the \"status.result\" </li> </ul> <p></p> <p></p> <p>Expose it then to a catalogue for orders through the Service Categories and Service Catalogs</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#order-the-service","title":"Order the Service","text":"<p>When a user orders the service, it will look like this:</p> <p></p> <ul> <li>After the Service Order we have 2 services in service inventory on CFS and on RFS. Both have references to values</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The Actual resources are running in the Kubernetes cluster managed by OpenSlice</li> <li>The result is in the characteristic status.result of the running service</li> </ul> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#modify-the-running-service","title":"Modify the running service","text":"<p>The user can modify the service</p> <p></p> <ul> <li>After a while the update is applied to the cluster, the controller will pick up the resource update and patch the resource</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The result will be available to the respective characteristic \"Result\" after a few seconds, as need to go through various steps (OpenSlice orchestrator, down to kubernetes, to Calculator controller and back)</li> </ul> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/","title":"Expose and manage Kubernetes Custom Resource Definitions (Operators) in a Kubernetes Cluster","text":"<p>OpenSlice is capable of exposing Kubernetes Resources and Definitions as Service Specifications</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>OpenSlice is capable to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OpenSlice services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>OpenSlice capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <ul> <li>OpenSlice can expose CRs in service catalogs, facilitating their deployment in complex scenarios.</li> <li>These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#approach","title":"Approach","text":"<p>OpenSlice in general is responible for exposing service specifications  which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. </li> <li>OSOM creates a Resource in OSL Resource inventory and requests new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OpenSlice Resource Inventory need to be aware of these events.</p> <p>When installing OpenSlice you can configure at least one management cluster. OpenSlice connects via a provided kubeconf</p> <ul> <li>On Start up OSL  tries to register this cluster and context to OSL catalogs.</li> <li>After the registration of this cluster as a Resource in OSL OSL is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL</li> <li>Resources created by OpenSlice have labels, e.g. (org.etsi.osl.*)</li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>A CRD by default is exposed as a Resource Specification</p> <p>To ensure unique names across the clusters that OpenSlice can manage, the name of a CRD is constructed as follows:</p> <p><code>Kind @ ApiGroup/version @ ContextCluster @ masterURL</code></p> <p>For example you might see resource Specifications like:</p> <pre><code>- ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n- ```IPAddressPool@metallb.io/v1beta1@kubernetes@https://10.10.10.144:6443/```\n- ```Provider@pkg.crossplane.io/v1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p>All attributes of the CRD are translated into characteristics</p> <p>The following specific characteristics are added:</p> <pre><code>    - _CR_SPEC: Used for providing the json Custom Resource description to apply\n    - _CR_CHECK_FIELD: Used for providing the field that need to be checked for the resource status\n    - _CR_CHECKVAL_STANDBY: Used for providing the equivalent value from resource to signal the standby status\n    - _CR_CHECKVAL_ALARM: Used for providing the equivalent value from resource to signal the alarm status\n    - _CR_CHECKVAL_AVAILABLE: Used for providing the equivalent value from resource to signal the available status\n    - _CR_CHECKVAL_RESERVED: Used for providing the equivalent value from resource to signal the reserved status\n    - _CR_CHECKVAL_UNKNOWN: Used for providing the equivalent value from resource to signal the unknown status\n    - _CR_CHECKVAL_SUSPENDED: Used for providing the equivalent value from resource to signal the suspended status\n</code></pre> <ol> <li> <p>Create a new Service Specification and use this Resource Specification in Resource Specification Relationships</p> <ul> <li>Then the Service Specification is saved as ResourceFacingServiceSpecification</li> </ul> <p>1.1. You can give at this stage values to the characteristics:</p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>1.2. You can now create LCM rules if you wish</p> </li> <li> <p>Create a new Service Specification and use the Resource Facing Service Specification in Service Specification Relationships</p> <ul> <li>Then the Service Specification is saved as CustomerFacingServiceSpecification</li> </ul> <p>2.1. You can give at this stage values to the characteristics: </p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>2.2. You We can create LCM rules for this new Service Specification</p> <p>2.3. You Expose configurable values for users to configure during service order</p> </li> </ol> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM - OpenSlice Service Orchestrator, checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#mapping-the-cr-lifecycle-that-is-defined-in-the-crd-with-the-openslice-tmf-based-resource-lifecycle","title":"Mapping the CR lifecycle that is defined in the CRD with the OpenSLice (TMF-based) resource Lifecycle","text":"<p>OpenSlice adds automatically as we see the following characteristics: </p> <pre><code>    - _CR_CHECK_FIELD\n    - _CR_CHECKVAL_STANDBY\n    - _CR_CHECKVAL_ALARM\n    - _CR_CHECKVAL_AVAILABLE\n    - _CR_CHECKVAL_RESERVED\n    - _CR_CHECKVAL_UNKNOWN\n    - _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>These characteristics instrument OpenSlice services to manage and reflect the lifecycle of a kubernetes resource to OpenSlice's (TMF based) lifecycle</p> <ul> <li>_CR_CHECK_FIELD: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>_CR_CHECKVAL_STANDBY: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_ALARM: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_AVAILABLE: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_RESERVED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_UNKNOWN: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#probe-further","title":"Probe further","text":"<ul> <li>See examples of exposing operators via OpenSlice:<ul> <li>Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice</li> </ul> </li> <li>Learn more about CRIDGE, the service in OSL that manages CRDs/CRs</li> </ul>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/","title":"Example: Offer Jenkins as a Service via Openslice","text":"<p>Before reading this example please make sure that you went through the Design Helm as a Service </p> <p>We will use the <code>Kind: Application</code> of ArgoCD and create a  ResourceFacingServiceSpecification for Jenkins</p> <pre><code>1. Go to Service Specifications\n2. Create New Specification\n3. Give a Name, eg. jenkinsrfs\n4. Go to Resource Specification Relationships\n5. Assign ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p></p> <p>Focus now on the characteristics configuration.</p> <p>First we need to map the lifecycle of ArgoCD Application to TMF Resource State</p> <p></p> <p>In ArgoCD the field health.status has the value that we need to check (Healty, Progressing, etc)</p> <p>The _CR_SPEC can be designed first in a YAML or json editor. Let's see a YAML definition:</p> <p>```</p> <p>apiVersion: argoproj.io/v1alpha1 kind: Application metadata:   finalizers:   - resources-finalizer.argocd.argoproj.io   name: openslice-jenkins   namespace: argocd spec:   project: default   destination:     namespace: opencrdtest     name: in-cluster   source:     repoURL: https://charts.jenkins.io     targetRevision: 4.6.1     chart: jenkins     helm:       values: |         controller:          service:          type: ClusterIP   syncPolicy:     automated:       prune: true       selfHeal: true       allowEmpty: false     syncOptions:     - Validate=false     - CreateNamespace=true     - PrunePropagationPolicy=foreground     - PruneLast=true     - RespectIgnoreDifferences=true ```</p> <p>NOTICE</p> <p>On each installation OSOM will change the name of the resource in order to be unique (will have a UUID)</p> <p><code>name: openslice-jenkins</code> </p> <p>destination namespace that ArgoCD will use is the name <code>opencrdtest</code></p> <p><code>destination:     namespace: opencrdtest</code></p> <p>This implies that ArgoCD installs the Jenkins always in the same namespace</p> <p>To avoid this we will create a simple pre-provision rule to change the namespace properly</p> <p>See the following image: </p> <p></p> <ol> <li>Drag-Drop the _CR_SPEC characteristic of jenkinsrfs from the Service&gt;Text blocks</li> <li>Drag-Drop Text&gt;Formatted text block</li> <li>Drag-Drop Text&gt;Multi-line text input block</li> <li>Copy paste the YAML text</li> <li>Change the spec: destination:namespace to the value %s</li> <li>Drag-Drop Lists&gt;Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context&gt;Current Service Order block and select the id. Connect it to the List</li> <li>Save the PRE_PROVISION Rule</li> </ol>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#expose-the-service-to-your-users","title":"Expose the service to your users","text":"<p>Expose then as CustomerFacingServiceSpecification by using the previous RFSS as Service Specification Relationship  1. Create a Jenkins service and mark as Bundle and save it  2. Go to Service Specification Relationships and assign Jenkinsrfs 3. Add also a Logo if you wish</p> <p></p> <p></p> <p>Expose it now to a Category and a Catalog to be available for ordering.</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#order-the-service","title":"Order the service","text":"<p>Order the service from the catalog. </p> <p>Soon the order will be completed and the Services will be active</p> <p></p>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#how-to-access-the-jenkins-installation","title":"How to access the Jenkins installation:","text":"<p>From the Supporting services of the Service Order, select the ResourceFacingService (jenkinsrfs)</p> <p>The ResourceFacingService has also supporting resources in resource inventory.</p> <p></p> <p>One is the resource reference to the application (e.g. cr_tmpname...), the other is a secret (e.g. cr87893...). </p> <p>Click to go to the secret resource (This is in the Resource inventory of OpenSlice)</p> <p></p> <p>Use them to login in your Jenkins.</p> <p>Exposing Jenkins to you external is a matter of cluster configuration and request (nodeport, load balancing, etc)! This is not a topic for this example</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/","title":"Expose HELM charts as Service Specifications","text":"<p>Manage Helm charts installations via OpenSlice Service Specifications and Service Orders.</p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. </p> <p>Helm is a tool that automates the creation, packaging, configuration, and deployment of Kubernetes applications by combining your configuration files into a single reusable package</p> <p>At the heart of Helm is the packaging format called charts. Each chart comprises one or more Kubernetes manifests -- and a given chart can have child charts and dependent charts, as well. Using Helm charts:</p> <pre><code>  - Reduces the complexity of deploying Microservices\n  - Enhances deployment speed\n  - Developers already know the technology\n</code></pre> <p>There are many Helm charts and Helm repositories there that are ready to be used</p> <p>Enable loose coupling and more orchestration scenarios</p> <p>Developers create and deploy applications in things they already know (e.g. Helm charts)</p> <p>Use the TMF models as wrapper entities around Helm charts</p> <p>Use OpenSlice to expose them in service catalogs and deploy them in complex scenarios (service bundles) involving also other systems:</p> <pre><code>- Include e.g. RAN controllers, \n- Pass values through life cycle rules from one service to another, \n- Manage multiple Helms in multiple clusters\n</code></pre>"},{"location":"service_design/kubernetes/helm/design_helmaas/#the-installation-of-helm-charts-is-based-on-openslice-crd-support","title":"The installation of HELM charts is based on OpenSlice CRD support","text":"<p>Please read more here</p> <p>For installing HELM charts we will use ArgoCD a well known Kubernetes-native continuous deployment (CD) tool </p> <p>ArgoCD is a Kubernetes-native continuous deployment (CD) tool</p> <p>While just deploying Heml charts is just a scenario for ArgoCD , in future one can exploit it for many things</p> <p>Despite some other tools like FluxCD, it provides also a UI which is useful for management and troubleshooting</p> <p>We will mainly use the CRD of <code>Kind: Application</code> that ArgoCD can manage</p> <p>Before proceeding, install ArgoCD in your management cluster, by following ArgoCD instructions</p> <p>As soon as you install ArgoCD, OpenSlice is automatically aware for specific new Kinds. The one we will use is is the <code>Kind: Application</code> that ArgoCD can manage under the apiGroup argoproj.io</p> <p>Browse to Resource Specifications. You will see an entry like the following:</p> <p><code>Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/</code></p> <p>see image: </p> <p></p>"},{"location":"service_design/kubernetes/helm/design_helmaas/#whats-next","title":"What's next","text":"<p>See the Example: Offer Jenkins as a Service via Openslice </p>"},{"location":"service_ordering/ordering_services/","title":"Service Ordering","text":""},{"location":"service_ordering/ordering_services/#intended-audience-users","title":"Intended Audience: Users","text":""}]}
\ No newline at end of file
diff --git a/public/develop/service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/index.html b/public/develop/service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/index.html
index 20d494db..4846d533 100644
--- a/public/develop/service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/index.html
+++ b/public/develop/service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_design/intro/index.html b/public/develop/service_design/intro/index.html
index 76231650..d14dda2a 100644
--- a/public/develop/service_design/intro/index.html
+++ b/public/develop/service_design/intro/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -1445,9 +1445,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2686,9 +2686,9 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#whats-next" class="md-nav__link">
+  <a href="#probe-further" class="md-nav__link">
     <span class="md-ellipsis">
-      What's next
+      Probe further
     </span>
   </a>
   
@@ -2714,7 +2714,7 @@
 <h2 id="intended-audience-service-designers">Intended Audience: Service Designers</h2>
 <p>Service Designers create detailed service specifications, which are then managed and exposed in service catalogs. These services are integrated into OpenSlice E2E service orchestration framework to automate and optimize the delivery of network services.</p>
 <p>OpenSlice can be used to design service specifications for various services, even not networking related services. Here we cover how service designers can expose services related to the NFV world and the containerized world.</p>
-<h2 id="whats-next">What's next</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li><a href="ExposingKubernetesResources.md">Design and expose services based on containerized resources via the Kubernetes Operator pattern</a></li>
 <li><a href="../nfv/design_nfv_services/">Design and expose services based on NFV artifacts</a></li>
diff --git a/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html b/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html
index c94c903d..56b83942 100644
--- a/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html
+++ b/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
@@ -2849,7 +2849,7 @@
 <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li>
 </ul>
 <hr />
-<h2 id="whats-next">What's next?</h2>
+<h2 id="probe-further">Probe further</h2>
 <ul>
 <li>See examples of exposing operators via OpenSlice:<ul>
 <li><a href="ExposingCRDs_aaS_Example_Calculator.md">Exposing Kubernetes Operators as a Service : Offering "Calculator as a Service" through OpenSlice</a></li>
diff --git a/public/develop/service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/index.html b/public/develop/service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/index.html
index cb79b8e0..366c4a86 100644
--- a/public/develop/service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/index.html
+++ b/public/develop/service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_design/kubernetes/helm/design_helmaas/index.html b/public/develop/service_design/kubernetes/helm/design_helmaas/index.html
index 348129b5..49b3e7c9 100644
--- a/public/develop/service_design/kubernetes/helm/design_helmaas/index.html
+++ b/public/develop/service_design/kubernetes/helm/design_helmaas/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_design/kubernetes/intro/index.html b/public/develop/service_design/kubernetes/intro/index.html
index aaa3af22..07edd101 100644
--- a/public/develop/service_design/kubernetes/intro/index.html
+++ b/public/develop/service_design/kubernetes/intro/index.html
@@ -909,7 +909,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_design/nfv/design_nfv_services/index.html b/public/develop/service_design/nfv/design_nfv_services/index.html
index a44e8dcc..8c7425b3 100644
--- a/public/develop/service_design/nfv/design_nfv_services/index.html
+++ b/public/develop/service_design/nfv/design_nfv_services/index.html
@@ -909,7 +909,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_design_intro/index.html b/public/develop/service_design_intro/index.html
index 450bd5a6..3eb858ac 100644
--- a/public/develop/service_design_intro/index.html
+++ b/public/develop/service_design_intro/index.html
@@ -905,7 +905,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_inventory/index.html b/public/develop/service_inventory/index.html
index baa790de..af5205b4 100644
--- a/public/develop/service_inventory/index.html
+++ b/public/develop/service_inventory/index.html
@@ -910,7 +910,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/service_ordering/ordering_services/index.html b/public/develop/service_ordering/ordering_services/index.html
index 421457ae..c699dca4 100644
--- a/public/develop/service_ordering/ordering_services/index.html
+++ b/public/develop/service_ordering/ordering_services/index.html
@@ -914,7 +914,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/sitemap.xml b/public/develop/sitemap.xml
index cff01126..d60afb23 100644
--- a/public/develop/sitemap.xml
+++ b/public/develop/sitemap.xml
@@ -2,282 +2,287 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
          <loc>https://osl.etsi.org/develop/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/OpenSlice_deployment_examples/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/alarms_actions/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/catalogs/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/config_intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/deployment/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/deploymentCompose/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/deploymentK8s/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/etsi_osl/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/history/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/lcm/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/nfvoconfig/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/ole_keycloak_management/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/portals_intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/role_keycloak_management/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design_intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_inventory/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/terminology/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/under_construction/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/architecture/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/centrallog/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/consumingServicesFromExternalPartners/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/issuemgt/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/messagebus/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/nfvapi/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/oauth/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/osom/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/tmfapi/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/architecture/CRIDGE/CRIDGEforDevelopers/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/contributing/developing/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/contributing/wishlist/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/exposed_apis/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
+         <changefreq>daily</changefreq>
+    </url>
+    <url>
+         <loc>https://osl.etsi.org/develop/naas/gst_to_tmf/</loc>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/introduction/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/lcm_intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/lcm_rules_intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/resource_catalog/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/resource_inventory/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/resource_spec/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/service_catalog/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/service_inventory/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/service_ordering/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/service_spec/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/so_intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/so_servicespec_to_services_kubernetes/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/so_servicespec_to_services_nfv/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/nfv/intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/nfv/nfvcatalogs/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/naas/nfv/nfvservices/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/kubernetes/ExposingKubernetesResources/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/kubernetes/intro/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/kubernetes/helm/design_helmaas/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_design/nfv/design_nfv_services/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>https://osl.etsi.org/develop/service_ordering/ordering_services/</loc>
-         <lastmod>2024-07-05</lastmod>
+         <lastmod>2024-07-06</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 89ed4d86a623b761810764082fba9e271874cbb5..adec834d3bb8e8804c8cd2d91c34918e1672083e 100644
GIT binary patch
literal 755
zcmV<P0u22hiwFn+iHK$b|8r?{Wo=<_E_iKh0M(jZZ__XohVS<)s@|_D6M})d?xO2p
z48*j-wdFadiB*3DAEzJxp5rtr?H$~p<49E<$F&|iZ(g6{bauP5X0(BT+Pj<ao5^%M
z0;hbbU3D}5`Q!fbdVD*-n6<$m#1S=icr&hJY(5sncDtRRj$mbj6CbJqRZS;Y^p(YQ
z@?ku`7}1eBIF!0$X1toGUXZ%+XeJO*cU_dQ0ppuuR-`7UzmOQMFXva&tGAca_m|Um
z)TFOFX{KuFDp&>hH7}($`&n^Pb3iGMEdNaPy#e=Pv;t8=WBlHNivo7iHU^L>votbT
z6jDXH#atnkjMDguEuMEPT?y@C@Jtc^2$DVE!rR6pu;+Zd=Bme3A?ONIyjo-QVb7G#
zD9e=0tv3E(HB14$0kMX?GG4BQl}=W`*l`*kXjMVhwjJ`CQiQNMgg>Y&$9iT5RP8o2
zpM32oLa^F-ihj5fwyuOA$e1vOwhJS<hPpx3lzOPx1~@;-fLD=9gEXXrENDp$E$Oy;
zIXq@~AG}@eNX$-}CmEunoHB=jXv7w56?0&<fJp1ZYn#Q)QZyqQodc<tZLG5ZMQ?N9
zjCPgDtzSGp+<jX1Un?K(4vqMl7a4C1`n8SZy+dUxW<a~uSQ|<Wxn^HdVgb9fHBkzZ
zFLLIrFpB5}J!qUMyZoSJ9W!>EMp@Rm%n>rQ29Q5$0Q7C3<g4G;&4QJCqIgb=4Jgi_
zL;9V80&>|YID_?pl5)Na{~0TLt$O~JN{sz<rrAtu|8OeS?JK3-5CJnC0A-4t$rB!X
zeI!WwFn^JHiaOl>EVjCf9Jac9)Z-r#mMNK`HDd96heFC1u{>N63u#nqB&~IS)h3Hk
zpSa*KrpIH|b00Qgc4Ns%cPG>}7+ZW^e*GpM9FilEjwl7}^z{YYT00zcmgms=_g|@;
l94(76B-`z|sVFkB-(#FR6#gT4_k|GWzX4jZ<h3U!003VuZ0!I5

literal 744
zcmV<E0vG)siwFpSH-}~d|8r?{Wo=<_E_iKh0M(hxZrd;rMfdp%!+Tq9(4uMKI1Afp
z)3j)jv}=N)#u8yZR1W3G-*@zK>|MJlh5`&x6ipmbSHro~{O(}QXa@nccemp=)7f|g
zPWfEB;&%M&=l$ene7Cro*TEpf5jA#rJ1%3aK4#f|zn`LxU}c3<ABqfBNf(&)mDz0i
zVZ68+(b06!mD*!&yjnE9Aa&!>Od+CfyU1Y&##h-qYnq(@Lt?Z(UtG_w-%e)lC$o3d
zq^~<`rb_7w*aY~!$fY*Nd3ILQp=2kPf2R6gfqOPufykjU{%FBP0S9R-1IUzF8W}7K
zsUkgMu8>MbX?(#J&%2E-gmy7_riibCWDmIXw(<z<IUjGh>anR1bcZQksWJL+WJ+h0
zWlH8YJKu#Grhwjn*uqg6FSo)<CktR4aVj5ZRYBHaJES$G2w~TyKd1}GdS(Yy?RGSu
ze8W+MV72p<{ct6$T@FD|V8R&cHjU((>IPMk^-!@6aCwmcuOgKOX-Ef2(2^Qz(rxkF
zy=HhHyj>qi%ubpgGDJt7GKGO?#2Rc7Q((1#NbAE(oy5#iHX|#Y0;!jEERz65Z&Tom
zc9Y1XUp_soKCS!H#)nnch;Q(sz#D^psUyYSp|U9^K)csi8nT95-ItV@!J*lj$OXw4
zIdis|cg{K+YdOhmvvvt5$WR+V{-^=a*MV$JzhjyND|ZWaNsARI&Y**_O+W#uc<>8Y
zAIR?VT~aSt*=yDF52?i1PiHfmBEDXVZT&)q79wDx10WB^nY_Vcua5?je#}2no}&(r
zKZ#A`EQL+v9`*F8f8E#wS|gTED-=>bi*<KLETvJkk+jzRRhuM6eHI0WF+HBDp8B*2
zlN(Dyx;vvT!PxBc`s+9G;E*B`>4+>~tFJHMw%XyKvowd+e_3kEO+-s#3{BYWxv3};
a3BRX2cPRWv@b-id7k>cFI%VyFCIA4#cV|cd

diff --git a/public/develop/terminology/index.html b/public/develop/terminology/index.html
index 35016d2a..b53b6972 100644
--- a/public/develop/terminology/index.html
+++ b/public/develop/terminology/index.html
@@ -912,7 +912,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
diff --git a/public/develop/under_construction/index.html b/public/develop/under_construction/index.html
index b2b5227f..366e97a4 100644
--- a/public/develop/under_construction/index.html
+++ b/public/develop/under_construction/index.html
@@ -905,7 +905,7 @@
   
   
     <li class="md-nav__item">
-      <a href="../naas/gst_to_tmf.md" class="md-nav__link">
+      <a href="../naas/gst_to_tmf/" class="md-nav__link">
         
   
   <span class="md-ellipsis">
-- 
GitLab