From 95df827edda35ef129808c32db33645ebf8abd74 Mon Sep 17 00:00:00 2001 From: Dimitrios <dimit.giannopoulos@upnet.gr> Date: Tue, 2 Jul 2024 12:51:46 +0000 Subject: [PATCH] Deployed 8c27915 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 | 2942 +++++++++++++++++ public/develop/architecture/CRIDGE/img01.png | Bin 0 -> 75595 bytes public/develop/architecture/CRIDGE/img02.png | Bin 0 -> 60481 bytes public/develop/architecture/CRIDGE/img03.png | Bin 0 -> 92748 bytes public/develop/architecture/CRIDGE/img04.png | Bin 0 -> 122391 bytes public/develop/architecture/CRIDGE/img05.png | Bin 0 -> 98384 bytes .../architecture/architecture/index.html | 8 +- .../architecture/centrallog/index.html | 2 +- .../index.html | 2 +- .../develop/architecture/issuemgt/index.html | 2 +- .../architecture/messagebus/index.html | 8 +- public/develop/architecture/nfvapi/index.html | 2 +- public/develop/architecture/nfvweb/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/architecture/tmfweb/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 | 2 +- public/develop/lcm/index.html | 2 +- public/develop/naas/exposed_apis/index.html | 2 +- public/develop/naas/introduction/index.html | 2 +- public/develop/naas/lcm_intro/index.html | 2 +- .../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/resource_catalog/index.html | 2 +- .../naas/resource_inventory/index.html | 2 +- public/develop/naas/resource_spec/index.html | 2 +- .../develop/naas/service_catalog/index.html | 2 +- .../develop/naas/service_inventory/index.html | 2 +- public/develop/naas/service_spec/index.html | 2 +- public/develop/naas/so_intro/index.html | 2 +- .../index.html | 2 +- .../so_servicespec_to_services_nfv/index.html | 2 +- public/develop/nfvcatalogs/index.html | 2 +- public/develop/nfvoconfig/index.html | 2 +- .../ole_keycloak_management/index.html | 2 +- public/develop/search/search_index.json | 2 +- .../index.html | 2 +- .../develop/service_design/intro/index.html | 2 +- .../ExposingKubernetesResources/index.html | 2 +- .../kubernetes/design_helmaas/index.html | 2 +- .../index.html | 2 +- .../kubernetes/intro/index.html | 2 +- .../develop/service_design_intro/index.html | 2 +- public/develop/service_inventory/index.html | 2 +- public/develop/sitemap.xml | 2 +- public/develop/sitemap.xml.gz | Bin 716 -> 714 bytes public/develop/terminology/index.html | 2 +- public/develop/under_construction/index.html | 2 +- 62 files changed, 3003 insertions(+), 61 deletions(-) create mode 100644 public/develop/architecture/CRIDGE/CRIDGEforDevelopers/index.html create mode 100644 public/develop/architecture/CRIDGE/img01.png create mode 100644 public/develop/architecture/CRIDGE/img02.png create mode 100644 public/develop/architecture/CRIDGE/img03.png create mode 100644 public/develop/architecture/CRIDGE/img04.png create mode 100644 public/develop/architecture/CRIDGE/img05.png diff --git a/public/develop/404.html b/public/develop/404.html index 7353f014..c9b7a24b 100644 --- a/public/develop/404.html +++ b/public/develop/404.html @@ -2192,7 +2192,7 @@ <li class="md-nav__item"> - <a href="/develop/architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="/develop/./architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 aa91f30c..804bb45e 100644 --- a/public/develop/OpenSlice_deployment_examples/index.html +++ b/public/develop/OpenSlice_deployment_examples/index.html @@ -2317,7 +2317,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 a73c3fba..36baa946 100644 --- a/public/develop/alarms_actions/index.html +++ b/public/develop/alarms_actions/index.html @@ -2199,7 +2199,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 new file mode 100644 index 00000000..76338e4f --- /dev/null +++ b/public/develop/architecture/CRIDGE/CRIDGEforDevelopers/index.html @@ -0,0 +1,2942 @@ + +<!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/architecture/CRIDGE/CRIDGEforDevelopers/"> + + + + + <link rel="icon" href="../../../images/favicon.png"> + <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.28"> + + + + <title>CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster - 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="#cridge-a-service-to-manage-custom-resources-in-a-kubernetes-cluster" 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"> + + CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster + + </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"> + Configuration/Management + </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> + 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.md" 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_2_4" > + + + <label class="md-nav__link" for="__nav_2_2_4" id="__nav_2_2_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_2_4_label" aria-expanded="false"> + <label class="md-nav__title" for="__nav_2_2_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="../../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--nested"> + + + + <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > + + + <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="false"> + <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="../../../naas/introduction/" 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_3_2" > + + + <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="false"> + <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="../../../naas/service_spec/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Service Specification + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/service_catalog/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Service Catalogs + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/service_inventory/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Service Inventory + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/gst_to_tmf.md" class="md-nav__link"> + + + <span class="md-ellipsis"> + GSMA GST to TMF 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_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="../../../naas/resource_spec/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Resources Specification + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/resource_catalog/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Resources Catalogs + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/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="../../../naas/so_intro/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Introduction + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/lcm_intro/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Service Lifecycle management + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/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="../../../naas/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="../../../naas/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="../../../naas/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="../../../naas/nfv/intro/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Introduction + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../../naas/nfv/nfvcatalogs/" class="md-nav__link"> + + + <span class="md-ellipsis"> + NFV Catalogs + </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/HELM_Installation_aaS_Jenkins_Example/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Design Helm aaService + </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.md" 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/examples/HELM_Installation_aaS_Jenkins_Example.md" 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.md" 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/" 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="../../CRIDGE_cloud_native_intro.md" class="md-nav__link"> + + + <span class="md-ellipsis"> + Introduction + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> + + + <span class="md-ellipsis"> + CRIDGE for Developers + </span> + + + </a> + </li> + + + + + </ul> + </nav> + + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../messagebus/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Message bus + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../osom/" class="md-nav__link"> + + + <span class="md-ellipsis"> + OSOM + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../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="../../tmfapi/" class="md-nav__link"> + + + <span class="md-ellipsis"> + TMF API + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../nfvapi/" class="md-nav__link"> + + + <span class="md-ellipsis"> + NFV API + </span> + + + </a> + </li> + + + + + </ul> + </nav> + + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../tmfweb/" class="md-nav__link"> + + + <span class="md-ellipsis"> + TMF WEB + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../nfvweb/" class="md-nav__link"> + + + <span class="md-ellipsis"> + NFV WEB + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../issuemgt/" class="md-nav__link"> + + + <span class="md-ellipsis"> + Issue management + </span> + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../../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-osl-developers" class="md-nav__link"> + <span class="md-ellipsis"> + Intended Audience: OSL developers + </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="cridge-a-service-to-manage-custom-resources-in-a-kubernetes-cluster">CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster</h1> +<h2 id="intended-audience-osl-developers">Intended Audience: OSL developers</h2> +<blockquote> +<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> +</blockquote> +<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> +<blockquote> +<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> +</blockquote> +<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> +<blockquote> +<p>Why the CRIDGE name? we wanted to build a service that maps TMF models to CRDs; a kind of a <strong>CR</strong>D to TMF br<strong>idge</strong>. Therefore CRIDGE was born</p> +</blockquote> +<h1 id="approach">Approach</h1> +<blockquote> +<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> +</blockquote> +<p>The following image illustrates the approach.</p> +<p><img src="img01.png" width=1024px></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><img src="img02.png" width=800px></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> +<blockquote> +<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> +</blockquote> +</li> +</ul> +<pre><code> apiVersion: apiextensions.k8s.io/v1 + kind: CustomResourceDefinition + metadata: + name: myresource.example.com +</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> +<blockquote> +<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> +</blockquote> +<pre><code> apiVersion: example.com/v1 + kind: Myresource + metadata: + name: example_resource_1 +</code></pre> +<p>In a nutchell:</p> +<ul> +<li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> +<li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> +<li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> +<li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>> The example CRD myresource.example.com allows the creation of custom resources of type Myresource. +> Instances of Myresource are created in various namespaces, each with unique names like example_resource_1. +</code></pre> +</li> +</ul> +<h1 id="handling-more-than-one-clusters">Handling more than one clusters</h1> +<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><img src="img03.png" width=1024px></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> +<blockquote> +<p>A CRD has a globally unique name for example mycrd.example.com. So we need to somehow identify also the different cluster</p> +</blockquote> +<h1 id="awareness-for-crds-and-crs-in-cluster">Awareness for CRDs and CRs in cluster</h1> +<blockquote> +<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> +</blockquote> +<p>The sync process is found in the code and explained by the following picture:</p> +<p><img src="img04.png" width=1024px></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’s 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’s 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’s 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> +<h1 id="deployment-of-a-new-cr-based-on-a-crd">Deployment of a new CR based on a CRD</h1> +<p><img src="img05.png" width=1024px></p> +<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> +<h1 id="expose-crds-as-service-specifications-in-openslice-catalogs">Expose CRDs as Service Specifications in OpenSlice catalogs</h1> +<p>See <a href="ExposingKubernetesResources.md">ExposingKubernetesResources</a></p> +<h1 id="service-orchestration-and-crdscrs">Service Orchestration and CRDs/CRs</h1> +<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> +<blockquote> +<p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p> +</blockquote> +<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> +<hr /> +<h2 id="whats-next">What's next?</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> +</ul> +</li> +</ul> + + + + + + + + + + + + + + </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"> + + + + <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 © 2019-2024 Openslice Project + </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/architecture/CRIDGE/img01.png b/public/develop/architecture/CRIDGE/img01.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f6f73dd21ff94572fd411c68e31a2915426f70 GIT binary patch literal 75595 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´j->fT@7!ntGsUyZ~A^^&__^ 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	s<)U2;^?h(nRe`df{_y5c)AWChU}9%E1q( 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 H5W)Kg&~?>> literal 0 HcmV?d00001 diff --git a/public/develop/architecture/CRIDGE/img02.png b/public/develop/architecture/CRIDGE/img02.png new file mode 100644 index 0000000000000000000000000000000000000000..fb546ad61cce1ce5c9cc593507f816ef64c7bcc5 GIT binary patch literal 60481 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 literal 0 HcmV?d00001 diff --git a/public/develop/architecture/CRIDGE/img03.png b/public/develop/architecture/CRIDGE/img03.png new file mode 100644 index 0000000000000000000000000000000000000000..79d0d2a208ca3c63489264a87d4a155d44d12cc4 GIT binary patch literal 92748 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 CF&RMs literal 0 HcmV?d00001 diff --git a/public/develop/architecture/CRIDGE/img04.png b/public/develop/architecture/CRIDGE/img04.png new file mode 100644 index 0000000000000000000000000000000000000000..233831d1bb986c92432fdaff602db44fc2c0df48 GIT binary patch literal 122391 zcmbq)XH-*N*DZo{X`=LwQbc-(5Ty4eDjlT5L$67MfYJgYO}caefk&!z2p}CpFVZ`N z4k3gd%FR2*ckg}2{d<2T89T{2J11xFx#pZ}tr$an4GJ<QGCVvy3N205*LZk@RCsv! z(j-K<cO<1N)^INm{9bD)<5iBZ?BWIwot5;I@bGF9$Zu>3abr?%O*20{Jj(9>JRbCW zl{(<z-4|=AD!l<)ALI~bynRa_B^@>q9m5dK@trT4A}sO&U7(#k=r#}}%@@Y^`FknJ z>(|;^>DnYDn&$qE_mCOcpsgX~$Pg=ocN3;<RD5)C5?j8sVittrx+jw1jG$H~`JX4v z_gOm~|942O?4Yz>@Lyvt{>N02|25W10`vX%;h%d{{_AwAub;7z{nz*_7uxWD&xAWk z(vuk2|CyOuIl4#_@Z`V7&(!{(snzZ%qC=c@(uI~5CyECx!A_MWvG{%0XZu#YpIe)` z<7I|Y1udlJ1x~tVYc>`Q6mQoX=6<*&Qr!ipeO4uom>o(Cy_k2S0$r}bnqL=ds|EQv z?M=CQ9<LT?SA8EdDmOI(?G(V8{(bvXHOO~+!K<|iIcQQE$2}2swm;Jhy{Oouls_2b zFnAJszBM$ec)uQU<(R!k!FlpqYT*g#UiN&YdHp}*Y@9uPujJilt7$y9hRlrGiqB`$ zN;D0B$Tng|<eO;?+^G)-wJX<cahI|5O;XJgz5YC0(ERb|fr>bfus7AgSC37;_edQj zs!#?#6?pe0KKc!Vv}f?K^q<t1W+P;^mcPDGUy)sb=6<PF>SnH|g@Tp>W_C1vf9PSC zC|Kp@Q-#{vCVuicJn>Qce6yeSGLzna^PKc#kaPU*;Ocy#(sQZBPKmihwYpd;UX!X+ z8utxU;CxxO{LQh7RkQDchQ?RSps@W?1gWuQ*=wZb`1b<bEgs0>Qv2N08@t^Cy;xdc z{jgKeAQ&;gjM*9nb;A;T$?0AOAO}%Trj+&zx$OoYH-yiWo6*!UYd6vA%K#TyxlPc= zWhJ>FdTX#6b&|Y#P|vjbY_#QO6y+f*a0SW>x<T`*YN)=5$Zd36is6;|Rdw}`ajYQe z6=?iBq32jWYUvJZ;-kU(mRIg83xG284)RqV1&>{93BcVsZ>4a|#Y!kSQ^D=xVdDzh z;czZ*E_hnfbz&-2FsrtSt7rP*S>IxFXzSf=2l>2E|MuR~zh%bGjUNKW^P%9c^RmjD zF`-Le7>&alOxQsS9*t(pw91=tMuqCF<AwdrAI_MXasuc1cRDlyH&v_He)iCzz}xEp zKhR>0t-KuW(soO1{OPUyBL&|6>pzxZ=w|0utQzx}ht0F~P;RE$w$P<YGqTdE!*4LH zf}H6uZ_C@C@6>`KXMI!njKuhQI{co#NCEY;__^0f%Z3wE`PujD2Ri3L+bx=X9qUY@ zy9g-qMuBc?N3E!K7lU)a)h6cX*I;EpZ!EnDvqsU=x`mFbA0A_j@(5P%-w(!@H~sgf z{#IC7O#Q72g<G_lAF^<s;1>dbcbBXe9rw2exLw8EnXeSSG*wn>RjBUV{8S)KBd9m@ zf#WP3a^KVrZEarg>X4kz($apOJwIuoSP*8@6IB=;r*ie`#zX|gc_l3z_qy1`$kePg z&<cTpe^OORiZ8cno!)!2<)FigB;-6Hg9r)-#8Yz#Jh~_mjM{GHV{nir2nQxSc`?QJ zUwgca`~M3N2wwvn0%YDT(I`iU^+_$b^!jqD-We5<c(6eS^+2EL-Y#*T5J5SwRdJ|t zlF+r7zA*K{v9QWP_7J!IJ*p)Xl8k=nGMd1_=!XxgqXo=<IrxX1|Ge`ZMx+WX?fv~p zTe(8rRejj7KzJeO*ny$Vwfe65XVnVP^2>3sWujQ8759;l+_!t`I~*RB`ZT91!;>hr zgl`;&neXROxH-0i<c0+RdB;iZx2QMd)F)C`AKl3QkwaP`QWt;&wMeN;?!_zHd&j}F zn{9Mc8FhL}|7?Wf#8$(CCo?O>p{A_0$b_4z&`FRnLbI|&x5RUP_F}!ouD4-W#ahVj zjA)lC$m_t5oa}B1+QM%QS5?32Y(-bbTnURpBc)!ZN#wn5e=_we5`;mr?<O8D&hwT1 zR(MzSW4Kn#<|v&60#&hqp<Y>QYW&iPy)lyBE*{s-z69uA(WJ$d{e5mZ7?4}6ldjsK zyxvbHCX4hqd3bp2A93-+iayl&9wx{)`C5xOt82dAZRrF#D2^aPXq<Si`(eHcNfR9n z-d+u?g>FA*_jqZ$AY1E!`{$<RU^1G|t?U{dke{xtl-;4v&TaWhFkch+<#z^=goxN1 z&q5=0$A&Uj6Q_TiBa%QxM^+snZS{&WBX@d{9~^r>4}ExE^@J2Z$(}Da<XR217HMLt z#G;r=e|Nnfcr?Jh-?9|Auyk&eKbogF8i2a1SO~o*SW+Tpbr+_%ziVAS+dIqo`OYJ> z5!L?p<?5f`GAqHD$N+79`HC9Sm^r0lG-lL(aVWE+ReTgMT4A1g+YEVNUun@eeTKRZ z&jLW~#!79Fi1d}tzm?Do`OQRbclnMr=t>Yu542Ynx5O57zz7Jn@_!b}(XRf5fnj#0 zIayy$c3$9hf!ho!OxY<%{-}vIxlbW3tK;r^l7eY!W%!$9_xWKvHuvbbd%x+$+jEME zYbI%r`6tr<OnHOG)zY^u<dzsn_KDfy%$vJBp4h`d;*J$R95^VAmA*)~|D?KX{mY?d zfBMj((R(e7qa%m5XtM1@A;*)f{pRYRR?2huTRA&BSek4n%d1^nrh#WZ3q);@3q7X+ zVGr+XvB=lKTg-152#8L7p9&nU;?_L-q29=9XZPZ4P4beNb55Q_g;A%Fd7Vg;jg2() zx-S2<`F7w^fHY{<R-=W0Qbwf7Dd2s7GY*^NS_P`$LYkPLg#wKL_yuoXoiA_h?AT$w z33By<xD(61eZDA;a-}LL0-;dlwT317ZE+ujPpATL(OR(;GurWN2Cf^a7_jH{NwBpE zk$T~?o$a^AQ`~X?_~2r}D|zvFO(pE)i0Y^DKhx!`Q!y|zYmR%PKIlEvV2~bopX404 z3`ysMvO4TiWclx%*5AfUr@VN#*qsw{ZT4=(^K*_SGpk(i=21KL=zmbOQY-n#H2<)W zBIbx&{ZT;2jaVN-k?Dg5Ye3yk>$a#iX*9fMY-@LFS70#RIol^N-Xj;TJi9e=+Yi0F z>UT2ma?5?&aBzO~o4}0-QqZ27zWeZSB#9f=%pS6n`dsj_0rs#l)G$}#m+!|GS>C4j zhP@)K4)Zyqw(AGDFns+<LD8pi`2#5N-p`ZV&Tl>dwCEG+o%i=Bl0Mg$O5ya4_p?Wn zxZAer*^E3I=CL*m2|Sz!@`)!r>S_<gg^C=x0E#Zt|DgOLkt6pxi?~zD+{XrZBQGSV zBqxya<ea8bJ<dF<*yF}VxfSlWO?fn9(@%)f`w&g}Fwwx3`0u{~J5Ga&Q_{f0C7=HL za?d-=sBERz%JR|4VAUVZ(4PMF-q>=M=IcFXX&vy6*SIy{KQT96{%F&@F+`ZJYJ?QA z$114jPN@l+EV)05qP!iyMfbDRYQ!-~RtT*TkbGgjh}|DAj71&}`J25Y*%(n;@^AWU zbh_;{nu~0|{x|3Le4D0ZN-vH%&ka>q7T||HuUNDKEjc19skyu!u>qdB*pK*AFz064 zFPYc5)a1i0c8DlXp&6k|%R#7(c;Gcd<DgLM)_eo+y|7LDP}|w`;L#c^?@v7|-lpsI zNV?7P6e9iRV<1wv<7QJmfo*MT7~B8Q5Ya$DRqp7>K3XtpRnX<B)VjeS(1A!7M#ani z=;ZlZpMtdSzuOGCsp+U!q^6-=gOVC|ge)z3G%hh64m%X;$XFljS1C5aCO>hBkx=Kr zoO2;P(Cb~85^=yM!jDnoUl=Es=xyo(I_`nbMFtuIp`{IJHR{>-`0cmn3xuC;mtVx@ zfP_4^$1k~Sj?ez&4Pq`0)?LTfbMjY(J^SJKtio{F^!Nw;5T3PDZ#HbR;=K_BlIOW3 zNBs2lO#ZmY@(YyDMo7a2@;11aAR=M^5`$Vrvxx(eMSS!DmTd7!nmdWTv`{c=BG3vj z^!sX=ErRi>wL2slW>)KDPC#3eStsT?(UVWjvV;3YZu`$@I~=A=tRd5f)hbSM6!MFi zXmxY+ZbV(T*Gd`3un)xoa74kMdRD`H4a8NXlNWz^zf*WmPPW_|m;hsMUx?sp=Yh?@ za^Zly?HUUCBh%@6w+kObFqCZ*xl*B`mH`e81){p85}p6}0px>2GWxr)8@F$}jz(oI zyYEF%QMs&aA<kP?Ct6NG5)T@nIKX;-I8$6;Cttz#sWt<BW~gzA{z#MbJ%nxsX1g*L z`%UB;dkyBZX-{#RJ_uNd4~^ss_08=_S7euu2%MYF?MGeSijlUhKgK{pR6b-$dwC{W zchtn6^~BJ=Y?~Or+sZok?27Q|4Dxage3p|Uu<h~W!;9YToS~?m8eZ|XC}bY5b!C#& zI+EX;h1n+<d#KZdV|~Bns2vAA-2w)^I`rzWz6O=NkAQ7F%Ly{iEf?KjtlFj}9TtuH zPHrS9T5I;LMmsuZON|@sX_o@2Nv2qF1ts|Qj6MuY*NABbUFxHQ+v0kWpPvdW>If@r zL{YK3<HAFC-YD%2O&T~u{E#l{4~m=O%Iz`^yuHCAx^#Iu&<uxlbQmPCT<nf_*t47` zp}H<_W{yN%#_(#{128=?8%r6Y+)EnlZC=Pl9772UO7&lA1qBXgb$B{Hgm|88+Ei@B z<zM#F=gkHHlKUnGg%v#x!;axGJVUtEt8ughTB$pU5y48Nz5HT9hM1yconHug?73_^ zTirQ*%p&D(sIH+<^Qdz=g4F`E&_Rw?gC{xVTQ(nt1-?<N^_txx?Rc4NqQzXKw?3Z7 z{$o@mq+5dVN3zH;T_YBTHlJEgpfVSR9~U7xZRjQ{*I4HpJUq~hqcdjv$-1MgtBkhR zgXSX;nLKCg25^}~{NhVLH&!M+D568hQ7b(}5gQCq`j)W$bYyKwg*j!2gsQ{UzXN;3 z%;-w9mIYt<_pM)$7t;_BaFZ}24jciq1MA?|dw%cK*JU-AF1GVRAFj>zRc_4LGIZaJ zhO$#0q5Iiu1&5yNq)BnojE7@B+WUa5GfKK;^y=9AZ?REVz)-l2U$}qt$FuVVVXwr- zG7UcZ%fo$V_hi@6au3fgou;;mCJ?~N8_;+nnsf<t55I*7`RrB=!=0VvdsQxF6oaju znr&MAeFXNkbS8h?rX_`T0VISpnPbED2R6(wq|_!iG$32K;d1924D@<y&UO(i_v}j$ zVyWZ)ZgOIOM1JGeyzko30C@G@JMVEI6-N~&X|(`$)NqW20>t4Zqg7`6&iC#im~@x) zF{c76?Q|g|8)TCW3+}3A4?aHPa1SNCc;u1lqM}GafEtju=U)Gcy}F^{{c=&QFdzvC z+8kIrsvQNA%})}PFW&B!7&*mOwO<bboiO^h*if%4akmy0_ET=`Lyu{xY0$=1GLIg~ z-g=4MwqBk6sSf`jy^y7g?J8Ak?_?46_xG=^UfpjNCYYPEm5eF_k0y}JGv9kHj`Bk9 zMh04Kn_F%3z5(>jG;KU#tX&(w1KPik4Gs;pgq@tC`%%(yeKY(ibGBEEX;m?f>Tunn zn~e@(EZ_cz(;cQdK}9M=bHOxyVVn{+T`o1j*b$K;()so9>+@LCxmJfiUsq+<Ftqzm zZQ5aHWVQlNBSgzD_*P_jgZm$!i$(%(N8~5B5ZIli?*<Q5JCY|l?h|l9TU>!eA?dK3 z!06{R=N4tW=%v`(0%gM3-`w$~8#v;y^a$r7m?+`tG+mz=h#*t6^9}OYJb!;=4<owL z#5|exX#A{1@S&PC0VjUF#hve5ZNe_?J~O-`j5m#5H!o0D3tBc%jFTutb=-GOUlnt8 z@_|t_PG5AM9kaj{OW(|DG+n+{>#kOT2_Nk9N8N1ab>Q0{?Hx65|5!!Yf^N?mn=m7- zv#ik5nrV{I`&-arFTIUt6ps<joWD9Q!aA|40qkV@#DRBBsgcQ8WAyl^a`XCcYX8Dk z{I$Wrq|YDp?Klo*dsmnX@R?yx-F@~+5|63Puecf~_2td*5hDa)$3vOo+$6PrZ~uK0 zcmDZJ2H>iZgY|Czg-PYFPmQ#M6p?f`VeBE7{GhYH(i#0G_5b`86r8w}-7gmp!}km$ zJ=9=>ltZS^Q7iosY7^wUG6P4`;N8DJExZqir5y%d(LTR=q5YuR7fFUG<zAZL_$KSu z0x?W<;sdt?9x@aq)9?hNnw^WkgnjG-T<p!&w&pb6p39rU?pyXfDanRemv9n)ud->~ zym7zs=|Q_COoItRYoJZWdg9n0&$>u!0C?Yl=IgVM4DOO&HToj+%KlqC4O?81k$ad1 z&-UrT-0;aQs>48%Ghn)W_tTP`IYDBug#QjlEjO|c$5(9~iLm^9WgH*Q5B`Z$IMOkN zv?<<adq7&=l!@`^9zXwAH`Dk0>9=?^qqF7Ch=TOZhTGL{Ngk{JU79)D`cK*%&h==0 z>{OZY!Jv2p(TUDVJ9G#eALZ2hImq<+*mpHQfq_4bI5{sNZ^(zykBIb*3PKl0<9}<q zJsC6*%<=A^;f~6fVag4eMQodl>@T&pQW$WJ&=$PT5ViluTTjcR>~*n=m#@?CH&%(g zZDL0|3M_&R=1WNRZvyZi+ueHCN#<cp-MfnUcWK6b*5I}0N@k+{h{<FFp!nr|aj{AJ zak4dk9v<`Ki{&WrOrM7)QeXDwYTIKeg+F<*9s92Fl00wn4`4Q$3hoar)=|^Q<z(mh zCxzd5x!&vEl^RA*jC_a8-&pCAbO*OUf{iM<1~_*N>9~Fyb{eNW4qbFZJejb*;IM9| zlDl1)Rj9#HzdQ%moRfACiY;xK-#A8Rf*v2)<fBN4s;%wiwo&R&U}x^>d^8xVcn_Gj z3OYRNgcuJ^=K4M`kXsK$r2J80c`Jp5pH56pkGoFoJX(Nlvu;x|o)i`fPAIsxzb<YI z_iv74EnNQXIi=zM1U>CF`J=d)9)TmXtbw!q(S?~xOX#>ZY1h8kIrzmTy5r&6p2O%G zH(MdWfN_tajd1tPTz`-79^W!^&}9^103%vkp<__!Y57a8VMDf6pMW_>y(KMP$zN2~ zo80ap$DNY+78m~5gW9Up=fHcMijdu^Q8O(i9+lac;)vI1zQSx<SR>&$;WCy3*&<Y$ zt7+?%wtJSl?6-aA;Yfa!a7|^PX48OtxUHKZ()YK*LV7+~;r5zB0>!za`9(#JYl!4~ z#5QiN`=nd?7DMtV*nv~ayQ|?;^~ccL02#Y5-_&h;jT2fsS|pEaj=%bRNsUghaV`~; zM2}oga8ITJmR+FxV&xuhKf^fcb>Q6%hOd?PqCmGKT(?=1i93%=+30?<l8ZGeK<D{j ztVCUm+uj3qUL4i-%1y3g<&%f-PO#a2&rxP*rau%ufeV-LjqVO%mN!8YM2^gf4NXxp ztTNR$iGd}VR<j1*imWu|^fSQp?tj~%7Pa)d={LG}#knkE4j&=Z#~P5idI4nb`&#~O z*lw^qxuPSXqu8PN9@|~?AQ0MKD+W7`ay<xJRpfs2E^Byz3dSDt=GgO*jrl*jIld7e zh?tX!U3J<o*OQfi`>Xm2XOG<SlGxF8^PrX6@)30zZc8vU>7J&uMuEbY<BsvuD=Qsr zYJ&I_D~#<!1nFqRcn6gSaF6ByHlV~%>L#OpYj8u2+9ZAW^aOw!Jo}TsoB@DX8nz$M z%!0RZJBmj?n`PFHS)k<cf@}|a03MR$YO<tId_-mjA%XB+X0Ec`V~H@E7cC;3-|iuH zO~-ysE2RRnBR=$q?&&O#cWA(apRrT(Ab2W^gNsJj*1k!3EK4UytXJq|y-Ta&+jc=2 zvn6e5nxy>QRG1e!*f2*Zk8E@kd$6es8){Iq#Y2yk$S+pI4IUomX@mzS&;4lH{5lwR z3QzB)Ka)b1j`H>}LJ3YBk%+g4tOMAaBw;>{G64v0u3ifV#RNSEMbZ&?yW{Q~tv}Do zFNx+40W^a%o3azTf{lxgXOG7+i|qf%uRxq<JB#7Fe+A01L=;Re9>NIMdC>@3`Ejiu zthkkA_3Gxa6h|mE)nYjOKcM^Vu&Q}WeXxoIlWzSXwT-wzyRIO?c!CnuD_-Um3{`6> zX5paZQ`wopnHHnhZcoE~!{Io(P$77~7`V`;Bwt@9k4%{?AML}^j&xJX%YZu`ygMJ) zk15facdC;FSNV;|%9qmeW{kbMTZ7}mnutr5&HJ^YN7>R|xo%^tPiQ0f{b~qpb?Zky z`E010<s@5$JW+NSEjOzT`(<DAHzp>4+R%D}w}^#Z)UG;}+{7vXnwU4*aL(z-h+Gxz zXYoQ3IT9WcAl~dPW{NwT&Z(T^IJ-%O<wD@X*J+y~!B=f+jCv4FsFFqQIT7;N=$6Xk zLz_KDgw(uzdpqTVe5(b7c#3rjT35USGUPQ(JF1%$>Qn$#|6-|0HfoVx@^5vU*!%}{ zP(u;s);EV4|9rmG=sQ+<^P-geoD`92A1(&XtdHpe>erN7UkP3AGs>E#)E-ZG78__^ z>2=7In_SOp80<Zr*G9Enq(#~y5up{M+Br-p;nz{N3A>ZL#2®>9Mcbzn_fZNk|7 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 literal 0 HcmV?d00001 diff --git a/public/develop/architecture/CRIDGE/img05.png b/public/develop/architecture/CRIDGE/img05.png new file mode 100644 index 0000000000000000000000000000000000000000..3b05561502893694d3d72d12cbbfc154786da853 GIT binary patch literal 98384 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%0AHECD+e4 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 literal 0 HcmV?d00001 diff --git a/public/develop/architecture/architecture/index.html b/public/develop/architecture/architecture/index.html index 51acd951..587be225 100644 --- a/public/develop/architecture/architecture/index.html +++ b/public/develop/architecture/architecture/index.html @@ -18,7 +18,7 @@ <link rel="prev" href="../../service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/"> - <link rel="next" href="../CRIDGEforDevelopers/CRIDGEforDevelopers/"> + <link rel="next" href="../messagebus/"> <link rel="icon" href="../../images/favicon.png"> @@ -2254,7 +2254,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> @@ -2732,13 +2732,13 @@ - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-footer__link md-footer__link--next" aria-label="Next: CRIDGE for Developers"> + <a href="../messagebus/" class="md-footer__link md-footer__link--next" aria-label="Next: Message bus"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> - CRIDGE for Developers + Message bus </div> </div> <div class="md-footer__button md-icon"> diff --git a/public/develop/architecture/centrallog/index.html b/public/develop/architecture/centrallog/index.html index 5342272a..193c3f97 100644 --- a/public/develop/architecture/centrallog/index.html +++ b/public/develop/architecture/centrallog/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 ee841bc6..ad43f8ed 100644 --- a/public/develop/architecture/consumingServicesFromExternalPartners/index.html +++ b/public/develop/architecture/consumingServicesFromExternalPartners/index.html @@ -2258,7 +2258,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 a144d88c..6a343fb8 100644 --- a/public/develop/architecture/issuemgt/index.html +++ b/public/develop/architecture/issuemgt/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 1e4b664e..9ac9139f 100644 --- a/public/develop/architecture/messagebus/index.html +++ b/public/develop/architecture/messagebus/index.html @@ -15,7 +15,7 @@ <link rel="canonical" href="https://osl.etsi.org/develop/architecture/messagebus/"> - <link rel="prev" href="../CRIDGEforDevelopers/CRIDGEforDevelopers/"> + <link rel="prev" href="../architecture/"> <link rel="next" href="../osom/"> @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> @@ -5244,7 +5244,7 @@ <nav class="md-footer__inner md-grid" aria-label="Footer" > - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-footer__link md-footer__link--prev" aria-label="Previous: CRIDGE for Developers"> + <a href="../architecture/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Architecture"> <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> @@ -5254,7 +5254,7 @@ Previous </span> <div class="md-ellipsis"> - CRIDGE for Developers + Architecture </div> </div> </a> diff --git a/public/develop/architecture/nfvapi/index.html b/public/develop/architecture/nfvapi/index.html index 1b8123b2..21e74a8e 100644 --- a/public/develop/architecture/nfvapi/index.html +++ b/public/develop/architecture/nfvapi/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/architecture/nfvweb/index.html b/public/develop/architecture/nfvweb/index.html index 7985cb3a..a72568ed 100644 --- a/public/develop/architecture/nfvweb/index.html +++ b/public/develop/architecture/nfvweb/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 fb06848a..dc5a9c3f 100644 --- a/public/develop/architecture/oauth/index.html +++ b/public/develop/architecture/oauth/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 94db4377..03fe5a10 100644 --- a/public/develop/architecture/osom/index.html +++ b/public/develop/architecture/osom/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 86229ddf..c0fed85c 100644 --- a/public/develop/architecture/tmfapi/index.html +++ b/public/develop/architecture/tmfapi/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/architecture/tmfweb/index.html b/public/develop/architecture/tmfweb/index.html index 4f677709..008d9fa7 100644 --- a/public/develop/architecture/tmfweb/index.html +++ b/public/develop/architecture/tmfweb/index.html @@ -2205,7 +2205,7 @@ <li class="md-nav__item"> - <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/catalogs/index.html b/public/develop/catalogs/index.html index 7dbfc20c..9530977e 100644 --- a/public/develop/catalogs/index.html +++ b/public/develop/catalogs/index.html @@ -2199,7 +2199,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 e905f70e..34fd3bf8 100644 --- a/public/develop/config_intro/index.html +++ b/public/develop/config_intro/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 9300bb8d..318e8a4d 100644 --- a/public/develop/contributing/developing/index.html +++ b/public/develop/contributing/developing/index.html @@ -2203,7 +2203,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 15a482b5..c500e6d5 100644 --- a/public/develop/contributing/wishlist/index.html +++ b/public/develop/contributing/wishlist/index.html @@ -2199,7 +2199,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/deployment/index.html b/public/develop/deployment/index.html index 6073709e..51783b8e 100644 --- a/public/develop/deployment/index.html +++ b/public/develop/deployment/index.html @@ -2256,7 +2256,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/deploymentCompose/index.html b/public/develop/deploymentCompose/index.html index fadfcbe8..b9f47774 100644 --- a/public/develop/deploymentCompose/index.html +++ b/public/develop/deploymentCompose/index.html @@ -2562,7 +2562,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/deploymentK8s/index.html b/public/develop/deploymentK8s/index.html index c5d27f8a..c09a6013 100644 --- a/public/develop/deploymentK8s/index.html +++ b/public/develop/deploymentK8s/index.html @@ -2256,7 +2256,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 4dd0939e..353684b9 100644 --- a/public/develop/etsi_osl/index.html +++ b/public/develop/etsi_osl/index.html @@ -2215,7 +2215,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/history/index.html b/public/develop/history/index.html index fd5bfc89..21e05fd6 100644 --- a/public/develop/history/index.html +++ b/public/develop/history/index.html @@ -2259,7 +2259,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/index.html b/public/develop/index.html index a89ba00d..fab1c415 100644 --- a/public/develop/index.html +++ b/public/develop/index.html @@ -2308,7 +2308,7 @@ <li class="md-nav__item"> - <a href="architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/lcm/index.html b/public/develop/lcm/index.html index 8d891da6..d2fc666b 100644 --- a/public/develop/lcm/index.html +++ b/public/develop/lcm/index.html @@ -2199,7 +2199,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 e24cb5d8..0991742f 100644 --- a/public/develop/naas/exposed_apis/index.html +++ b/public/develop/naas/exposed_apis/index.html @@ -2208,7 +2208,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/introduction/index.html b/public/develop/naas/introduction/index.html index df9a5d42..1f71456a 100644 --- a/public/develop/naas/introduction/index.html +++ b/public/develop/naas/introduction/index.html @@ -2208,7 +2208,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/lcm_intro/index.html b/public/develop/naas/lcm_intro/index.html index 153b1424..d49490a1 100644 --- a/public/develop/naas/lcm_intro/index.html +++ b/public/develop/naas/lcm_intro/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/lcm_rules_intro/index.html b/public/develop/naas/lcm_rules_intro/index.html index ab946624..fb257c6c 100644 --- a/public/develop/naas/lcm_rules_intro/index.html +++ b/public/develop/naas/lcm_rules_intro/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 92ebb210..b9c711c6 100644 --- a/public/develop/naas/nfv/intro/index.html +++ b/public/develop/naas/nfv/intro/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 d33b5ae3..fbfb1c9b 100644 --- a/public/develop/naas/nfv/nfvcatalogs/index.html +++ b/public/develop/naas/nfv/nfvcatalogs/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 b04e411e..c11171fd 100644 --- a/public/develop/naas/resource_catalog/index.html +++ b/public/develop/naas/resource_catalog/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/resource_inventory/index.html b/public/develop/naas/resource_inventory/index.html index ecd8774a..a189e7b1 100644 --- a/public/develop/naas/resource_inventory/index.html +++ b/public/develop/naas/resource_inventory/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 c502a7fd..1797cf12 100644 --- a/public/develop/naas/resource_spec/index.html +++ b/public/develop/naas/resource_spec/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 9ec19091..2f3b63bc 100644 --- a/public/develop/naas/service_catalog/index.html +++ b/public/develop/naas/service_catalog/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/service_inventory/index.html b/public/develop/naas/service_inventory/index.html index e8c3d6ec..43c2a653 100644 --- a/public/develop/naas/service_inventory/index.html +++ b/public/develop/naas/service_inventory/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/service_spec/index.html b/public/develop/naas/service_spec/index.html index 87cb5189..f946b6d8 100644 --- a/public/develop/naas/service_spec/index.html +++ b/public/develop/naas/service_spec/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/naas/so_intro/index.html b/public/develop/naas/so_intro/index.html index b90bff2d..b29f8ee6 100644 --- a/public/develop/naas/so_intro/index.html +++ b/public/develop/naas/so_intro/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> 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 b6fc14db..ab22adb0 100644 --- a/public/develop/naas/so_servicespec_to_services_kubernetes/index.html +++ b/public/develop/naas/so_servicespec_to_services_kubernetes/index.html @@ -2212,7 +2212,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 55b5fb7a..2aa792a9 100644 --- a/public/develop/naas/so_servicespec_to_services_nfv/index.html +++ b/public/develop/naas/so_servicespec_to_services_nfv/index.html @@ -2212,7 +2212,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/nfvcatalogs/index.html b/public/develop/nfvcatalogs/index.html index 00b18a9b..482d25f8 100644 --- a/public/develop/nfvcatalogs/index.html +++ b/public/develop/nfvcatalogs/index.html @@ -2199,7 +2199,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/nfvoconfig/index.html b/public/develop/nfvoconfig/index.html index b5874e92..74f0c078 100644 --- a/public/develop/nfvoconfig/index.html +++ b/public/develop/nfvoconfig/index.html @@ -2217,7 +2217,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 55d47bbe..76adc850 100644 --- a/public/develop/ole_keycloak_management/index.html +++ b/public/develop/ole_keycloak_management/index.html @@ -2194,7 +2194,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 dd14383a..2817145b 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 Resoruce portal allows users to access resource specifications and running resources in resource inventory.</li> <li>The NFV portal allows users to manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The teting portal allows Service Providers to manage test artifacts</li> <li>The Products portal allows Service Providers to expose services as products</li> </ul>"},{"location":"#openslice-for-service-consumers","title":"OpenSlice for Service Consumers","text":"<p>OpenSlice allows Service Consumers to browse the available offered service specifications in a self-service manner. It also supports TMFORUM Northbound APIs regarding Service Catalog Management, Ordering, Resource, etc. There are various portals offering UI friendly access to users acting as Service Consumers:</p> <ul> <li>The Services portal allows Service Consumers to select and order predefined services.</li> <li>The Resoruce portal allows users to access running resources in resource inventory.</li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The testing portal allows Service Consumers to manage test artifacts</li> <li>The Products portal allows Service Consumers to expose services as products</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>"},{"location":"#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":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>Following, you may thorough guides depending on the installation type of your choice:</p> <ul> <li>Installing via Docker Compose guide</li> <li>Installing via Kubernetes guide</li> </ul>"},{"location":"deploymentCompose/","title":"OpenSlice Deployment Guide with Docker Compose","text":""},{"location":"deploymentCompose/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":""},{"location":"deploymentCompose/#requirements","title":"Requirements","text":""},{"location":"deploymentCompose/#hardware-requirements","title":"Hardware requirements:","text":"Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 30 GB storage 50 GB storage"},{"location":"deploymentCompose/#software-requirements","title":"Software Requirements:","text":"<ul> <li>Docker: A running environment for Docker Compose services</li> </ul>"},{"location":"deploymentCompose/#preparing-the-environment","title":"Preparing the environment","text":""},{"location":"deploymentCompose/#1-backup-your-previous-database-if-necessary","title":"1. Backup your previous database if necessary:","text":"<pre><code>sudo docker exec amysql /usr/bin/mysqldump -u root --password=letmein ostmfdb > backup_ostmfdb.sql\n</code></pre>"},{"location":"deploymentCompose/#2-install-docker","title":"2. Install docker","text":"<p>Since July 2023 Docker Compose V1 stopped receiving updates. OpenSlice fully reverted to Compose V2, which is integrated in the Docker installation.</p>"},{"location":"deploymentCompose/#3-configure-containers-to-properly-resolve-the-dns-of-your-domain-optional","title":"3. Configure containers to properly resolve the DNS of your domain (optional)","text":"<pre><code>sudo nano /etc/docker/daemon.json\n</code></pre> <p>and add:</p> <pre><code>{ \n \"dns\": [\"8.8.8.8\", \"8.8.4.4\"]\n}\n</code></pre> <p>After editing daemon.json restart docker daemon for the changes to take place</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deploymentCompose/#downloading-the-project","title":"Downloading the project","text":""},{"location":"deploymentCompose/#1-create-a-new-folder-to-download-the-project","title":"1. Create a new folder to download the project","text":"<pre><code>mkdir openslice\n</code></pre> <pre><code>cd openslice\n</code></pre>"},{"location":"deploymentCompose/#2-download-the-deployment-script","title":"2. Download the deployment script","text":"<p>Download the deployment / environment preparation script</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh\n</code></pre> <p>Make it executable</p> <pre><code>sudo chmod +x deploy.sh\n</code></pre>"},{"location":"deploymentCompose/#3-run-the-deployment-script","title":"3. Run the deployment script","text":"<p>OpenSlice is a multi repo project. This script selects the same branch for all repositories of the project to pull from.</p> <p>After that it builds the respective jar files locally and installs all the npm packages needed for the UI.</p> <p>If you run the script without selecting a branch the the main branch is going to be selected.</p> <p>We recommend:</p> <ul> <li>main branch for the most stable experience and</li> <li>develop branch for an experience with the latest features (for develop branch installation, it is strongly advisable that you may as well follow the develop documentation)</li> </ul> <pre><code>sudo ./deploy.sh develop #[or replace main with other branch name]\n</code></pre> <p>We recommend running the deploy.sh script with root permissions! In other case, some directories may not be accessible by the project building tools and hinder the smooth installation.</p>"},{"location":"deploymentCompose/#configure-docker-compose-services","title":"Configure Docker Compose services","text":""},{"location":"deploymentCompose/#1-create-configuration-specific-docker-compose-file-from-the-template","title":"1. Create configuration specific Docker Compose file from the template","text":"<pre><code>cd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo cp docker-compose.yaml.configure docker-compose.yaml\n</code></pre>"},{"location":"deploymentCompose/#2-configure-mysql-portal-container-optional","title":"2. Configure mysql-portal container (optional)","text":"<ol> <li>In folder <code>org.etsi.osl.main/compose/mysql-init</code> edit the file <code>01-databases.sql</code>.</li> <li>In the <code>org.etsi.osl.main/compose/docker-compose.yaml</code> edit the credentials of the users that services use to connect to the databases, if you wish.<ul> <li>portaluser (default is 12345) and</li> <li>keycloak (default is password)</li> </ul> </li> </ol>"},{"location":"deploymentCompose/#3-configure-keycloak-container-optional","title":"3. Configure keycloak container (optional)","text":"<ol> <li> <p>If you made changes to keycloak's mysql credentials:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code>.</p> </li> </ol> <pre><code>DB_DATABASE: keycloak\nDB_USER: keycloak\nDB_PASSWORD: password\n</code></pre> <ol> <li> <p>If you want to change the keycloak admin password:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> </li> </ol> <pre><code>KEYCLOAK_PASSWORD: Pa55w0rd\n</code></pre>"},{"location":"deploymentCompose/#4-configure-bugzilla-container-optional","title":"4. Configure bugzilla container (optional)","text":"<p>If you want to utilise the Bugzilla connector:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.activemq.brokerUrl\": \"tcp://anartemis:61616?jms.watchTopicAdvisories=false\",\n \"spring.activemq.user\": \"artemis\",\n \"spring.activemq.password\": \"artemis\",\n \"bugzillaurl\":\"\",\n \"bugzillakey\":\"\",\n \"main_operations_product\":\"\"\n}'\n</code></pre> <p>And add the provided Bugzilla installation information:</p> <pre><code>\"bugzillaurl\":\"bugzillaurl.xx:443/bugzilla/\",\n\"bugzillakey\":\"exampleKeyeqNNwxBlgxZgMEIne0Oeq0Bz\",\n\"main_operations_product\":\"Main Site Operations\" // this is the default product to issue tickets\n</code></pre> <p>Bugzilla should have the following components under the specified product: </p> <ul> <li>NSD Deployment Request: Component used to schedule deployment req </li> <li>Onboarding: Issues related to VNF/NSD Onboarding </li> <li>Operations Support: Default component for operations support </li> <li>Validation: Use to track validation processes of VNFs and NSDs </li> <li>VPN Credentials/Access: Used for requesting VPN Credentials/Access </li> </ul> <p>Also in the 'Main Site Operations' product, a version named 'unspecified' must be created.</p>"},{"location":"deploymentCompose/#5-configure-osportalapi-container-nfv-services-conditional","title":"5. Configure osportalapi container (NFV services) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}, as well as \"spring.portal.main.domain\" property.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"spring.portal.main.domain\": \"http://localhost\",\n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#6-osscapi-container-tmf-api-service-conditional","title":"6. osscapi container (TMF API service) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#configure-nginx","title":"Configure nginx","text":"<p>In folder <code>org.etsi.osl.main/compose/nginx</code> create a configuration specific <code>nginx.conf</code> file.</p> <pre><code>cd org.etsi.osl.main/compose/nginx/\n</code></pre> <pre><code>sudo cp nginx.conf.default nginx.conf\n</code></pre> <p>If needed, in the nginx.conf file, edit the server_name for an non-local deployment.</p>"},{"location":"deploymentCompose/#configure-web-ui","title":"Configure Web UI","text":"<p>In folder <code>org.etsi.osl.portal.web/src/js/</code> create a configuration specific <code>config.js</code> file.</p> <pre><code>cd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>sudo cp config.js.default config.js\n</code></pre> <p>Edit the <code>config.js</code> file with the information of your domain. <code>ROOTURL</code> will automatically extract the the Origin (Protocol://Domain:Port) of the deployment, but you must change <code>APIURL</code> property, if you are not aiming for a localhost installation, e.g. \"https://portal.openslice.io\".</p> <p>Example file:</p> <pre><code>{ \n BUGZILLA: \"ROOTURL/bugzilla/\",\n STATUS: \"ROOTURL/status/\",\n APIURL: \"http://localhost\",\n WEBURL: \"ROOTURL/nfvportal\",\n APIOAUTHURL: \"ROOTURL/auth/realms/openslice\",\n APITMFURL: \"ROOTURL/tmf-api/serviceCatalogManagement/v4\"\n}\n</code></pre>"},{"location":"deploymentCompose/#configure-tmf-web-ui","title":"Configure TMF Web UI","text":"<p>In the folder <code>org.etsi.osl.tmf.web/src/assets/config</code> there are 3 files available for configuration:</p> <ul> <li>config.prod.json (Basic information + API configuration)</li> <li>theming.scss (CSS color palette theming)</li> <li>config.theming.json (HTML configuration - Logo, Favicon, Footer)</li> </ul> <p>The first 2 files above (i.e. config.prod.json, theming.scss) are essential for the successful deployment of OpenSlice, thus created automatically during the initial deployment at <code>org.etsi.osl.tmf.web/src/assets/config</code> directory as a copy of the default ones from the remote repository.</p> <p>Ensure that you check the <code>config.prod.json</code> and <code>theming.scss</code> files and readjust to your deployment if needed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <p>E.g. You may edit \"TITLE\", \"WIKI\", etc properties with your domain title. Also configure TMF's API and Keycloak's location for the web application, if needed.</p> <p>Example file:</p> <pre><code>{ \n \"TITLE\": \"OpenSlice by ETSI\",\n \"PORTALVERSION\":\"2024Q2\",\n \"WIKI\": \"https://osl.etsi.org/documentation\",\n \"BUGZILLA\": \"{BASEURL}/bugzilla/\",\n \"STATUS\": \"{BASEURL}/status/\",\n \"WEBURL\": \"{BASEURL}\",\n \"PORTAL_REPO_APIURL\": \"{BASEURL}/osapi\",\n \"ASSURANCE_SERVICE_MGMT_APIURL\": \"{BASEURL}/oas-api\",\n \"APITMFURL\": \"{BASEURL}/tmf-api\",\n \"OAUTH_CONFIG\" : {\n \"issuer\": \"{BASEURL}/auth/realms/openslice\",\n \"loginUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n\n \"responseType\": \"code\",\n \"oidc\": false,\n \"clientId\": \"osapiWebClientId\",\n \"dummyClientSecret\": \"secret\",\n\n \"requireHttps\": false,\n \"useHttpBasicAuth\": true,\n \"clearHashAfterLogin\": false,\n\n \"showDebugInformation\": true\n }\n}\n</code></pre> <p>The {BASEURL} placeholder in the file automatically detects the Origin (Protocol://Domain:Port) of the deployment and applies it to every respective property. E.g. If you are attempting a local deployment of OpenSlice, then {BASEURL} is automatically translated to \"http://localhost\". Similarly, you may use {BASEURL} to translate to a public deployment configuration, e.g. \"https://portal.openslice.io\".</p> <p>If further customization, apart from the default provided, is needed for branding (Logo, Footer) then <code>config.theming.json</code> needs to be created in io.openslice.tmf.web/src/assets/config directory, as follows:</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>sudo cp config.theming.default.json config.theming.json\n</code></pre> <p>IMPORTANT NOTE: If you want to apply changes to the JSON configuration files without the need to rebuild the application, you have to apply the changes at the <code>org.etsi.osl.tmf.web/dist/io-openslice-portal-web/assets/config</code> directory. Although, it is mandatory to also apply these changes to the <code>org.etsi.osl.tmf.web/src/assets/config</code> for persistancy, as after any future rebuild of OpenSlice the <code>/dist</code> directory is being overwritten along with its contents. The OpenSlice team strongly recommends to always apply your changes to the TMF web UI configuration files at <code>org.etsi.osl.tmf.web/src/assets/config</code> and rebuild the application.</p>"},{"location":"deploymentCompose/#deploy-openslice-via-docker-compose","title":"Deploy OpenSlice via Docker Compose","text":"<p>After configuring the services, and editing the docker compose file accordingly, the docker compose instantiation command can be performed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo docker compose --profile prod down;sudo docker compose --profile prod up -d --build\n</code></pre> <p>Depending on your machine, this process might take time. if for any reason the deployment fails during first time, please rerun the above before any further measures.</p>"},{"location":"deploymentCompose/#validating-deployments-and-container-monitoring","title":"Validating deployments and container monitoring","text":"<p>You can monitor containers' status with portainer at port 9000 (http://your-ip:9000).</p> <p>Initially, you may monitor the local machine at portainer.</p> <p>Please check that all containers are in running state.</p>"},{"location":"deploymentCompose/#post-installation-steps","title":"Post installation steps","text":"<p>After the successful deployment of OpenSlice, to ensure the E2E user experience, this section is mandatory. It contains crucial configuration in regard of authentication and user creation.</p>"},{"location":"deploymentCompose/#configure-keycloak-server","title":"Configure Keycloak server","text":"<p>The Keycloack server is managing authentication and running on a container at port 8080. It is also proxied to your host via nginx under http://localhost/auth. </p> <ul> <li> <p>Navigate to http://domain.com/auth/ or https://domain.com/auth/, (http://ipaddress:8080/auth/ or https://ipaddress:8443/auth/ which are directly accessible without proxy) </p> </li> <li> <p>Navigate to Administration Console </p> </li> <li> <p>Login with the credentials from section Configure keycloak container. Default values are:</p> <ul> <li>user: admin and </li> <li>password: Pa55w0rd</li> </ul> </li> </ul> <p>if you are running in HTTP you will get a message: HTTPS required.</p> <p>To resolve this issue when running in HTTP: </p> <ul> <li>Select the master realm from top left corner</li> <li>Go to login Tab and select \"Require SSL\": None</li> <li>Repeat for realm Openslice</li> </ul> <p>If you are running in HTTPS, then \"Require SSL\" can be left unchanged to external requests.</p>"},{"location":"deploymentCompose/#1-configure-redirects","title":"1. Configure redirects","text":"<p>Navigate to realm Openslice > Clients > osapiWebClientId and change the Root URL to your domain. </p> <p>Also, insert your domain, e.g. http://example.org/*, at:</p> <ul> <li>Valid Redirect URIs</li> <li>Web Origins</li> </ul>"},{"location":"deploymentCompose/#2-configure-email","title":"2. Configure email","text":"<p>Keycloak allows new users to register. Subsequently, this will also allow new users to register to the OpenSlice portal.</p> <p>Navigate to realm Openslice > Realm Settings > Login Tab > check User registration, Verify email, Forgot password etc.</p> <p>Finally, enter the details of the mail server at the Email Tab.</p> <p>Email configuration is optional for test runs, but if not provided the above functionalities (e.g. external user registration) will not be possible.</p>"},{"location":"deploymentCompose/#3-add-an-openslice-admin-user","title":"3. Add an OpenSlice admin user","text":"<p>This step is mandatory so as to access the OpenSlice Web UI. To add an OpenSlice admin user you must:</p> <ul> <li>Navigate to realm Openslice > Users > Add user</li> <li>Set a password</li> <li>Upon creation, navigate to Role Mappings and add ADMIN to Assigned Roles list</li> </ul> <p>That user is different from the Keycloak admin user. It is required to login and browse the OpenSlice Web UI. The Role ADMIN guarantee full access through the OpenSlice UI, thus such a user is always required.</p>"},{"location":"deploymentCompose/#keycloak-at-localhost","title":"Keycloak at localhost","text":"<p>This is an important step if you run Keycloak on localhost!</p> <p>1 - Edit your Hosts File, adding the line below</p> <p><code>127.0.0.1 keycloak</code></p> <p>Hosts File Location:</p> <ul> <li> <p>In Linux/Unix, the file's location is at /etc/hosts </p> </li> <li> <p>In Windows, its location is at c:\\Windows\\System32\\Drivers\\etc\\hosts</p> </li> </ul> <p>2 - Replace http://localhost/auth/ with http://keycloak:8080/auth/ in your Keycloak config for AngularJS and Angular (see examples below).</p> <p>Explanation</p> <p>Nginx uses the http://keycloak:8080 URL, which is accessible via the internal docker system's network. The Front-end (TS/Angular) shall also use the http://keycloak:8080. This way, you will not get the invalid token error, as the API is acquiring the token from http://keycloak:8080 (internally) and the Front-end is getting verified by an issuer at the same URL, as well.</p> <p>2.1 - For the Angular configuration (TMF portal UI), navigate to org.etsi.osl.tmf.web/src/assets/config and edit config.prod.json</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>nano config.prod.json\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>{ \n \"OAUTH_CONFIG\" : {\n \"issuer\": \"http://keycloak:8080/auth/realms/openslice\",\n \"loginUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n }\n}\n</code></pre> <p>Note the difference in changing {BASEURL} -> http://keycloak:8080</p> <p>If you want the changes to take place immediately without rebuilding the project, then repeat the process for org.etsi.osl.tmf.web/dist/org.etsi.osl.tmf.web/assets/config/config.prod.json</p> <p>2.2 - For the AngularJS configuration (NVF portal UI), navigate to org.etsi.osl.portal.web/src/js and edit config.js</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>nano config.js\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>var appConfig = angular.module('portalwebapp.config',[]);\n\n\nappConfig.factory('APIEndPointService', function() {\n return { \n APIOAUTHURL: \"http://keycloak:8080/auth/realms/openslice\",\n };\n});\n</code></pre> <p>Note the difference in \"APIOAUTHURL\" property, changing ROOTURL -> http://keycloak:8080</p>"},{"location":"deploymentCompose/#nfv-orchestrator-configuration","title":"NFV Orchestrator Configuration","text":"<p>After successfully deploying and configuring OpenSlice, you may configure its environment (e.g. the NFVO) that will facilitate the deployment of NFV artifacts.</p> <p>See NFV Orchestrator Configuration.</p>"},{"location":"deploymentK8s/","title":"OpenSlice Deployment Guide with Kubernetes","text":""},{"location":"deploymentK8s/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"location":"etsi_osl/","title":"The ETSi SDG OSL","text":"<p>OpenSlice is developed by the OSL ETSI Software Development Group see more info</p>"},{"location":"history/","title":"History","text":""},{"location":"history/#history","title":"History","text":"<ul> <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project 5GinFIRE by University of Patras, Greece</li> <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project 5G-VINNI by University of Patras, Greece</li> <li>OpenSlice has been a part of OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Group since 2023</li> </ul>"},{"location":"history/#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use OpenSlice in your research</p> <pre><code>\n@misc{tranoris2021openslice,\n title={Openslice: An opensource OSS for Delivering Network Slice as a Service}, \n author={Christos Tranoris},\n year={2021},\n eprint={2102.03290},\n archivePrefix={arXiv},\n primaryClass={cs.NI}\n}\n\n\n</code></pre>"},{"location":"lcm/","title":"Lifecycle Management (LCM) Rules","text":"<ul> <li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li> </ul> <p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p> <ul> <li>PRE_PROVISION</li> <li>CREATION</li> <li>AFTER_ACTIVATION </li> <li>SUPERVISION </li> <li>AFTER_DEACTIVATION </li> </ul> <p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p> <p></p> <ul> <li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li> <li>CREATION rules: Run while the referenced service dependencies of a service are created</li> <li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li> <li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li> <li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li> </ul> <p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p> <ul> <li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li> <li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li> <li>Define complex OSM Configs based on other dependencies and passing variables</li> <li>Define any dependencies when creating the referenced services</li> <li>Dynamically include new service dependencies</li> <li>Create new service orders so include dynamically other services</li> <li>Call external (RESTful) services (via http(s), define payload, examine response)</li> </ul>"},{"location":"lcm/#examine-if-the-rules-are-executed-successfully","title":"Examine if the rules are executed successfully","text":"<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>"},{"location":"lcm/#lcm-rules-and-osom-service-orchestration","title":"LCM Rules and OSOM Service Orchestration","text":"<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p> <p></p>"},{"location":"lcm/#define-rules","title":"Define rules","text":"<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p> <p></p> <p>Execution order of rules on a specific phase is random</p> <ul> <li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li> </ul>"},{"location":"lcm/#definition-language","title":"Definition language","text":"<ul> <li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li> <li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li> </ul> <p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p> <p></p> <ul> <li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li> <li>On the right side the user can define some rule properties or observe the underlying generated java code.</li> </ul>"},{"location":"lcm/#the-blocks-library","title":"The blocks library","text":"<p>The following images describe some blocks found in the library.</p> <p>Blockly has syntax rules. It helps with colours to define them. </p> <p>So for example a parameter that is a Number cannot be \"glued\" with a String. Will need some conversion first</p> <p> </p>"},{"location":"lcm/#examples-of-rules","title":"Examples of Rules","text":"<p>The following images provide some examples of rules.</p>"},{"location":"lcm/#define-variables-according-to-cases","title":"define variables according to cases","text":"<p>In the following example we :</p> <ul> <li>define a String variable. </li> <li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li> <li>We output the value to the OSOM Log</li> <li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li> </ul> <p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p> <p></p>"},{"location":"lcm/#define-complex-osm-configs-for-day-0","title":"Define complex OSM configs for DAY 0","text":"<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p> <ul> <li> <p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p> </li> <li> <p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p> </li> <li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li> <li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li> <li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li> </ul> <p></p>"},{"location":"lcm/#define-and-instantiate-different-services-according-to-service-order-request","title":"Define and instantiate different services according to Service Order request","text":"<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p> <p>There are different ways to accomplish this:</p> <ul> <li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li> <li>change for example the VIMs that you deploy the NS</li> <li>change the NSD (that is use different VNFs)</li> </ul> <p>The following image displays for example the latter case.</p> <p></p>"},{"location":"lcm/#call-an-external-restful-service","title":"Call an external RESTful service","text":"<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p> <p></p> <p></p>"},{"location":"lcm/#create-new-service-orders","title":"Create New Service Orders","text":"<p>The following example calls to Order a New Service Specification with specific Parameter Values</p> <p></p>"},{"location":"nfvcatalogs/","title":"NFV Services","text":"<p>NFV Services are managed through a dedicate UI the NFV portal (eg http://portal.openslice.io/nfvportal)</p> <p>Users are able through this portal to manage their NFV artifacts towards the NFVO, ( for example onboard VNFs and NSDs to a target OSM)</p> <p>Openslice NFV Services target to accommodate the following envisaged user roles. All users are assumed to be Authenticated:</p> <ul> <li>NFV developer: This role is responsible to upload VNF and NSD Descriptors in the Openslice services towards NFVO like OSM</li> <li>Services administrator: This role represents the user that are responsible for maintenance of the Openslice services</li> </ul> <p>(obsolete: )</p> <ul> <li>Testbed provider: This role represents users that are responsible for testbed administration, configuration, integration, adaptation, support, etc</li> <li>Experimenter: This role represents the user that will utilize our services and tools to deploy an experiment. That is the experiment description in terms of e.g.: NSD (Network Service Descriptor) or TOSCA Specification (in future versions)</li> </ul> <p>Finally an anonymous user role exists who has some really simple usage scenarios (e.g. signup through the portal)</p> <p>During the onboarding process the following occurs:</p> <p>\u2022 A NFV developer submits a NFV archive (VNF or NSD) (he can later manage if needed some metadata) \u2022 The administrator can manage the NFV artifact (e.g. edit it) \u2022 The administrator On-Boards the NFV artifact to the target MANO \u2022 The administrator can optionally mark the NFV: o As public in order to be publicly visible by all portal users o As Certified which means this is certified by a certain entity</p>"},{"location":"nfvcatalogs/#request-a-new-nsd-deployment-this-is-different-in-comparison-to-services","title":"Request a new NSD deployment (this is different in comparison to Services)","text":"<p>A developer requests a new network service deployment (which NSD, tentative dates, target infrastructure, etc.). The request is marked as UNDER_REVIEW</p> <ul> <li>The administrator is notified about the new request and he has the following options:</li> <li>Schedule the deployment for the requested dates or propose other dates. The request is marked as SCHEDULED</li> <li>Reject the request for some reason. The Request is marked as REJECTED</li> <li>Deploy the request to target VIM(s). The Request is marked as RUNNING</li> <li>Finalize the deployment and release resources. The Request is marked as COMPLETED</li> <li>every change of the request-lifecycle the experimenter is notified.</li> </ul>"},{"location":"nfvoconfig/","title":"NFV Orchestrator configuration","text":"<p>Currently we support Open Source MANO version EIGHT/NINE/TEN/ELEVEN/THIRTEEN. Later versions of OSM may also be supported by the existing configuration, as from OSM 9+ the project converged to the SOL005 interface, regarding the NBI, and SOL006 (YANG model), regarding the NFV/NS packaging. Also an implementation of a generic SOL005 interface is supported, but not extensively tested.</p> <p>Configuration of your target(s) NFVOs/MANO services with Openslice is performed through the NFV portal.</p> <ol> <li> <p>Login to {{yourdomain}}/nfvportal/</p> </li> <li> <p>Navigate to Admin > Manage MANO Platforms > Add New MANO Platform, pick one of the supported MANO platform(s), e.g. Name=OSMvTHIRTEEN, Version=OSMvTHIRTEEN and save. You may edit the saved MANO platforms after this.</p> </li> <li> <p>Navigate to Admin > Manage MANO providers > Add New MANO Provider and enter its details:</p> <ul> <li>Name and description of your choice. The selected name will supplement the NFV artifacts of this provider.</li> <li>One of the already defined MANO platformssynchronization</li> <li>API URL Endpoint, eg: https://10.10.10.10:9999 (This is the SOL005 NBI endpoint - Note the port 9999)</li> <li>Username, Password and Project of your OSM tenant.</li> </ul> </li> </ol> <p>Check EnabledForONBOARDING, if you want VNF/NS packages uploaded through the UI by the user, to also be automatically ONBOARDED to this MANO (1 step process). If left unchecked, the onboarding process must be performed manually after the VNF/NS package is uploaded to the portal, by the designated UI (2 step process).</p> <p>Check EnabledForSYNC, if you want to support the automatic synchronization of this MANO with OpenSlice. When enabled, the existing VNF/NS packages and VIMs (and any updates on them) of the registered MANO are also reflected to the portal to the respective UIs (Registered VNFs/NSDs and Manage Infrastructures). </p> <p>The synchronization is a continuous process that will confirm that the artifacts are still present in the MANO, updating the status field of the respective artifacts to <code>OSM_PRESENT</code>. If during this process, an artifact is deleted from the MANO, the respective status field will be updated to <code>OSM_MISSING</code>.</p>"},{"location":"service_inventory/","title":"Service Inventory","text":"<p>After a Service Order completion, active services with their additional characteristics are found:</p> <ul> <li>From the Order Items of a selected Service order</li> <li>from the menu of Service inventory and then selecting details of each service</li> <li>through the Service Inventory API (TMF 638 - Service Inventory Management ) </li> </ul> <p>Openslice creates a Service for the requested CFS. Customers make Service Orders and Openslice instantiates the requested Service Specifications for each Service Order Item of a Service Order. Running Services instantiated by Openslice, reside in Openslice Service Inventory. The following picture displays how Service Specifications are related to Running Services and how Running Services relate with instantiated running Network Services. </p> <p></p> <p>There is a hierarchy of services. Usually an Instantiated CFS has Supporting Services some Instantiated RFSs. Then an Instantiated RFS is related to some running NS managed by NFVO</p>"},{"location":"service_inventory/#interacting-with-an-active-service-day-2-config","title":"Interacting with an Active Service (Day 2 config)","text":"<p>In some cases, if the underlying service is configured with actions (for example in OSM Day 2 primitive actions), there are characteristics that can be modified. Usually they are named like : ::Primitive:: <p>The user can edit the characteristic with a new value. The value is propagated through the OSOM and NFVO down to the related VNF.</p>"},{"location":"service_inventory/#terminatinginactivating-a-service","title":"Terminating/Inactivating a service","text":"<p>You can terminate the service with one of the following processes:</p> <ul> <li>Select the related Service Order and terminate the Order Item. This will delete all the underlying related active services. The Order goes to ACKNOWLEDGED->INPROGRESS->COMPLETE</li> <li>To terminate or inactivate a service, select the specific service from the inventory, press Edit and set the State either to Inactive or Terminated</li> </ul> <p>Warning: if you terminate or inactivate a service the action cannot be undone. </p>"},{"location":"service_inventory/#uml-sequence-diagram","title":"uml: sequence diagram","text":"<p>Here I will embed PlantUML markup to generate a sequence diagram.</p> <p>I can include as many plantuml segments as I want in my Markdown, and the diagrams can be of any type supported by PlantUML.</p>"},{"location":"terminology/","title":"Terminology","text":"<p>OpenSlice management cluster OpenSlice administrator Service Designer</p>"},{"location":"under_construction/","title":"Under construction","text":"<p>under construction</p>"},{"location":"architecture/architecture/","title":"Architecture","text":"<p>Openslice offers the following main functionalities:</p> <ul> <li>Service Catalog Management: A CSP will have the ability to manage the Service Catalog Items, their attributes , organize in categories and decide what to make available to Customers</li> <li>Services Specifications: A CSP will be able to manage Service Specifications</li> <li>Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties</li> <li>Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs</li> <li>Service Order: The Customer will be able to place a Service Order</li> <li>Service Inventory: The Customer and Provider will be able to view deployed Services status</li> </ul> <p>The following figure displays the overall architecture of Openslice.</p> <p></p> <p>Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:</p> <ul> <li>Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility\u2019s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory</li> <li>An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service</li> <li>A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics</li> <li>An authentication server implementing Oauth2 authentication scheme</li> <li>A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)</li> <li>A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog</li> <li>A microservice that is capable to interface to an issue management system. For example it raises an issue to all related stakeholders (CSP, NOP, CSC) that a new Service Order is requested</li> <li>Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster</li> <li>A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs </li> </ul> <p>The following figure depicts how Openslice microservices are deployed</p> <p></p>"},{"location":"architecture/architecture/#deploying-openslice-in-multi-domain-scenarios","title":"Deploying Openslice in multi domain scenarios","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>See more Consuming Services From External Partner Organizations</p>"},{"location":"architecture/centrallog/","title":"Central Logging","text":"<p>Openslice follows the centralized log management concept, i.e. a type of logging solution system that consolidates the log data from different services and pushes it to a central, accessible and easy-to-use interface. </p> <p>For that reason, Elasticsearch is elected as an open-source centralized logging solution for collecting, parsing and storing logs towards a real-time data analytics tool that provides insights from any type of structured and unstructured data source.</p>"},{"location":"architecture/consumingServicesFromExternalPartners/","title":"Consuming Services From External Partner Organizations","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>In Openslice we can consume services from 3rd parties via Open APIs.</p> <p>We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:</p> <ul> <li>Import Service Specifications</li> <li>Create a Service Order</li> <li>Use the Service Inventory to query the status of the service ordered to the external partner organization</li> </ul>"},{"location":"architecture/consumingServicesFromExternalPartners/#define-an-organization-as-3rd-party-to-consume-services-east-west","title":"Define an Organization as 3rd party to consume services East-West","text":"<p>An organization must have the following characteristics in openslice catalog, like for example:</p> <p>\"EXTERNAL_TMFAPI_BASEURL\", \"http://portal.openslice.io\"</p> <p>\"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\", \"authOpensliceProvider\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTID\", \"osapiWebClientId\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\", \"secret\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2SCOPES\", scopes</p> <p>\"EXTERNAL_TMFAPI_OAUTH2TOKENURI\", \"http://portal.openslice.io/osapi-oauth-server/oauth/token\"</p> <p>\"EXTERNAL_TMFAPI_USERNAME\", \"admin\"</p> <p>\"EXTERNAL_TMFAPI_PASSWORD\", \"openslice\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATALOG_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification?type=CustomerFacingServiceSpecification\" (this is optional, fetch a list of service specs it will be relative with the BASEURL. If the url is empty then no specs will be fetched, the EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS might be used)</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/{categoryid}\" (this example will fetch all specs in a category. You may define comma separated URLs of categories API URL . This will fetch specifications of every defined category. If you want only one specific category put for example the uuid only of one category: \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d\". multiple urls should be \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d,/tmf-api/serviceCatalogManagement/v4/serviceCategory/9b6d8bf3-abd2-43c4-8154-c8c6fe5545b2\")</p> <p>\"EXTERNAL_TMFAPI_SERVICE_SPEC\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS\"= \"/test/v1/serviceorder\" (this is optional)</p> <p>An example Organization defined example in json:</p> <pre><code>\n{\n \"uuid\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"Openslice.io\",\n \"id\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"isHeadOffice\": null,\n \"isLegalEntity\": null,\n \"nameType\": null,\n \"organizationType\": null,\n \"tradingName\": null,\n \"contactMedium\": [],\n \"creditRating\": [],\n \"existsDuring\": null,\n \"externalReference\": [],\n \"organizationChildRelationship\": [],\n \"organizationIdentification\": [],\n \"organizationParentRelationship\": null,\n \"otherName\": [],\n \"partyCharacteristic\": [\n {\n \"uuid\": \"3a2f7221-e0a2-4a6b-88d1-534c8e1963f6\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"authOpensliceProvider\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"c24bb527-f178-4d38-9b93-2027c1732876\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_USERNAME\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"27e45df8-414b-44c6-a5d5-3f064e2cfd3b\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_PASSWORD\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"openslice\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"e0e470b8-6024-4014-8a18-2333e5465ce1\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"secret\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3e0de762-ac80-4c1e-a0a1-f265ff0899b4\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2SCOPES\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin;read\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"0bbb8314-f7f2-420d-9fed-ba054b15f886\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2TOKENURI\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io/osapi-oauth-server/oauth/token\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3a567de4-79eb-4006-a500-3e5229b44175\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"osapiWebClientId\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_BASEURL\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io\",\n \"alias\": null\n }\n }\n ],\n \"relatedParty\": [],\n \"status\": null,\n \"taxExemptionCertificate\": []\n}\n\n</code></pre>"},{"location":"architecture/issuemgt/","title":"Issue Management","text":"<p>For issue management support, Openslice relies on Bugzilla. Bugzilla is a ticketing tool that allows issue reporting and tracking via tickets to all relevant stakeholders. </p> <p>The figure below displays the overall issue management service architecture integrating Bugzilla as its core and how this tool interacts with other Openslice services presenting some distinctive scenarios. It should be noted that Bugzilla tickets will not only be used for bugs/errors, but also for general requests, e.g. Service Order procedure.</p> <p></p>"},{"location":"architecture/messagebus/","title":"Message Bus and exchanged Messages","text":"<p>Openslice has a Message bus which allows Openslice services to exchange messages via queues and topics.</p> <p>It is based on ActiveMQ.</p> <p>3rd party services can be attached to bus and subscribe to message topics or request resources via queues.</p>"},{"location":"architecture/messagebus/#queue-messages","title":"QUEUE MESSAGES","text":"Message Alias CATALOG_GET_SERVICEORDERS Name jms:queue:CATALOG.GET.SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_BY_ID Name jms:queue:CATALOG.GET.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body String orderid Description Return a ServiceOrder as String Json Message Alias CATALOG_UPD_SERVICEORDER_BY_ID Name jms:queue:CATALOG.UPD.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body ServiceOrderUpdate serviceOrder Headers \"orderid\"= orderid Description Returns a ServiceOrder as String Message Alias CATALOG_GET_SERVICESPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICESPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceSpecification Message Alias CATALOG_ADD_SERVICESPEC Name jms:queue:CATALOG.ADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecCreate Description Creates a ServiceSpecification and returns a ServiceSpecification as String Message Alias CATALOG_UPD_SERVICESPEC Name jms:queue:CATALOG.UPD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. --- Message Alias CATALOG_UPDADD_SERVICESPEC Name jms:queue:CATALOG.UPDADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId, \"forceId\"=forceId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. If forceId is true then tries to assign the requested ID to the spec Message Alias CATALOG_ADD_SERVICEORDER Name jms:queue:CATALOG.ADD.SERVICEORDER Type queue Destination TMF API service Producers OSOM Body ServiceOrderCreate serviceOrder Headers Description Creates a ServiceOrder and returns a ServiceOrder as String Message Alias CATALOG_GET_INITIAL_SERVICEORDERS_IDS Name jms:queue:CATALOG.GET.INITIAL_SERVICEORDERS Type queue Destination TMF API service Producers Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_IDS_BY_STATE Name jms:queue:CATALOG.GET.ACKNOWLEDGED_SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Headers \"orderstate\"= orderState Description String Json ArrayList of ServiceOrders Message Alias CATALOG_ADD_SERVICE Name jms:queue:CATALOG.ADD.SERVICE Type queue Destination TMF API service Producers OSOM Body ServiceCreate String json Headers \"orderid\"=orderid, \"serviceSpecid\"= specid Description Creates Service based an a Service Spec, Returns a Service object Message Alias CATALOG_UPD_SERVICE Name jms:queue:CATALOG.UPD.SERVICE Type queue Destination TMF API service Producers Body ServiceUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICE_BY_ID Name jms:queue:CATALOG.GET.SERVICE Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service instance <p>---| Message | | | ------------- |----------------| |Alias | CATALOG_GET_SERVICE_BY_ORDERID | |Name | jms:queue:CATALOG.GET.SERVICE_BY_ORDERID | |Type | queue | |Destination | TMF API service | |Producers | | |Body | String serviceID | |Description | returns Service IDs of a specific order given then order id |</p> Message Alias CATALOG_SERVICE_QUEUE_ITEMS_GET Name jms:queue:CATALOG.SERVICEQUEUEITEMS.GET Type queue Destination TMF API service Producers OSOM Body Description returns a LIST OF Service Queue Items --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_UPD Name jms:queue:CATALOG.SERVICEQUEUEITEM.UPDATE Type queue Destination TMF API service Producers OSOM Body String SERVICEQUEUEITEM Headers \"itemid\" = SERVICEQUEUEITEM id Description ill update a service queue item by id and return the instance --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_DELETE Name jms:queue:CATALOG.SERVICEQUEUEITEM.DELETE Type queue Destination TMF API service Producers OSOM Body Headers \"itemid\" = SERVICEQUEUEITEM id Description ill delete a service queue item by id Message Alias CATALOG_SERVICES_TO_TERMINATE Name jms:queue:CATALOG.GET.SERVICETOTERMINATE Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services with END DAte in the past --- Message Alias CATALOG_SERVICES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services from the inventory of partners Message Alias NFV_CATALOG_GET_NSD_BY_ID Name jms:queue:NFVCATALOG.GET.NSD_BY_ID Type queue Destination NFV Catalog service Producers TMF API, OSOM Body NSDid Description Returns a NetworkServiceDescriptor object Message Alias NFV_CATALOG_DEPLOY_NSD_REQ Name jms:queue:NFVCATALOG.DEPLOY.NSD_REQ Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers NSD id Description Returns a DeploymentDescriptor object as json string containing deployment info Message Alias NFV_CATALOG_UPD_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.UPD.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers DeploymentDescriptor id Description Updates and Returns a DeploymentDescriptor object as json string containing deployment info Message Alias GET_USER_BY_USERNAME Name jms:queue:GET.USER_BY_USERNAME Type queue Destination NFV Catalog service (this is temproary for now) Producers TMF API Body username Headers Description Returns a PortalUser object as json string containing user info Message Alias NFV_CATALOG_GET_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.GET.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body Deployment ID Description Returns a DeploymentDescriptor object Message Alias CATALOG_GET_EXTERNAL_SERVICE_PARTNERS Name jms:queue:CATALOG.GET.EXTERNALSERVICEPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description As a String Json ArrayList of Organizaton objects containing the characteristic name EXTERNAL_TMFAPI Message Alias CATALOG_UPD_EXTERNAL_SERVICESPEC Name jms:queue:CATALOG.UPD.EXTERNAL_SERVICESPEC Type queue Destination TMF API service Producers OSOM or maybe used by others that would like to update a Service Spec Body A serviceSpecification as json string Headers servicespecification id, orgid id Description Updates (or inserts if does not exist in catalog) an external service specification) Message Alias NFV_CATALOG_NSACTIONS_SCALE Name jms:queue:NSACTIONS.SCALE Type queue Destination TMF API service Producers OSOM or maybe used by others that would like scale a NS Body A ScaleDescriptor as json string Headers none Description performs a scale Message Alias NFV_CATALOG_NS_LCMCHANGED Name NFV_CATALOG_NS_LCMCHANGED Type topic Destination any Producers MANO client Body A json string Headers none Description A NFV_CATALOG_NS_LCMCHANGED message is published when LCM of a running NS is changed"},{"location":"architecture/messagebus/#alarms","title":"ALARMS","text":"Message Alias ALARMS_ADD_ALARM Name jms:queue:ALARMS.ADD.ALARM Type queue Publishers Consumers TMF API Body AlarmCreate Headers Description Add an alarm Message Alias ALARMS_UPDATE_ALARM Name jms:queue:ALARMS.UPDATE.ALARM Type queue Publishers Consumers TMF API Body AlarmUpdate Headers alarmid = alarm id, body (AlarmUpdate object) Description Update an alarm Message Alias ALARMS_GET_ALARM Name jms:queue:ALARMS.GET.ALARM Type queue Publishers Consumers TMF API Body Headers alarmid = alarm id Description get an alarm"},{"location":"architecture/messagebus/#event-topics-in-message-bus","title":"EVENT TOPICS IN Message Bus","text":"Message Alias EVENT_SERVICE_CREATE Name jms:topic:EVENT.SERVICE.CREATE Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_STATE_CHANGED Name jms:topic:EVENT.SERVICE.STATECHANGED Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_DELETE Name jms:topic:EVENT.SERVICE.DELETE Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICE.ATTRCHANGED Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ORDER_CREATE Name jms:topic:EVENT.SERVICEORDER.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to create a new issue Message Alias EVENT_SERVICE_ORDER_STATE_CHANGED Name jms:topic:EVENT.SERVICEORDER.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to update an issue Message Alias EVENT_SERVICE_ORDER_DELETE Name jms:topic:EVENT.SERVICEORDER.DELETE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_SERVICE_ORDER_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICEORDER.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_ALARM_CREATE Name jms:topic:EVENT.ALARM.CREATE Type topic Publishers TMF API Consumers OAS, BUGZILLA Service, CentralLog Service Body AlarmCreateEvent Headers Description The Event contains the Alarm object in payload Message Alias CATALOG_ADD_RESOURCE Name jms:queue:CATALOG.ADD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceCreate Headers Description The Body contains the ResourceCreate object to add Message Alias CATALOG_UPD_RESOURCE Name jms:queue:CATALOG.UPD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceUpdate Headers resourceid , propagateToSO Description The Body contains the ResourceCreate object to update Message Alias CATALOG_GET_RESOURCE_BY_ID Name jms:queue:CATALOG.GET.RESOURCE Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceCreate object to update Message Alias CATALOG_RESOURCES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type topic Publishers TMF API Consumers any Body none Headers none Description retrieve all active services of partners Message Alias CATALOG_ADD_RESOURCESPEC Name jms:queue:CATALOG.ADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationCreate Headers Description The Body contains the ResourceSpecificationCreate object to add Message Alias CATALOG_UPD_RESOURCESPEC Name jms:queue:CATALOG.UPD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationUpdate Headers resourceSpecId Description The Body contains the ResourceSpecificationCreate object to update Message Alias CATALOG_GET_RESOURCESPEC_BY_ID Name jms:queue:CATALOG.GET.RESOURCESPEC_BY_ID Type topic Publishers TMF API Consumers any Body resourceSpecid Headers Description The Body contains the object id to find Message Alias CATALOG_UPDADD_RESOURCESPEC Name jms:queue:CATALOG.UPDADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceSpecificationCreate object to update or create if not exist Message Alias EVENT_RESOURCE_CREATE Name jms:topic:EVENT.RESOURCE.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_STATE_CHANGED Name jms:topic:EVENT.RESOURCE.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_DELETE Name jms:topic:EVENT.SERVICE.RESOURCE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.RESOURCE.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias CATALOG_GET_LCMRULE_BY_ID Name jms:queue:CATALOG.GET.LCMRULE Type topic Publishers TMF API Consumers any Body lcmid Headers Description The Body contains the LCMRuleSpec object Message Alias CATALOG_GET_LCMRULES_BY_SPECID_PHASE Name jms:queue:CATALOG.GET.LCMRULES_BY_SPECID_PHASE Type topic Publishers TMF API Consumers any Body Headers header.servicespecid, header.phasename Description The Body contains the LCMRuleSpec objects of the specific Service Spec and the specific phase Message Alias CATALOG_GET_SERVICETESTSPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICETESTSPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceTestSpecification Message Alias CATALOG_ADD_SERVICETEST Name jms:queue:CATALOG.ADD.SERVICETEST Type queue Destination TMF API service Producers OSOM Body ServiceTestCreate String json Headers \"orderid\"=orderid, \"serviceTestSpecid\"= specid Description Creates Service Test based an a Service Test Spec, Returns a ServiceTest object Message Alias CATALOG_UPD_SERVICETEST Name jms:queue:CATALOG.UPD.SERVICETEST Type queue Destination TMF API service Producers Body ServiceTestUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service test by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICETEST_BY_ID Name jms:queue:CATALOG.GET.SERVICETEST Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service TEST instance Message Alias CRD_DEPLOY_CR_REQ Name jms:queue:CRD.DEPLOY.CR_REQ Type queue Destination CRD service Producers OSOM Body CR spec as String Headers related service id Description Returns a String object containing deployment info Message Alias CRD_PATCH_CR_REQ Name jms:queue:CRD.PATCH.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing PATCH info Message Alias CRD_DELETE_CR_REQ Name jms:queue:CRD.DELETE.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing deletion info"},{"location":"architecture/nfvapi/","title":"API interaction","text":""},{"location":"architecture/nfvapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/nfvapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all vxfs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4\" http://localhost:13000/osapi/admin/vxfs\n</code></pre> <p>Example response:</p> <pre><code>[\n {\n \"id\": 1,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"a954daf2-16da-4b7e-ae42-4825936d453c\",\n \"name\": \"cirros_vnfd\",\n \"iconsrc\": \"/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png\",\n \"shortDescription\": \"cirros_vnfd\",\n \"longDescription\": \"Simple VNF example with a cirros\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz\",\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": 1568981107000,\n \"categories\": [\n {\n \"id\": 3,\n \"name\": \"Service\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 2,\n \"name\": \"Networking\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"descriptor\": \"vnfd-catalog:\\n vnfd:\\n - connection-point:\\n - name: eth0\\n type: VPORT\\n description: Simple VNF example with a cirros\\n id: cirros_vnfd\\n logo: cirros-64.png\\n mgmt-interface:\\n cp: eth0\\n name: cirros_vnfd\\n short-name: cirros_vnfd\\n vdu:\\n - count: 1\\n description: cirros_vnfd-VM\\n id: cirros_vnfd-VM\\n image: cirros034\\n interface:\\n - external-connection-point-ref: eth0\\n name: eth0\\n position: '1'\\n type: EXTERNAL\\n virtual-interface:\\n bandwidth: '0'\\n type: VIRTIO\\n vpci: 0000:00:0a.0\\n name: cirros_vnfd-VM\\n vm-flavor:\\n memory-mb: 512\\n storage-gb: 1\\n vcpu-count: 1\\n vendor: OSM\\n version: '1.0'\\n\",\n \"descriptorHTML\": \"<h3>cirros_vnfd</h3><br><b>Vendor: </b>OSM<br><b>Version: </b>1.0<br><b>Description: </b>Simple VNF example with a cirros<br><b>VM Count: </b>1<br><b>vCPU Count: </b>1<br><b>Memory: </b>512 MB<br><b>Storage: </b>1 GB<br>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 1,\n \"name\": \"cirros034\",\n \"uuid\": \"d4549610-8abd-42ad-97f4-0a64e1c93977\",\n \"shortDescription\": \"Automatically created during vxf cirros_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 1,\n \"name\": \"cirros_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ADMIN\",\n \"MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n },\n {\n \"id\": 2,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"4ab80095-a63e-4fe7-8598-e1c7e880706e\",\n \"name\": \"cirros_sriov_vnfd\",\n \"iconsrc\": null,\n \"shortDescription\": \"cirros_sriov_vnf\",\n \"longDescription\": \"Simple VNF example with a cirros SRIOV interface\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz\",\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": 1568981100000,\n \"categories\": [\n {\n \"id\": 4,\n \"name\": \"tyu\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 5,\n \"name\": \"tyi\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"descriptor\": \"vnfd:vnfd-catalog:\\n vnfd:\\n - connection-point:\\n - name: eth0\\n type: VPORT\\n - name: eth1\\n type: VPORT\\n description: Simple VNF example with a cirros SRIOV interface\\n id: cirros_sriov_vnfd\\n logo: cirros-64.png\\n mgmt-interface:\\n cp: eth0\\n name: cirros_sriov_vnf\\n short-name: cirros_sriov_vnf\\n vdu:\\n - count: 1\\n description: cirros_sriov_vnfd-VM\\n guest-epa:\\n cpu-pinning-policy: DEDICATED\\n cpu-thread-pinning-policy: PREFER\\n mempage-size: SMALL\\n numa-node-policy:\\n mem-policy: STRICT\\n node:\\n - id: '1'\\n node-cnt: '1'\\n id: cirros_sriov_vnfd-VM\\n image: cirros-0.3.6-x86_64\\n interface:\\n - external-connection-point-ref: eth0\\n name: eth0\\n position: '1'\\n type: EXTERNAL\\n virtual-interface:\\n bandwidth: '0'\\n type: VIRTIO\\n vpci: 0000:00:0a.0\\n - external-connection-point-ref: eth1\\n name: eth1\\n position: '2'\\n type: EXTERNAL\\n virtual-interface:\\n type: SR-IOV\\n name: cirros_sriov_vnfd-VM\\n vm-flavor:\\n memory-mb: 4096\\n storage-gb: 10\\n vcpu-count: 4\\n vendor: OSM\\n version: '1.0'\\n\",\n \"descriptorHTML\": \"<h3>cirros_sriov_vnf</h3><br><b>Vendor: </b>OSM<br><b>Version: </b>1.0<br><b>Description: </b>Simple VNF example with a cirros SRIOV interface<br><b>VM Count: </b>1<br><b>vCPU Count: </b>1<br><b>Memory: </b>4096 MB<br><b>Storage: </b>10 GB<br>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 2,\n \"name\": \"cirros-0.3.6-x86_64\",\n \"uuid\": \"be121176-1d62-4a1b-a3c1-7dce2e069d22\",\n \"shortDescription\": \"Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 2,\n \"name\": \"cirros_sriov_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ROLE_ADMIN\",\n \"ROLE_MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/nfvweb/","title":"Openslice NFV Web Portal","text":"<p>The NFV Web Portal offers a domain-specific UI to manage NFV Services.</p> <p>Indicatively, the portal can be used to: - Register new a new MANO provider (e.g. OSM) - Synchronize the onboarded VNF/NS packages, and the VIMs of the registered MANO provider - Onboard/Delete VNF/NS packages on specific MANO provider - Deploy a NS to a target MANO provider</p> <p>More information can be found at NFV Services.</p>"},{"location":"architecture/oauth/","title":"Authentication Server","text":"<p>Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment </p> <p>API users needs to authenticate. All APIs (except grant token request) must include Bearer token in request Authorization header.</p>"},{"location":"architecture/oauth/#oauth-token","title":"OAuth token","text":"<p>Get first an oauth token, using your username and password. </p> <pre><code>curl -X POST http://portal.openslice.io/auth/realms/openslice/protocol/openid-connect/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=demouser' -d 'password=demouser' -d 'grant_type=password' -d 'client_id=osapiWebClientId' \n</code></pre> <p>response:</p> <pre><code> {\"access_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw\",\"expires_in\":300,\"refresh_expires_in\":1800,\"refresh_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwZjUxMDk5Yy0wNTIzLTRjNGQtODM0Zi1iNDc0YzBjOTA1MzkifQ.eyJleHAiOjE1ODgyNDIwNzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiZmViOTg5NWEtOTY5ZS00MzIzLWJjY2QtZTY2YzQ0NGE1MzJlIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0Iiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.cDTx9BE1Df8EfGYm3VLr_MNFeymxZtJhMtlK7PVbIuk\",\"token_type\":\"bearer\",\"not-before-policy\":1586797346,\"session_state\":\"3350f493-6627-4373-8544-defd27ad3c74\",\"scope\":\"profile email\"}\n\n</code></pre> <p>The <code>access_token</code> will be used next as a Bearer.</p> <pre><code>curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer yJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1MjQsImlhdCI6MTU4ODI0MDIyNCwianRpIjoiYjg0NGYxZDAtMzk3Mi00YTMyLThiMWEtZDAxMDY3OGZjMTQ4IiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tY2xpIiwic2Vzc2lvbl9zdGF0ZSI6ImFmMmMzZmY1LTE4YWQtNDFkNC1hYTAyLTFlMGJkNzNmOTM5MSIsImFjciI6IjEiLCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiZGVtb3VzZXIifQ.SMtgV1E44_K_MQumGXZtWsLGVhYNaoM8Pk-DiFIZtUP4Zu-ervOsxHVQMX1frgVERR4jJidBcSshy9TnJ3UjF4l33WujHltbs-1UPy-gaIufVuEpl8RmbjOti3Up70vLfLXbzb6kN6WaahgobWXlbJsSXXwaBPQP6vSX5KigCa8TmzXcuqom14lOrlU-RB2zQTlJ30p7d9ag-a7o3I5m9GZWLJCZW2UYMl1JkskTHKgilA8HFQY4C9DYwWu8YDMyzqQSNumrTlURalBFidFbZvb1kp4dAyct8TysSWSbxxiwaL2RX1PWUqk-5Fpc1Q6BnBC8muMheiukFuoSkuADAg'^C\nubuntu@portal:~$ curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw'\n\nResponse:\n\n\n[{\"uuid\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"lastUpdate\":\"2020-03-11T23:19:05Z\",\"@baseType\":\"BaseEntity\",\"@schemaLocation\":null,\"@type\":\"ServiceCatalog\",\"href\":null,\"name\":\"Example Facility Services\",\"description\":\"Example Facility Services\",\"lifecycleStatus\":\"Active\",\"version\":\"1.0\",\"validFor\":{\"endDateTime\":\"2039-11-20T23:07:21Z\",\"startDateTime\":\"2019-11-20T23:07:21Z\"},\"relatedParty\":null,\"id\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"category\":[{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"Generic Services\",\"@referredType\":null,\"id\":\"98b9adf1-a1d6-4165-855f-153ddc2131b1\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"External\",\"@referredType\":null,\"id\":\"08ffdb3c-6237-45d0-9f3a-d43b5fc5f0b6\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"eMBB\",\"@referredType\":null,\"id\":\"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"}]}]\n\n\n</code></pre>"},{"location":"architecture/osom/","title":"Openslice Service Orchestration and Order Management - OSOM","text":"<p>OSOM is a service responsible for:</p> <ul> <li>Service Order Management (SOM)</li> <li>Service Orchestration (SO)</li> </ul> <p>It uses open source Flowable Business process engine (https://www.flowable.org) .</p> <p>A Service Order follows the states as defined in TMF641 specification: </p> <p></p>"},{"location":"architecture/osom/#initial-state","title":"Initial state","text":"<p>When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.</p> <p></p> <p>Administrators are notified usually from the Ticketing System of a new order. They login to Openslice and change the State of the order either to ACKNOWLEDGED or REJECTED. If ACKNOWLEDGED they can Propose a startDate, add Notes, and add any additional service items</p>"},{"location":"architecture/osom/#order-scheduler","title":"Order scheduler","text":"<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p> <p></p> <p></p> <p>It retrieves all orders that are in ACKNOWLEDGED state and if the start date is in time it will initialize the process by settingn the order in IN_PROGRESS state. Finally the Start Order Process will start.</p>"},{"location":"architecture/osom/#start-order-process","title":"Start order process","text":"<p>This process for now is a draft simple prototype to make a simple orchestration via NFVO. Here the actual Services (TMF638/640 model) are created and attached to Service Order and Service Inventory.</p> <p></p> <p></p> <p>We expect here to check which tasks can be orchestrated by NFVO and which by human. We create the equivalent Services(TMF638/640 model) for this order.</p> <ol> <li>During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory</li> <li>The Services(TMF638 model) are assigned to the Order O1 In supportService List</li> <li>Each OrderItem OI1 is related to one serviceSpecification</li> <li>Each ServiceSpecification has also related serviceSpecRelationships</li> <li>So if we receive an order O1 for a ServiceSpec A which relates to (a bundle of) 3 specs(2 CFS, 1 RFS) we do the following:<ol> <li>Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1</li> <li>We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS) </li> <li>At this point the order will have 1 Local Service Orchestration Process(S_A), 2 supportingServices refs(S_C1, S_C2) and 1 supportingResource(S_R1)</li> <li>The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory</li> <li>Service S_A will have: <ol> <li>startMode 1: Automatically by the managed environment</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> </ol> </li> <li>Services S_C1 and S_C2 we decide that cannot be orchestrated then they have <ol> <li>startMode: 3: Manually by the Provider of the Service</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> <li>If the CFS is a bundle spec it is further recursively orchestrated </li> </ol> </li> <li>Service S_R1 will have <ol> <li>startMode 1: Automatically by the managed environment.</li> <li>State: RESERVED</li> <li>IF The Service has the characteristic CharacteristicByName( \"NSDID\") it will be further processed by the NFVO </li> </ol> </li> </ol> </li> </ol> <p>There will be two instances of task \"User Task Manual Complete Service\" each for Services S_C1 and S_C2. The task is Transient for now. It displays only the services that are not automated! Here is a flow for future:</p> <ol> <li>We wait here for human decision.</li> <li>From API we get a result: a. If set to ACTIVE/TERMINATED then we complete the task b. In any other state we stay in this task until it is resolved as in step a c. The Status of ORDER O1 is also updated to PARTIAL</li> </ol> <p>There will be an instance of NFVODeploymentRequest process each for Service S_R1. (see later)</p> <ol> <li>This process is related with the NFVO orchestration</li> <li>It will send a msg to NFVO(s?) for a specific deployment request</li> </ol> <p>All services in \"Order Complete\" are in a status:</p> <ol> <li>Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED</li> <li>The Status of ORDER O1 is also updated to COMPLETED or PARTIAL (in case we have some services running) or FAILED (in cases we have errors)</li> </ol> <p>A Service follows the states as defined in TMF638 Service Inventory specification: </p> <p></p>"},{"location":"architecture/osom/#nfvodeploymentrequest-process","title":"NFVODeploymentRequest process","text":"<p>This process is related with the NFVO orchestration It will send a msg to NFVO(s?) for a specific deployment request Then it checks the deployment status. It will wait 30 secs each time until the deployment is running (or failed)</p>"},{"location":"architecture/osom/#check-in-progress-orders-process","title":"Check In Progress orders process","text":"<p>Every 1 minute the \"Check In Progress Orders\" process is executed checking if a supported Service changed state (i.e. to ACTIVE) then the whole Order will change state (e.g. go to COMPLETED)</p> <p></p>"},{"location":"architecture/osom/#external-service-provider-deployment-request-process","title":"External Service Provider Deployment Request process","text":"<p>This process contains tasks for submitting order requests to external partners. - Submit Order To External Service Provider Task: This task creates automatically a Service Order request to a 3rd party provider SO that hosts the Service Specification - Check external service order fulfillment task: This task Check external partner for Service creations and updates our local inventory of services the service characteristics of remote Service Inventory</p>"},{"location":"architecture/osom/#fetch-partner-services-process","title":"Fetch Partner Services Process","text":"<p>Every 2 minutes the \"fetchPartnerServicesProcess\" process is executed checking remote Partner Organizations for changes in the published catalogues. The Fetch and Update External Partner Services Task is executed in paralle l for each Partner Organization </p>"},{"location":"architecture/osom/#local-service-orchestration-process","title":"Local Service Orchestration Process","text":"<p>This process handles automatically services that need to be further orchestrated or processed by OSOM. For example, for a CFS Bundled service we create such automated service instances that just aggregate the underlying services. </p>"},{"location":"architecture/tmfapi/","title":"TMF OpenAPI specification","text":"<p>PLease check the complete specification here.</p>"},{"location":"architecture/tmfapi/#api-interaction","title":"API interaction","text":""},{"location":"architecture/tmfapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/tmfapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all Service Catalogs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTc4NTA1MDcyLCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiMTFlNGYxYTUtZDY0Ny00YzA1LWE0ZGMtYWFhYzUyMjk4YzMwIiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.gm7cKdusDrdMRkxEiFU5sENKGRC1xwVj2SgPRmE9xxx\" -H \"accept: application/json;charset=utf-8\" -X GET \"http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog\"\n\n</code></pre> <p>response:</p> <pre><code>[\n {\n \"uuid\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"lastUpdate\": \"2019-12-19T10:45:55Z\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": \"ServiceCatalog\",\n \"href\": null,\n \"name\": \"Example Facility Services\",\n \"description\": \"Example Facility Services\",\n \"lifecycleStatus\": \"Active\",\n \"version\": \"1.0\",\n \"validFor\": {\n \"endDateTime\": \"2039-11-20T23:07:21Z\",\n \"startDateTime\": \"2019-11-20T23:07:21Z\"\n },\n \"relatedParty\": null,\n \"id\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"category\": [\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"eMBB\",\n \"@referredType\": null,\n \"id\": \"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"\n },\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"Generic Services\",\n \"@referredType\": null,\n \"id\": \"98b9adf1-a1d6-4165-855f-153ddc2131b1\"\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/tmfweb/","title":"Openslice TMF Web Portal","text":"<p>Openslice comprises of a web landing page that navigates to the respective TMF Portal.</p> <ul> <li>Services Portal</li> <li>Products Portal</li> <li>Testing Portal</li> <li>Resources Portal</li> </ul> <p>The landing page and the TMF portals (Services, Products, Testing, Resources) are written in Angular and are maintained under the same Angular project.</p> <p>Following you may find the scope each portal focuses on and the main TMF APIs it supports.</p> <p>Services Portal is a designated portal for the: - Service Designer - To design Customer Facing Services as bundles of Resource Facing Services that map to specific Resourses (e.g. NFV, Testing, General Resources). Then, it is charged with the designed Services' exposure to public Service Catalogs. - Service Customer - To browse the public Service Catalogs and order the offered Services. The fulfilment process of the Service Order is also captured and the final deployed Services are exposed to the Customer.</p> <p>Products Portal is a designated portal for the: - Product Designer - To design Products as bundles of available Services. Then, it is charged with the designed Products' exposure to public Product Catalogs. - Product Customer - To browse the public Product Catalogs and navigate to the respective offered Services.</p> <p>Testing Portal is a designated portal for the: - Testing Designer - To design Tests and provide the testing scripts as attachments to the latter. The Tests can be imported as Services at the Services Portal, and can be included in a Service Bundle.</p> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure.</p> TMF620 TMF632 TMF633 TMF634 TMF638 TMF639 TMF640 TMF641 TMF642 TMF653 TMF685 Services Portal x x x x x x Products Portal x x Testing Portal x x Resources Portal x x x x <p>From the landing page, the user can also navigate towards the NFV portal. See NFV WEB.</p>"},{"location":"architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/","title":"CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster","text":""},{"location":"architecture/CRIDGEforDevelopers/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/CRIDGEforDevelopers/CRIDGEforDevelopers/#approach","title":"Approach","text":"<p>OSL in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. The OSL Orchestrator (OSOM) will manage the lifecycle of the Service Order.</li> <li>OSOM creates a Resource in OSL Resource inventory and requests (via CRIDGE) a new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol> <p></p> <p>The provided image illustrates the architecture and workflow of the CRIDGE service, showing how it interacts with other components within a Kubernetes (K8s) cluster. Here is an explanation of the key components and flow in the diagram:</p> <ul> <li>Other OSL Services: This box represents various OSL services such as Service Spec Catalogue, Resource Spec Catalogue, Service Inventory, Resource Inventory, and OSOM (OpenSlice Service Orchestration and Management).</li> <li>Service Bus: This is the communication layer that facilitates interaction between the CRIDGE service and other OSL services.</li> <li>CRIDGE: CRIDGE acts as a bridge that converts CRDs (Custom Resource Definitions) to TMF (TM Forum) APIs and models. It enables the creation and management of Custom Resources (CRs) in the Kubernetes cluster.</li> <li> <p>K8s API: The Kubernetes API server, which is the central control point for managing the Kubernetes cluster. CRIDGE interacts with the K8s API to manage CRDs and CRs.</p> <p>CRD (Custom Resource Definition): A CRD is a way to define custom resources in Kubernetes cluster-wise. It allows the extension of Kubernetes API to create and manage user-defined resources. Example :</p> </li> </ul> <pre><code> apiVersion: apiextensions.k8s.io/v1\n kind: CustomResourceDefinition\n metadata:\n name: myresource.example.com\n</code></pre> <ul> <li>Namespaces: Kubernetes namespaces provide a way to partition resources within a cluster. The diagram shows that multiple namespaces (nsxx, nsyy, nsz) can be managed by CRIDGE.</li> </ul> <p>CR (Custom Resource): A CR is an instance of a CRD. It represents the actual custom resource that is managed within the Kubernetes cluster. Example shown in different namespaces:</p> <pre><code> apiVersion: example.com/v1\n kind: Myresource\n metadata:\n name: example_resource_1\n</code></pre> <p>In a nutchell:</p> <ul> <li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> <li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> <li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> <li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>> The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n> Instances of Myresource are created in various namespaces, each with unique names like example_resource_1.\n</code></pre> </li> </ul>"},{"location":"architecture/CRIDGEforDevelopers/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/CRIDGEforDevelopers/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/CRIDGEforDevelopers/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/CRIDGEforDevelopers/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/CRIDGEforDevelopers/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/CRIDGEforDevelopers/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":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/","title":"Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>To illustrate the powerful concept of Kubernetes operators and how they can be utilized to offer a service through OpenSlice, let's provide an example of a \"Calculator as a Service.\" </p> <p>This example will demonstrate the flexibility and capabilities of Kubernetes operators in managing custom resources and automating operational tasks.</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#offering-calculator-as-a-service-through-openslice","title":"Offering \"Calculator as a Service\" through OpenSlice","text":"<ul> <li>We have a service that can accept two integers and an action (SUM, SUB, etc) and returns a result</li> <li>We would like to offer it as a Service through OpenSlice</li> <li>So when a user orders it with some initial parameters, OpenSlice will create it and return the result</li> <li>Also while the service is active, we can do further calculations, until we destroy it.</li> </ul> <p>Assume the following simple CRD of a calculator model accepting two params (spec section) and an action and returning a result (status section)</p> <p>The controller (the calculator code) is implemented in any language and is installed in a Kubernetes cluster</p> <pre><code>\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n name: mycalculators.examples.osl.etsi.org\nspec:\n group: examples.osl.etsi.org\n names:\n kind: MyCalculator\n plural: mycalculators\n singular: mycalculator\n scope: Namespaced\n versions:\n - name: v1alpha1\n schema:\n openAPIV3Schema:\n properties:\n spec:\n properties:\n parama:\n type: integer\n paramb:\n type: integer\n action:\n type: string\n type: object\n status:\n properties:\n result:\n type: integer\n status:\n type: string\n type: object\n type: object\n served: true\n storage: true\n subresources:\n status: {}\n</code></pre> <p>Request to the cluster (through e.g. kubectl apply)</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p>Response</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n\u00a0 creationTimestamp: '2023-12-05T12:26:07Z\u2019\n\n<snip>\n\nstatus:\n\u00a0 result: 350\n\u00a0 status: CALCULATED\nspec:\n\u00a0 action: SUM\n\u00a0 parama: 170\n\u00a0 paramb: 180\n\n</code></pre> <p>To perform this through OpenSlice as a Service Specification ready to be ordered we need to do the following:</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#crd-is-saved-automatically-as-resource-specification","title":"CRD is saved automatically as Resource Specification","text":"<p>As soon as the CRD is deployed in the cluster (e.g. by your admin via kubctl or via any installation through the internet) it is automatically transformed and is available in OpenSlice catalogs as a Resource Specification.</p> <ul> <li>See also the fully qualified name of the resource specification. <ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@docker-desktop@https://kubernetes.docker.internal:6443/</li> <li>The resource specification name is quite unique, so you can install the CRD in many clusters around the internet. Each CRD on each cluster will appear here, for example:<ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@default_cluster@https://10.10.10.8:6443/</li> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@edge1_cluster@https://172.16.10.10:6443/</li> </ul> </li> <li>Having this OpenSlice can manage resources in multiple clusters</li> </ul> </li> </ul> <p></p> <p>See also the detailed characteristics. See how OpenSlice makes all characteristics automatically flat and expanded with key-value style</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-to-users","title":"Expose to Users","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#start-by-creating-a-resourcefacingservicespecification","title":"Start by Creating a ResourceFacingServiceSpecification","text":"<p>From the UI menu create a new Service Specification</p> <p> </p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#creation-of-crd-related-characteristics","title":"Creation of CRD-related characteristics","text":"<ul> <li>We need now to adjust some characteristics of this CRD as Resource Specification.</li> <li>OpenSlice transalted automatically the CRD spec in a flat list of characteristics.So the \"spec\" section from the original yaml for example, is now unfold into: spec, spec.parama, spec.paramb, etc. the same for \"status\" object</li> <li> <p>We need to make OpenSlice aware of when the service will be active. </p> <ul> <li>So we go to characteristic _CR_CHECK_FIELD and we define that the field that shows the status of the service is the characteristic \"status.status\" (is a text field) </li> <li>Then we go to _CR_CHECKVAL_AVAILABLE and we define the value CALCULATED, which signals the following: When the characteristic \"status.status\" has the value \"CALCULATED\" then OpenSlice will mark the underlying service as \"ACTIVE\"</li> <li>We need also to define the yaml file that OpenSLice will use to create the new resource in the kubernetes cluster</li> <li>We insert the YAML in the characteristic _CR_SPEC</li> </ul> <p>the _CR_SPEC is: </p> </li> </ul> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p></p> <p>However the values are fixed. How do we allow a user to pass parameters through OpenSlice</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-in-catalog","title":"Expose in Catalog","text":"<p>Create a new CustomerFacingServiceSpecification</p> <pre><code>- Go to the menu Service Specification>New Service Specification\n- Create a service My Calulator and mark it as a Bundle\n- Go to Service Specification Relationships and add MyCalculatorRFS\n- The service will be automatically transformed to a \"CustomerFacingServiceSpecification\"\n- Add the following characteristics as the image shows:\n</code></pre> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#allow-users-to-pass-new-values-through-openslice","title":"Allow users to pass new values through OpenSlice","text":"<p>We need to Create LCM rules in CustomerFacingServiceSpecification:</p> <pre><code>- The goal of the rules is to allow the user to pass parameters to the actual resource towards the cluster.\n- we will create one rule that will pass the parameters just before creating the service (PRE_PROVISION phase)\n- we will create one rule that will pass the parameters while the service is active (SUPERVISION phase)\n- The rules will be the same\n</code></pre> <p></p> <p>If we see one rule it will look like the following: </p> <ul> <li>We need to change the _CR_SPEC characteristic of the referenced ResourceFacingServiceSpecification</li> <li>First bring a block from Service>Relationships>Service Refs and drop the \"Service MyCalculatorRFS\" block</li> <li>Then add a list block from Lists</li> <li>Then add the block that modifies a referenced characteristic from Service>Relationships>Service Refs the block \"Set value to characteristic of a Referenced Service\"</li> <li>Add a block for text _CR_SPEC </li> <li>We use a block that changes a String according to variables Text>\"A formatted text replacing variables from List\"</li> <li>See that we have as Input string the YAML string lines<ul> <li>see that parama, paramb has a %d (they accept integers), action is %s (accepts a string)</li> <li>See that the variables tha will replace the %d, %d and %s are an list<ul> <li>the first %d will be replaced with the value from characteristic spec.parama</li> <li>the second %d will be replaced with the value from characteristic spec.paramb</li> <li>the %s will be replaced with the value from characteristic spec.action</li> </ul> </li> </ul> </li> </ul> <p>If we see the SUPERVISION rule it will look like the following:</p> <ul> <li>It contains also the Result field, which takes the value from the referenced service</li> <li>Add a block for the Result field from Service>Number blocks</li> <li>Add a str to int block from Number blocks</li> <li>Add Service>Relationships>Service Refs and drop the input block [Service MyCalculatorRFS] \"Get Service details from current context running service\" and select from the drop down the \"serviceCharacteristicValue\"</li> <li>Add as name the \"status.result\" </li> </ul> <p></p> <p></p> <p>Expose it then to a catalogue for orders through the Service Categories and Service Catalogs</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#order-the-service","title":"Order the Service","text":"<p>When a user orders the service, it will look like this:</p> <p></p> <ul> <li>After the Service Order we have 2 services in service inventory on CFS and on RFS. Both have references to values</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The Actual resources are running in the Kubernetes cluster managed by OpenSlice</li> <li>The result is in the characteristic status.result of the running service</li> </ul> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#modify-the-running-service","title":"Modify the running service","text":"<p>The user can modify the service</p> <p></p> <ul> <li>After a while the update is applied to the cluster, the controller will pick up the resource update and patch the resource</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The result will be available to the respective characteristic \"Result\" after a few seconds, as need to go through various steps (OpenSlice orchestrator, down to kubernetes, to Calculator controller and back)</li> </ul> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/","title":"Expose and manage Kubernetes Custom Resource Definitions (Operators) in a Kubernetes Cluster","text":"<p>OpenSlice is capable of exposing Kubernetes Resources and Definitions as Service Specifications</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>OpenSlice is capable to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OpenSlice services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>OpenSlice capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <ul> <li>OpenSlice can expose CRs in service catalogs, facilitating their deployment in complex scenarios.</li> <li>These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#approach","title":"Approach","text":"<p>OpenSlice in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. </li> <li>OSOM creates a Resource in OSL Resource inventory and requests new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OpenSlice Resource Inventory need to be aware of these events.</p> <p>When installing OpenSlice you can configure at least one management cluster. OpenSlice connects via a provided kubeconf</p> <ul> <li>On Start up OSL tries to register this cluster and context to OSL catalogs.</li> <li>After the registration of this cluster as a Resource in OSL OSL is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL</li> <li>Resources created by OpenSlice have labels, e.g. (org.etsi.osl.*)</li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>A CRD by default is exposed as a Resource Specification</p> <p>To ensure unique names across the clusters that OpenSlice can manage, the name of a CRD is constructed as follows:</p> <p><code>Kind @ ApiGroup/version @ ContextCluster @ masterURL</code></p> <p>For example you might see resource Specifications like:</p> <pre><code>- ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n- ```IPAddressPool@metallb.io/v1beta1@kubernetes@https://10.10.10.144:6443/```\n- ```Provider@pkg.crossplane.io/v1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p>All attributes of the CRD are translated into characteristics</p> <p>The following specific characteristics are added:</p> <pre><code> - _CR_SPEC: Used for providing the json Custom Resource description to apply\n - _CR_CHECK_FIELD: Used for providing the field that need to be checked for the resource status\n - _CR_CHECKVAL_STANDBY: Used for providing the equivalent value from resource to signal the standby status\n - _CR_CHECKVAL_ALARM: Used for providing the equivalent value from resource to signal the alarm status\n - _CR_CHECKVAL_AVAILABLE: Used for providing the equivalent value from resource to signal the available status\n - _CR_CHECKVAL_RESERVED: Used for providing the equivalent value from resource to signal the reserved status\n - _CR_CHECKVAL_UNKNOWN: Used for providing the equivalent value from resource to signal the unknown status\n - _CR_CHECKVAL_SUSPENDED: Used for providing the equivalent value from resource to signal the suspended status\n</code></pre> <ol> <li> <p>Create a new Service Specification and use this Resource Specification in Resource Specification Relationships</p> <ul> <li>Then the Service Specification is saved as ResourceFacingServiceSpecification</li> </ul> <p>1.1. You can give at this stage values to the characteristics:</p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>1.2. You can now create LCM rules if you wish</p> </li> <li> <p>Create a new Service Specification and use the Resource Facing Service Specification in Service Specification Relationships</p> <ul> <li>Then the Service Specification is saved as CustomerFacingServiceSpecification</li> </ul> <p>2.1. You can give at this stage values to the characteristics: </p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>2.2. You We can create LCM rules for this new Service Specification</p> <p>2.3. You Expose configurable values for users to configure during service order</p> </li> </ol> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM - OpenSlice Service Orchestrator, checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#mapping-the-cr-lifecycle-that-is-defined-in-the-crd-with-the-openslice-tmf-based-resource-lifecycle","title":"Mapping the CR lifecycle that is defined in the CRD with the OpenSLice (TMF-based) resource Lifecycle","text":"<p>OpenSlice adds automatically as we see the following characteristics: </p> <pre><code> - _CR_CHECK_FIELD\n - _CR_CHECKVAL_STANDBY\n - _CR_CHECKVAL_ALARM\n - _CR_CHECKVAL_AVAILABLE\n - _CR_CHECKVAL_RESERVED\n - _CR_CHECKVAL_UNKNOWN\n - _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>These characteristics instrument OpenSlice services to manage and reflect the lifecycle of a kubernetes resource to OpenSlice's (TMF based) lifecycle</p> <ul> <li>_CR_CHECK_FIELD: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>_CR_CHECKVAL_STANDBY: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_ALARM: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_AVAILABLE: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_RESERVED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_UNKNOWN: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#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":"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/HELM_Installation_aaS_Jenkins_Example/#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/HELM_Installation_aaS_Jenkins_Example/#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/HELM_Installation_aaS_Jenkins_Example/#example-offer-jenkins-as-a-service-via-openslice","title":"Example: Offer Jenkins as a Service via Openslice","text":"<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> <ol> <li>Drag-Drop the _CR_SPEC characteristic of jenkinsrfs from the Service>Text blocks</li> <li>Drag-Drop Text>Formatted text block</li> <li>Drag-Drop Text>Multi-line text input block</li> <li>Copy paste the YAML text</li> <li>Change the spec: destination:namespace to the value %s</li> <li>Drag-Drop Lists>Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context>Current Service Order block and select the id. Connect it to the List</li> <li>Save the PRE_PROVISION Rule</li> </ol>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#expose-the-service-to-your-users","title":"Expose the service to your users","text":"<p>Expose then as CustomerFacingServiceSpecification by using the previous RFSS as Service Specification Relationship 1. Create a Jenkins service and mark as Bundle and save it 2. Go to Service Specification Relationships and assign Jenkinsrfs 3. Add also a Logo if you wish</p> <p> </p> <p>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>"}]} \ 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 Resoruce portal allows users to access resource specifications and running resources in resource inventory.</li> <li>The NFV portal allows users to manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The teting portal allows Service Providers to manage test artifacts</li> <li>The Products portal allows Service Providers to expose services as products</li> </ul>"},{"location":"#openslice-for-service-consumers","title":"OpenSlice for Service Consumers","text":"<p>OpenSlice allows Service Consumers to browse the available offered service specifications in a self-service manner. It also supports TMFORUM Northbound APIs regarding Service Catalog Management, Ordering, Resource, etc. There are various portals offering UI friendly access to users acting as Service Consumers:</p> <ul> <li>The Services portal allows Service Consumers to select and order predefined services.</li> <li>The Resoruce portal allows users to access running resources in resource inventory.</li> <li>The NFV portal allows users to self-manage NFV artifacts and onboard them to a target MANO/NFV Orchestrator.</li> <li>The testing portal allows Service Consumers to manage test artifacts</li> <li>The Products portal allows Service Consumers to expose services as products</li> </ul> <p>3rd party applications can use OpenSlice through TMForum Open APIs.</p>"},{"location":"#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":"deployment/","title":"OpenSlice Deployment","text":"<p>This section is meant to guide the user through the installation of OpenSlice. </p>"},{"location":"deployment/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>Following, you may thorough guides depending on the installation type of your choice:</p> <ul> <li>Installing via Docker Compose guide</li> <li>Installing via Kubernetes guide</li> </ul>"},{"location":"deploymentCompose/","title":"OpenSlice Deployment Guide with Docker Compose","text":""},{"location":"deploymentCompose/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":""},{"location":"deploymentCompose/#requirements","title":"Requirements","text":""},{"location":"deploymentCompose/#hardware-requirements","title":"Hardware requirements:","text":"Minimum Hardware Requirements Recomended Hardware Requirements 4 CPU cores 8 CPU cores 8 GB RAM 16 GB RAM 30 GB storage 50 GB storage"},{"location":"deploymentCompose/#software-requirements","title":"Software Requirements:","text":"<ul> <li>Docker: A running environment for Docker Compose services</li> </ul>"},{"location":"deploymentCompose/#preparing-the-environment","title":"Preparing the environment","text":""},{"location":"deploymentCompose/#1-backup-your-previous-database-if-necessary","title":"1. Backup your previous database if necessary:","text":"<pre><code>sudo docker exec amysql /usr/bin/mysqldump -u root --password=letmein ostmfdb > backup_ostmfdb.sql\n</code></pre>"},{"location":"deploymentCompose/#2-install-docker","title":"2. Install docker","text":"<p>Since July 2023 Docker Compose V1 stopped receiving updates. OpenSlice fully reverted to Compose V2, which is integrated in the Docker installation.</p>"},{"location":"deploymentCompose/#3-configure-containers-to-properly-resolve-the-dns-of-your-domain-optional","title":"3. Configure containers to properly resolve the DNS of your domain (optional)","text":"<pre><code>sudo nano /etc/docker/daemon.json\n</code></pre> <p>and add:</p> <pre><code>{ \n \"dns\": [\"8.8.8.8\", \"8.8.4.4\"]\n}\n</code></pre> <p>After editing daemon.json restart docker daemon for the changes to take place</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deploymentCompose/#downloading-the-project","title":"Downloading the project","text":""},{"location":"deploymentCompose/#1-create-a-new-folder-to-download-the-project","title":"1. Create a new folder to download the project","text":"<pre><code>mkdir openslice\n</code></pre> <pre><code>cd openslice\n</code></pre>"},{"location":"deploymentCompose/#2-download-the-deployment-script","title":"2. Download the deployment script","text":"<p>Download the deployment / environment preparation script</p> <pre><code>wget https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh\n</code></pre> <p>Make it executable</p> <pre><code>sudo chmod +x deploy.sh\n</code></pre>"},{"location":"deploymentCompose/#3-run-the-deployment-script","title":"3. Run the deployment script","text":"<p>OpenSlice is a multi repo project. This script selects the same branch for all repositories of the project to pull from.</p> <p>After that it builds the respective jar files locally and installs all the npm packages needed for the UI.</p> <p>If you run the script without selecting a branch the the main branch is going to be selected.</p> <p>We recommend:</p> <ul> <li>main branch for the most stable experience and</li> <li>develop branch for an experience with the latest features (for develop branch installation, it is strongly advisable that you may as well follow the develop documentation)</li> </ul> <pre><code>sudo ./deploy.sh develop #[or replace main with other branch name]\n</code></pre> <p>We recommend running the deploy.sh script with root permissions! In other case, some directories may not be accessible by the project building tools and hinder the smooth installation.</p>"},{"location":"deploymentCompose/#configure-docker-compose-services","title":"Configure Docker Compose services","text":""},{"location":"deploymentCompose/#1-create-configuration-specific-docker-compose-file-from-the-template","title":"1. Create configuration specific Docker Compose file from the template","text":"<pre><code>cd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo cp docker-compose.yaml.configure docker-compose.yaml\n</code></pre>"},{"location":"deploymentCompose/#2-configure-mysql-portal-container-optional","title":"2. Configure mysql-portal container (optional)","text":"<ol> <li>In folder <code>org.etsi.osl.main/compose/mysql-init</code> edit the file <code>01-databases.sql</code>.</li> <li>In the <code>org.etsi.osl.main/compose/docker-compose.yaml</code> edit the credentials of the users that services use to connect to the databases, if you wish.<ul> <li>portaluser (default is 12345) and</li> <li>keycloak (default is password)</li> </ul> </li> </ol>"},{"location":"deploymentCompose/#3-configure-keycloak-container-optional","title":"3. Configure keycloak container (optional)","text":"<ol> <li> <p>If you made changes to keycloak's mysql credentials:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code>.</p> </li> </ol> <pre><code>DB_DATABASE: keycloak\nDB_USER: keycloak\nDB_PASSWORD: password\n</code></pre> <ol> <li> <p>If you want to change the keycloak admin password:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> </li> </ol> <pre><code>KEYCLOAK_PASSWORD: Pa55w0rd\n</code></pre>"},{"location":"deploymentCompose/#4-configure-bugzilla-container-optional","title":"4. Configure bugzilla container (optional)","text":"<p>If you want to utilise the Bugzilla connector:</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.activemq.brokerUrl\": \"tcp://anartemis:61616?jms.watchTopicAdvisories=false\",\n \"spring.activemq.user\": \"artemis\",\n \"spring.activemq.password\": \"artemis\",\n \"bugzillaurl\":\"\",\n \"bugzillakey\":\"\",\n \"main_operations_product\":\"\"\n}'\n</code></pre> <p>And add the provided Bugzilla installation information:</p> <pre><code>\"bugzillaurl\":\"bugzillaurl.xx:443/bugzilla/\",\n\"bugzillakey\":\"exampleKeyeqNNwxBlgxZgMEIne0Oeq0Bz\",\n\"main_operations_product\":\"Main Site Operations\" // this is the default product to issue tickets\n</code></pre> <p>Bugzilla should have the following components under the specified product: </p> <ul> <li>NSD Deployment Request: Component used to schedule deployment req </li> <li>Onboarding: Issues related to VNF/NSD Onboarding </li> <li>Operations Support: Default component for operations support </li> <li>Validation: Use to track validation processes of VNFs and NSDs </li> <li>VPN Credentials/Access: Used for requesting VPN Credentials/Access </li> </ul> <p>Also in the 'Main Site Operations' product, a version named 'unspecified' must be created.</p>"},{"location":"deploymentCompose/#5-configure-osportalapi-container-nfv-services-conditional","title":"5. Configure osportalapi container (NFV services) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}, as well as \"spring.portal.main.domain\" property.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"spring.portal.main.domain\": \"http://localhost\",\n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#6-osscapi-container-tmf-api-service-conditional","title":"6. osscapi container (TMF API service) (conditional)","text":"<p>Change the respective fields: </p> <ul> <li>If you made changes to mysql and keycloak credentials.</li> <li>If you want to change logging level (TRACE / DEBUG / INFO / WARN / ERROR).</li> </ul> <p>If you are using a non-local domain, replace everywhere the http://keycloak:8080 with the respective {{protocol://domain.name}}.</p> <p>In folder <code>org.etsi.osl.main/compose/</code> edit the file <code>docker-compose.yaml</code></p> <pre><code>SPRING_APPLICATION_JSON: '{\n \"spring.datasource.username\":\"root\",\n \"spring.datasource.password\":\"letmein\",\n \"spring-addons.issuers[0].uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"spring.security.oauth2.resourceserver.jwt.issuer-uri\": \"http://keycloak:8080/auth/realms/openslice\",\n \"springdoc.oAuthFlow.authorizationUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"springdoc.oAuthFlow.tokenUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\", \n \"logging.level.org.springframework\" : \"INFO\"\n}'\n</code></pre>"},{"location":"deploymentCompose/#configure-nginx","title":"Configure nginx","text":"<p>In folder <code>org.etsi.osl.main/compose/nginx</code> create a configuration specific <code>nginx.conf</code> file.</p> <pre><code>cd org.etsi.osl.main/compose/nginx/\n</code></pre> <pre><code>sudo cp nginx.conf.default nginx.conf\n</code></pre> <p>If needed, in the nginx.conf file, edit the server_name for an non-local deployment.</p>"},{"location":"deploymentCompose/#configure-web-ui","title":"Configure Web UI","text":"<p>In folder <code>org.etsi.osl.portal.web/src/js/</code> create a configuration specific <code>config.js</code> file.</p> <pre><code>cd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>sudo cp config.js.default config.js\n</code></pre> <p>Edit the <code>config.js</code> file with the information of your domain. <code>ROOTURL</code> will automatically extract the the Origin (Protocol://Domain:Port) of the deployment, but you must change <code>APIURL</code> property, if you are not aiming for a localhost installation, e.g. \"https://portal.openslice.io\".</p> <p>Example file:</p> <pre><code>{ \n BUGZILLA: \"ROOTURL/bugzilla/\",\n STATUS: \"ROOTURL/status/\",\n APIURL: \"http://localhost\",\n WEBURL: \"ROOTURL/nfvportal\",\n APIOAUTHURL: \"ROOTURL/auth/realms/openslice\",\n APITMFURL: \"ROOTURL/tmf-api/serviceCatalogManagement/v4\"\n}\n</code></pre>"},{"location":"deploymentCompose/#configure-tmf-web-ui","title":"Configure TMF Web UI","text":"<p>In the folder <code>org.etsi.osl.tmf.web/src/assets/config</code> there are 3 files available for configuration:</p> <ul> <li>config.prod.json (Basic information + API configuration)</li> <li>theming.scss (CSS color palette theming)</li> <li>config.theming.json (HTML configuration - Logo, Favicon, Footer)</li> </ul> <p>The first 2 files above (i.e. config.prod.json, theming.scss) are essential for the successful deployment of OpenSlice, thus created automatically during the initial deployment at <code>org.etsi.osl.tmf.web/src/assets/config</code> directory as a copy of the default ones from the remote repository.</p> <p>Ensure that you check the <code>config.prod.json</code> and <code>theming.scss</code> files and readjust to your deployment if needed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <p>E.g. You may edit \"TITLE\", \"WIKI\", etc properties with your domain title. Also configure TMF's API and Keycloak's location for the web application, if needed.</p> <p>Example file:</p> <pre><code>{ \n \"TITLE\": \"OpenSlice by ETSI\",\n \"PORTALVERSION\":\"2024Q2\",\n \"WIKI\": \"https://osl.etsi.org/documentation\",\n \"BUGZILLA\": \"{BASEURL}/bugzilla/\",\n \"STATUS\": \"{BASEURL}/status/\",\n \"WEBURL\": \"{BASEURL}\",\n \"PORTAL_REPO_APIURL\": \"{BASEURL}/osapi\",\n \"ASSURANCE_SERVICE_MGMT_APIURL\": \"{BASEURL}/oas-api\",\n \"APITMFURL\": \"{BASEURL}/tmf-api\",\n \"OAUTH_CONFIG\" : {\n \"issuer\": \"{BASEURL}/auth/realms/openslice\",\n \"loginUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"{BASEURL}/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n\n \"responseType\": \"code\",\n \"oidc\": false,\n \"clientId\": \"osapiWebClientId\",\n \"dummyClientSecret\": \"secret\",\n\n \"requireHttps\": false,\n \"useHttpBasicAuth\": true,\n \"clearHashAfterLogin\": false,\n\n \"showDebugInformation\": true\n }\n}\n</code></pre> <p>The {BASEURL} placeholder in the file automatically detects the Origin (Protocol://Domain:Port) of the deployment and applies it to every respective property. E.g. If you are attempting a local deployment of OpenSlice, then {BASEURL} is automatically translated to \"http://localhost\". Similarly, you may use {BASEURL} to translate to a public deployment configuration, e.g. \"https://portal.openslice.io\".</p> <p>If further customization, apart from the default provided, is needed for branding (Logo, Footer) then <code>config.theming.json</code> needs to be created in io.openslice.tmf.web/src/assets/config directory, as follows:</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>sudo cp config.theming.default.json config.theming.json\n</code></pre> <p>IMPORTANT NOTE: If you want to apply changes to the JSON configuration files without the need to rebuild the application, you have to apply the changes at the <code>org.etsi.osl.tmf.web/dist/io-openslice-portal-web/assets/config</code> directory. Although, it is mandatory to also apply these changes to the <code>org.etsi.osl.tmf.web/src/assets/config</code> for persistancy, as after any future rebuild of OpenSlice the <code>/dist</code> directory is being overwritten along with its contents. The OpenSlice team strongly recommends to always apply your changes to the TMF web UI configuration files at <code>org.etsi.osl.tmf.web/src/assets/config</code> and rebuild the application.</p>"},{"location":"deploymentCompose/#deploy-openslice-via-docker-compose","title":"Deploy OpenSlice via Docker Compose","text":"<p>After configuring the services, and editing the docker compose file accordingly, the docker compose instantiation command can be performed.</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.main/compose/\n</code></pre> <pre><code>sudo docker compose --profile prod down;sudo docker compose --profile prod up -d --build\n</code></pre> <p>Depending on your machine, this process might take time. if for any reason the deployment fails during first time, please rerun the above before any further measures.</p>"},{"location":"deploymentCompose/#validating-deployments-and-container-monitoring","title":"Validating deployments and container monitoring","text":"<p>You can monitor containers' status with portainer at port 9000 (http://your-ip:9000).</p> <p>Initially, you may monitor the local machine at portainer.</p> <p>Please check that all containers are in running state.</p>"},{"location":"deploymentCompose/#post-installation-steps","title":"Post installation steps","text":"<p>After the successful deployment of OpenSlice, to ensure the E2E user experience, this section is mandatory. It contains crucial configuration in regard of authentication and user creation.</p>"},{"location":"deploymentCompose/#configure-keycloak-server","title":"Configure Keycloak server","text":"<p>The Keycloack server is managing authentication and running on a container at port 8080. It is also proxied to your host via nginx under http://localhost/auth. </p> <ul> <li> <p>Navigate to http://domain.com/auth/ or https://domain.com/auth/, (http://ipaddress:8080/auth/ or https://ipaddress:8443/auth/ which are directly accessible without proxy) </p> </li> <li> <p>Navigate to Administration Console </p> </li> <li> <p>Login with the credentials from section Configure keycloak container. Default values are:</p> <ul> <li>user: admin and </li> <li>password: Pa55w0rd</li> </ul> </li> </ul> <p>if you are running in HTTP you will get a message: HTTPS required.</p> <p>To resolve this issue when running in HTTP: </p> <ul> <li>Select the master realm from top left corner</li> <li>Go to login Tab and select \"Require SSL\": None</li> <li>Repeat for realm Openslice</li> </ul> <p>If you are running in HTTPS, then \"Require SSL\" can be left unchanged to external requests.</p>"},{"location":"deploymentCompose/#1-configure-redirects","title":"1. Configure redirects","text":"<p>Navigate to realm Openslice > Clients > osapiWebClientId and change the Root URL to your domain. </p> <p>Also, insert your domain, e.g. http://example.org/*, at:</p> <ul> <li>Valid Redirect URIs</li> <li>Web Origins</li> </ul>"},{"location":"deploymentCompose/#2-configure-email","title":"2. Configure email","text":"<p>Keycloak allows new users to register. Subsequently, this will also allow new users to register to the OpenSlice portal.</p> <p>Navigate to realm Openslice > Realm Settings > Login Tab > check User registration, Verify email, Forgot password etc.</p> <p>Finally, enter the details of the mail server at the Email Tab.</p> <p>Email configuration is optional for test runs, but if not provided the above functionalities (e.g. external user registration) will not be possible.</p>"},{"location":"deploymentCompose/#3-add-an-openslice-admin-user","title":"3. Add an OpenSlice admin user","text":"<p>This step is mandatory so as to access the OpenSlice Web UI. To add an OpenSlice admin user you must:</p> <ul> <li>Navigate to realm Openslice > Users > Add user</li> <li>Set a password</li> <li>Upon creation, navigate to Role Mappings and add ADMIN to Assigned Roles list</li> </ul> <p>That user is different from the Keycloak admin user. It is required to login and browse the OpenSlice Web UI. The Role ADMIN guarantee full access through the OpenSlice UI, thus such a user is always required.</p>"},{"location":"deploymentCompose/#keycloak-at-localhost","title":"Keycloak at localhost","text":"<p>This is an important step if you run Keycloak on localhost!</p> <p>1 - Edit your Hosts File, adding the line below</p> <p><code>127.0.0.1 keycloak</code></p> <p>Hosts File Location:</p> <ul> <li> <p>In Linux/Unix, the file's location is at /etc/hosts </p> </li> <li> <p>In Windows, its location is at c:\\Windows\\System32\\Drivers\\etc\\hosts</p> </li> </ul> <p>2 - Replace http://localhost/auth/ with http://keycloak:8080/auth/ in your Keycloak config for AngularJS and Angular (see examples below).</p> <p>Explanation</p> <p>Nginx uses the http://keycloak:8080 URL, which is accessible via the internal docker system's network. The Front-end (TS/Angular) shall also use the http://keycloak:8080. This way, you will not get the invalid token error, as the API is acquiring the token from http://keycloak:8080 (internally) and the Front-end is getting verified by an issuer at the same URL, as well.</p> <p>2.1 - For the Angular configuration (TMF portal UI), navigate to org.etsi.osl.tmf.web/src/assets/config and edit config.prod.json</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.tmf.web/src/assets/config\n</code></pre> <pre><code>nano config.prod.json\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>{ \n \"OAUTH_CONFIG\" : {\n \"issuer\": \"http://keycloak:8080/auth/realms/openslice\",\n \"loginUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/auth\",\n \"tokenEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token\",\n \"userinfoEndpoint\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/userinfo\",\n \"redirectUri\": \"{BASEURL}/redirect\",\n \"logoutUrl\": \"http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/logout\", \n \"postLogoutRedirectUri\": \"{BASEURL}\",\n }\n}\n</code></pre> <p>Note the difference in changing {BASEURL} -> http://keycloak:8080</p> <p>If you want the changes to take place immediately without rebuilding the project, then repeat the process for org.etsi.osl.tmf.web/dist/org.etsi.osl.tmf.web/assets/config/config.prod.json</p> <p>2.2 - For the AngularJS configuration (NVF portal UI), navigate to org.etsi.osl.portal.web/src/js and edit config.js</p> <pre><code># Starting from the root project directory\ncd org.etsi.osl.portal.web/src/js\n</code></pre> <pre><code>nano config.js\n</code></pre> <p>After editing, the displayed properties should look like the example below:</p> <pre><code>var appConfig = angular.module('portalwebapp.config',[]);\n\n\nappConfig.factory('APIEndPointService', function() {\n return { \n APIOAUTHURL: \"http://keycloak:8080/auth/realms/openslice\",\n };\n});\n</code></pre> <p>Note the difference in \"APIOAUTHURL\" property, changing ROOTURL -> http://keycloak:8080</p>"},{"location":"deploymentCompose/#nfv-orchestrator-configuration","title":"NFV Orchestrator Configuration","text":"<p>After successfully deploying and configuring OpenSlice, you may configure its environment (e.g. the NFVO) that will facilitate the deployment of NFV artifacts.</p> <p>See NFV Orchestrator Configuration.</p>"},{"location":"deploymentK8s/","title":"OpenSlice Deployment Guide with Kubernetes","text":""},{"location":"deploymentK8s/#intended-audience-openslice-administrators","title":"Intended Audience: OpenSlice administrators","text":"<p>This is WIP.</p> <p>Please refer to this guide.</p>"},{"location":"etsi_osl/","title":"The ETSi SDG OSL","text":"<p>OpenSlice is developed by the OSL ETSI Software Development Group see more info</p>"},{"location":"history/","title":"History","text":""},{"location":"history/#history","title":"History","text":"<ul> <li>The NFV portal part of OpenSlice was initially developed in H2020 European Research project 5GinFIRE by University of Patras, Greece</li> <li>OpenSlice core services, APIs was further developed and maintained in H2020 European project 5G-VINNI by University of Patras, Greece</li> <li>OpenSlice has been a part of OSM's OSS/BSS ecosystem</li> <li>OpenSlice is now an ETSI SDG Group since 2023</li> </ul>"},{"location":"history/#citation","title":"Citation","text":"<p>Please cite our ![paper] if you use OpenSlice in your research</p> <pre><code>\n@misc{tranoris2021openslice,\n title={Openslice: An opensource OSS for Delivering Network Slice as a Service}, \n author={Christos Tranoris},\n year={2021},\n eprint={2102.03290},\n archivePrefix={arXiv},\n primaryClass={cs.NI}\n}\n\n\n</code></pre>"},{"location":"lcm/","title":"Lifecycle Management (LCM) Rules","text":"<ul> <li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li> </ul> <p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p> <ul> <li>PRE_PROVISION</li> <li>CREATION</li> <li>AFTER_ACTIVATION </li> <li>SUPERVISION </li> <li>AFTER_DEACTIVATION </li> </ul> <p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p> <p></p> <ul> <li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li> <li>CREATION rules: Run while the referenced service dependencies of a service are created</li> <li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li> <li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li> <li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li> </ul> <p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p> <ul> <li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li> <li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li> <li>Define complex OSM Configs based on other dependencies and passing variables</li> <li>Define any dependencies when creating the referenced services</li> <li>Dynamically include new service dependencies</li> <li>Create new service orders so include dynamically other services</li> <li>Call external (RESTful) services (via http(s), define payload, examine response)</li> </ul>"},{"location":"lcm/#examine-if-the-rules-are-executed-successfully","title":"Examine if the rules are executed successfully","text":"<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>"},{"location":"lcm/#lcm-rules-and-osom-service-orchestration","title":"LCM Rules and OSOM Service Orchestration","text":"<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p> <p></p>"},{"location":"lcm/#define-rules","title":"Define rules","text":"<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p> <p></p> <p>Execution order of rules on a specific phase is random</p> <ul> <li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li> </ul>"},{"location":"lcm/#definition-language","title":"Definition language","text":"<ul> <li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li> <li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li> </ul> <p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p> <p></p> <ul> <li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li> <li>On the right side the user can define some rule properties or observe the underlying generated java code.</li> </ul>"},{"location":"lcm/#the-blocks-library","title":"The blocks library","text":"<p>The following images describe some blocks found in the library.</p> <p>Blockly has syntax rules. It helps with colours to define them. </p> <p>So for example a parameter that is a Number cannot be \"glued\" with a String. Will need some conversion first</p> <p> </p>"},{"location":"lcm/#examples-of-rules","title":"Examples of Rules","text":"<p>The following images provide some examples of rules.</p>"},{"location":"lcm/#define-variables-according-to-cases","title":"define variables according to cases","text":"<p>In the following example we :</p> <ul> <li>define a String variable. </li> <li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li> <li>We output the value to the OSOM Log</li> <li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li> </ul> <p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p> <p></p>"},{"location":"lcm/#define-complex-osm-configs-for-day-0","title":"Define complex OSM configs for DAY 0","text":"<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p> <ul> <li> <p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p> </li> <li> <p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p> </li> <li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li> <li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li> <li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li> </ul> <p></p>"},{"location":"lcm/#define-and-instantiate-different-services-according-to-service-order-request","title":"Define and instantiate different services according to Service Order request","text":"<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p> <p>There are different ways to accomplish this:</p> <ul> <li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li> <li>change for example the VIMs that you deploy the NS</li> <li>change the NSD (that is use different VNFs)</li> </ul> <p>The following image displays for example the latter case.</p> <p></p>"},{"location":"lcm/#call-an-external-restful-service","title":"Call an external RESTful service","text":"<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p> <p></p> <p></p>"},{"location":"lcm/#create-new-service-orders","title":"Create New Service Orders","text":"<p>The following example calls to Order a New Service Specification with specific Parameter Values</p> <p></p>"},{"location":"nfvcatalogs/","title":"NFV Services","text":"<p>NFV Services are managed through a dedicate UI the NFV portal (eg http://portal.openslice.io/nfvportal)</p> <p>Users are able through this portal to manage their NFV artifacts towards the NFVO, ( for example onboard VNFs and NSDs to a target OSM)</p> <p>Openslice NFV Services target to accommodate the following envisaged user roles. All users are assumed to be Authenticated:</p> <ul> <li>NFV developer: This role is responsible to upload VNF and NSD Descriptors in the Openslice services towards NFVO like OSM</li> <li>Services administrator: This role represents the user that are responsible for maintenance of the Openslice services</li> </ul> <p>(obsolete: )</p> <ul> <li>Testbed provider: This role represents users that are responsible for testbed administration, configuration, integration, adaptation, support, etc</li> <li>Experimenter: This role represents the user that will utilize our services and tools to deploy an experiment. That is the experiment description in terms of e.g.: NSD (Network Service Descriptor) or TOSCA Specification (in future versions)</li> </ul> <p>Finally an anonymous user role exists who has some really simple usage scenarios (e.g. signup through the portal)</p> <p>During the onboarding process the following occurs:</p> <p>\u2022 A NFV developer submits a NFV archive (VNF or NSD) (he can later manage if needed some metadata) \u2022 The administrator can manage the NFV artifact (e.g. edit it) \u2022 The administrator On-Boards the NFV artifact to the target MANO \u2022 The administrator can optionally mark the NFV: o As public in order to be publicly visible by all portal users o As Certified which means this is certified by a certain entity</p>"},{"location":"nfvcatalogs/#request-a-new-nsd-deployment-this-is-different-in-comparison-to-services","title":"Request a new NSD deployment (this is different in comparison to Services)","text":"<p>A developer requests a new network service deployment (which NSD, tentative dates, target infrastructure, etc.). The request is marked as UNDER_REVIEW</p> <ul> <li>The administrator is notified about the new request and he has the following options:</li> <li>Schedule the deployment for the requested dates or propose other dates. The request is marked as SCHEDULED</li> <li>Reject the request for some reason. The Request is marked as REJECTED</li> <li>Deploy the request to target VIM(s). The Request is marked as RUNNING</li> <li>Finalize the deployment and release resources. The Request is marked as COMPLETED</li> <li>every change of the request-lifecycle the experimenter is notified.</li> </ul>"},{"location":"nfvoconfig/","title":"NFV Orchestrator configuration","text":"<p>Currently we support Open Source MANO version EIGHT/NINE/TEN/ELEVEN/THIRTEEN. Later versions of OSM may also be supported by the existing configuration, as from OSM 9+ the project converged to the SOL005 interface, regarding the NBI, and SOL006 (YANG model), regarding the NFV/NS packaging. Also an implementation of a generic SOL005 interface is supported, but not extensively tested.</p> <p>Configuration of your target(s) NFVOs/MANO services with Openslice is performed through the NFV portal.</p> <ol> <li> <p>Login to {{yourdomain}}/nfvportal/</p> </li> <li> <p>Navigate to Admin > Manage MANO Platforms > Add New MANO Platform, pick one of the supported MANO platform(s), e.g. Name=OSMvTHIRTEEN, Version=OSMvTHIRTEEN and save. You may edit the saved MANO platforms after this.</p> </li> <li> <p>Navigate to Admin > Manage MANO providers > Add New MANO Provider and enter its details:</p> <ul> <li>Name and description of your choice. The selected name will supplement the NFV artifacts of this provider.</li> <li>One of the already defined MANO platformssynchronization</li> <li>API URL Endpoint, eg: https://10.10.10.10:9999 (This is the SOL005 NBI endpoint - Note the port 9999)</li> <li>Username, Password and Project of your OSM tenant.</li> </ul> </li> </ol> <p>Check EnabledForONBOARDING, if you want VNF/NS packages uploaded through the UI by the user, to also be automatically ONBOARDED to this MANO (1 step process). If left unchecked, the onboarding process must be performed manually after the VNF/NS package is uploaded to the portal, by the designated UI (2 step process).</p> <p>Check EnabledForSYNC, if you want to support the automatic synchronization of this MANO with OpenSlice. When enabled, the existing VNF/NS packages and VIMs (and any updates on them) of the registered MANO are also reflected to the portal to the respective UIs (Registered VNFs/NSDs and Manage Infrastructures). </p> <p>The synchronization is a continuous process that will confirm that the artifacts are still present in the MANO, updating the status field of the respective artifacts to <code>OSM_PRESENT</code>. If during this process, an artifact is deleted from the MANO, the respective status field will be updated to <code>OSM_MISSING</code>.</p>"},{"location":"service_inventory/","title":"Service Inventory","text":"<p>After a Service Order completion, active services with their additional characteristics are found:</p> <ul> <li>From the Order Items of a selected Service order</li> <li>from the menu of Service inventory and then selecting details of each service</li> <li>through the Service Inventory API (TMF 638 - Service Inventory Management ) </li> </ul> <p>Openslice creates a Service for the requested CFS. Customers make Service Orders and Openslice instantiates the requested Service Specifications for each Service Order Item of a Service Order. Running Services instantiated by Openslice, reside in Openslice Service Inventory. The following picture displays how Service Specifications are related to Running Services and how Running Services relate with instantiated running Network Services. </p> <p></p> <p>There is a hierarchy of services. Usually an Instantiated CFS has Supporting Services some Instantiated RFSs. Then an Instantiated RFS is related to some running NS managed by NFVO</p>"},{"location":"service_inventory/#interacting-with-an-active-service-day-2-config","title":"Interacting with an Active Service (Day 2 config)","text":"<p>In some cases, if the underlying service is configured with actions (for example in OSM Day 2 primitive actions), there are characteristics that can be modified. Usually they are named like : ::Primitive:: <p>The user can edit the characteristic with a new value. The value is propagated through the OSOM and NFVO down to the related VNF.</p>"},{"location":"service_inventory/#terminatinginactivating-a-service","title":"Terminating/Inactivating a service","text":"<p>You can terminate the service with one of the following processes:</p> <ul> <li>Select the related Service Order and terminate the Order Item. This will delete all the underlying related active services. The Order goes to ACKNOWLEDGED->INPROGRESS->COMPLETE</li> <li>To terminate or inactivate a service, select the specific service from the inventory, press Edit and set the State either to Inactive or Terminated</li> </ul> <p>Warning: if you terminate or inactivate a service the action cannot be undone. </p>"},{"location":"service_inventory/#uml-sequence-diagram","title":"uml: sequence diagram","text":"<p>Here I will embed PlantUML markup to generate a sequence diagram.</p> <p>I can include as many plantuml segments as I want in my Markdown, and the diagrams can be of any type supported by PlantUML.</p>"},{"location":"terminology/","title":"Terminology","text":"<p>OpenSlice management cluster OpenSlice administrator Service Designer</p>"},{"location":"under_construction/","title":"Under construction","text":"<p>under construction</p>"},{"location":"architecture/architecture/","title":"Architecture","text":"<p>Openslice offers the following main functionalities:</p> <ul> <li>Service Catalog Management: A CSP will have the ability to manage the Service Catalog Items, their attributes , organize in categories and decide what to make available to Customers</li> <li>Services Specifications: A CSP will be able to manage Service Specifications</li> <li>Service Catalog Exposure: A CSP will be able to expose catalog to customers and related parties</li> <li>Service Catalog to Service Catalog: Openslice able to consume and provide Service Catalog items to other catalogs</li> <li>Service Order: The Customer will be able to place a Service Order</li> <li>Service Inventory: The Customer and Provider will be able to view deployed Services status</li> </ul> <p>The following figure displays the overall architecture of Openslice.</p> <p></p> <p>Openslice allows Vertical Customers browsing the available offered service specifications. It consists of:</p> <ul> <li>Web frontend UIs that consist of mainly two portals: i) a NFV portal allowing users self-service management and onboarding VNFDs/NSDs to facility\u2019s NFVO ii) a Services Portal, which allows users to browse the Service Catalog, Service Blueprints specifications and the Service Inventory</li> <li>An API gateway that proxies the internal APIs and used by the web front end as well as any other 3rd party service</li> <li>A Message Bus where all microservices use it to exchange messages either via message queues or via publish/subscribe topics</li> <li>An authentication server implementing Oauth2 authentication scheme</li> <li>A microservice offering TMF compliant API services (eg Service Catalog API, Service Ordering APIetc)</li> <li>A microservice offering NFV API services (eg VNF/NSD onboarding etc) and allows to store VNFDs and NSDs in a catalog</li> <li>A microservice that is capable to interface to an issue management system. For example it raises an issue to all related stakeholders (CSP, NOP, CSC) that a new Service Order is requested</li> <li>Central logging microservice that is capable to log all distributed actions in to an Elasticsearch cluster</li> <li>A Service Orchestrator solution that will propagate Service Ordering requests to the equivalent SOs and NFVOs </li> </ul> <p>The following figure depicts how Openslice microservices are deployed</p> <p></p>"},{"location":"architecture/architecture/#deploying-openslice-in-multi-domain-scenarios","title":"Deploying Openslice in multi domain scenarios","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>See more Consuming Services From External Partner Organizations</p>"},{"location":"architecture/centrallog/","title":"Central Logging","text":"<p>Openslice follows the centralized log management concept, i.e. a type of logging solution system that consolidates the log data from different services and pushes it to a central, accessible and easy-to-use interface. </p> <p>For that reason, Elasticsearch is elected as an open-source centralized logging solution for collecting, parsing and storing logs towards a real-time data analytics tool that provides insights from any type of structured and unstructured data source.</p>"},{"location":"architecture/consumingServicesFromExternalPartners/","title":"Consuming Services From External Partner Organizations","text":"<p>A typical deployment across domains, involves today some typical components: i) an OSS/BSS to allow customers access the service catalog and perform service orders, ii) a Service Orchestrator (SO) component for executing the service order workflow, as well as iii) a Network Functions Virtualization Orchestrator (NFVO) for configuring the iv) network resources.</p> <p>TMF Open APIs are introduced not only for exposing catalogues and accepting service orders, but also implementing the East-West interfaces between the domains, fulfilling also the LSO requirements as introduced by MEF.</p> <p>The following figure shows how openslice could be used in such scenarios:</p> <p></p> <p>In Openslice we can consume services from 3rd parties via Open APIs.</p> <p>We use the TMF 632 Party Management model to specify Organizations that we can exchange items and other information such as:</p> <ul> <li>Import Service Specifications</li> <li>Create a Service Order</li> <li>Use the Service Inventory to query the status of the service ordered to the external partner organization</li> </ul>"},{"location":"architecture/consumingServicesFromExternalPartners/#define-an-organization-as-3rd-party-to-consume-services-east-west","title":"Define an Organization as 3rd party to consume services East-West","text":"<p>An organization must have the following characteristics in openslice catalog, like for example:</p> <p>\"EXTERNAL_TMFAPI_BASEURL\", \"http://portal.openslice.io\"</p> <p>\"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\", \"authOpensliceProvider\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTID\", \"osapiWebClientId\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\", \"secret\"</p> <p>\"EXTERNAL_TMFAPI_OAUTH2SCOPES\", scopes</p> <p>\"EXTERNAL_TMFAPI_OAUTH2TOKENURI\", \"http://portal.openslice.io/osapi-oauth-server/oauth/token\"</p> <p>\"EXTERNAL_TMFAPI_USERNAME\", \"admin\"</p> <p>\"EXTERNAL_TMFAPI_PASSWORD\", \"openslice\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATALOG_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification?type=CustomerFacingServiceSpecification\" (this is optional, fetch a list of service specs it will be relative with the BASEURL. If the url is empty then no specs will be fetched, the EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS might be used)</p> <p>\"EXTERNAL_TMFAPI_SERVICE_CATEGORY_URLS\" = \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/{categoryid}\" (this example will fetch all specs in a category. You may define comma separated URLs of categories API URL . This will fetch specifications of every defined category. If you want only one specific category put for example the uuid only of one category: \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d\". multiple urls should be \"/tmf-api/serviceCatalogManagement/v4/serviceCategory/bda02821-bc4d-4bd6-b64b-d9c2aa5f8e6d,/tmf-api/serviceCatalogManagement/v4/serviceCategory/9b6d8bf3-abd2-43c4-8154-c8c6fe5545b2\")</p> <p>\"EXTERNAL_TMFAPI_SERVICE_SPEC\" = \"/tmf-api/serviceCatalogManagement/v4/serviceSpecification\"</p> <p>\"EXTERNAL_TMFAPI_SERVICE_ORDER_URLS\"= \"/test/v1/serviceorder\" (this is optional)</p> <p>An example Organization defined example in json:</p> <pre><code>\n{\n \"uuid\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"Openslice.io\",\n \"id\": \"1a09a8b5-6bd5-444b-b0b9-a73c69eb42ae\",\n \"isHeadOffice\": null,\n \"isLegalEntity\": null,\n \"nameType\": null,\n \"organizationType\": null,\n \"tradingName\": null,\n \"contactMedium\": [],\n \"creditRating\": [],\n \"existsDuring\": null,\n \"externalReference\": [],\n \"organizationChildRelationship\": [],\n \"organizationIdentification\": [],\n \"organizationParentRelationship\": null,\n \"otherName\": [],\n \"partyCharacteristic\": [\n {\n \"uuid\": \"3a2f7221-e0a2-4a6b-88d1-534c8e1963f6\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_CLIENTREGISTRATIONID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"authOpensliceProvider\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"c24bb527-f178-4d38-9b93-2027c1732876\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_USERNAME\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"27e45df8-414b-44c6-a5d5-3f064e2cfd3b\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_PASSWORD\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"openslice\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"e0e470b8-6024-4014-8a18-2333e5465ce1\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTSECRET\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"secret\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3e0de762-ac80-4c1e-a0a1-f265ff0899b4\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2SCOPES\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"admin;read\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"0bbb8314-f7f2-420d-9fed-ba054b15f886\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2TOKENURI\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io/osapi-oauth-server/oauth/token\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"3a567de4-79eb-4006-a500-3e5229b44175\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_OAUTH2CLIENTID\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"osapiWebClientId\",\n \"alias\": null\n }\n },\n {\n \"uuid\": \"6dca729f-dbe1-46b7-89f1-5c4f9fe89d4e\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": null,\n \"href\": null,\n \"name\": \"EXTERNAL_TMFAPI_BASEURL\",\n \"valueType\": null,\n \"value\": {\n \"value\": \"http://portal.openslice.io\",\n \"alias\": null\n }\n }\n ],\n \"relatedParty\": [],\n \"status\": null,\n \"taxExemptionCertificate\": []\n}\n\n</code></pre>"},{"location":"architecture/issuemgt/","title":"Issue Management","text":"<p>For issue management support, Openslice relies on Bugzilla. Bugzilla is a ticketing tool that allows issue reporting and tracking via tickets to all relevant stakeholders. </p> <p>The figure below displays the overall issue management service architecture integrating Bugzilla as its core and how this tool interacts with other Openslice services presenting some distinctive scenarios. It should be noted that Bugzilla tickets will not only be used for bugs/errors, but also for general requests, e.g. Service Order procedure.</p> <p></p>"},{"location":"architecture/messagebus/","title":"Message Bus and exchanged Messages","text":"<p>Openslice has a Message bus which allows Openslice services to exchange messages via queues and topics.</p> <p>It is based on ActiveMQ.</p> <p>3rd party services can be attached to bus and subscribe to message topics or request resources via queues.</p>"},{"location":"architecture/messagebus/#queue-messages","title":"QUEUE MESSAGES","text":"Message Alias CATALOG_GET_SERVICEORDERS Name jms:queue:CATALOG.GET.SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_BY_ID Name jms:queue:CATALOG.GET.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body String orderid Description Return a ServiceOrder as String Json Message Alias CATALOG_UPD_SERVICEORDER_BY_ID Name jms:queue:CATALOG.UPD.SERVICEORDER_BY_ID Type queue Destination TMF API service Producers OSOM Body ServiceOrderUpdate serviceOrder Headers \"orderid\"= orderid Description Returns a ServiceOrder as String Message Alias CATALOG_GET_SERVICESPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICESPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceSpecification Message Alias CATALOG_ADD_SERVICESPEC Name jms:queue:CATALOG.ADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecCreate Description Creates a ServiceSpecification and returns a ServiceSpecification as String Message Alias CATALOG_UPD_SERVICESPEC Name jms:queue:CATALOG.UPD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. --- Message Alias CATALOG_UPDADD_SERVICESPEC Name jms:queue:CATALOG.UPDADD.SERVICESPEC Type queue Destination TMF API service Producers CRIDGE Body ServiceSpecUpdate Headers \"serviceSpecid\" = serviceSpecId, \"forceId\"=forceId Description Updates a ServiceSpecification and returns a ServiceSpecification as String. If forceId is true then tries to assign the requested ID to the spec Message Alias CATALOG_ADD_SERVICEORDER Name jms:queue:CATALOG.ADD.SERVICEORDER Type queue Destination TMF API service Producers OSOM Body ServiceOrderCreate serviceOrder Headers Description Creates a ServiceOrder and returns a ServiceOrder as String Message Alias CATALOG_GET_INITIAL_SERVICEORDERS_IDS Name jms:queue:CATALOG.GET.INITIAL_SERVICEORDERS Type queue Destination TMF API service Producers Body Description Return a List as String Json Message Alias CATALOG_GET_SERVICEORDER_IDS_BY_STATE Name jms:queue:CATALOG.GET.ACKNOWLEDGED_SERVICEORDERS Type queue Destination TMF API service Producers OSOM Body Headers \"orderstate\"= orderState Description String Json ArrayList of ServiceOrders Message Alias CATALOG_ADD_SERVICE Name jms:queue:CATALOG.ADD.SERVICE Type queue Destination TMF API service Producers OSOM Body ServiceCreate String json Headers \"orderid\"=orderid, \"serviceSpecid\"= specid Description Creates Service based an a Service Spec, Returns a Service object Message Alias CATALOG_UPD_SERVICE Name jms:queue:CATALOG.UPD.SERVICE Type queue Destination TMF API service Producers Body ServiceUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICE_BY_ID Name jms:queue:CATALOG.GET.SERVICE Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service instance <p>---| Message | | | ------------- |----------------| |Alias | CATALOG_GET_SERVICE_BY_ORDERID | |Name | jms:queue:CATALOG.GET.SERVICE_BY_ORDERID | |Type | queue | |Destination | TMF API service | |Producers | | |Body | String serviceID | |Description | returns Service IDs of a specific order given then order id |</p> Message Alias CATALOG_SERVICE_QUEUE_ITEMS_GET Name jms:queue:CATALOG.SERVICEQUEUEITEMS.GET Type queue Destination TMF API service Producers OSOM Body Description returns a LIST OF Service Queue Items --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_UPD Name jms:queue:CATALOG.SERVICEQUEUEITEM.UPDATE Type queue Destination TMF API service Producers OSOM Body String SERVICEQUEUEITEM Headers \"itemid\" = SERVICEQUEUEITEM id Description ill update a service queue item by id and return the instance --- Message Alias CATALOG_SERVICE_QUEUE_ITEM_DELETE Name jms:queue:CATALOG.SERVICEQUEUEITEM.DELETE Type queue Destination TMF API service Producers OSOM Body Headers \"itemid\" = SERVICEQUEUEITEM id Description ill delete a service queue item by id Message Alias CATALOG_SERVICES_TO_TERMINATE Name jms:queue:CATALOG.GET.SERVICETOTERMINATE Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services with END DAte in the past --- Message Alias CATALOG_SERVICES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description Get a list of ACTIVE services from the inventory of partners Message Alias NFV_CATALOG_GET_NSD_BY_ID Name jms:queue:NFVCATALOG.GET.NSD_BY_ID Type queue Destination NFV Catalog service Producers TMF API, OSOM Body NSDid Description Returns a NetworkServiceDescriptor object Message Alias NFV_CATALOG_DEPLOY_NSD_REQ Name jms:queue:NFVCATALOG.DEPLOY.NSD_REQ Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers NSD id Description Returns a DeploymentDescriptor object as json string containing deployment info Message Alias NFV_CATALOG_UPD_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.UPD.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body DeploymentDescriptor as Json String Headers DeploymentDescriptor id Description Updates and Returns a DeploymentDescriptor object as json string containing deployment info Message Alias GET_USER_BY_USERNAME Name jms:queue:GET.USER_BY_USERNAME Type queue Destination NFV Catalog service (this is temproary for now) Producers TMF API Body username Headers Description Returns a PortalUser object as json string containing user info Message Alias NFV_CATALOG_GET_DEPLOYMENT_BY_ID Name jms:queue:NFVCATALOG.GET.DEPLOYMENT_BY_ID Type queue Destination NFV Catalog service Producers OSOM Body Deployment ID Description Returns a DeploymentDescriptor object Message Alias CATALOG_GET_EXTERNAL_SERVICE_PARTNERS Name jms:queue:CATALOG.GET.EXTERNALSERVICEPARTNERS Type queue Destination TMF API service Producers OSOM Body Headers Description As a String Json ArrayList of Organizaton objects containing the characteristic name EXTERNAL_TMFAPI Message Alias CATALOG_UPD_EXTERNAL_SERVICESPEC Name jms:queue:CATALOG.UPD.EXTERNAL_SERVICESPEC Type queue Destination TMF API service Producers OSOM or maybe used by others that would like to update a Service Spec Body A serviceSpecification as json string Headers servicespecification id, orgid id Description Updates (or inserts if does not exist in catalog) an external service specification) Message Alias NFV_CATALOG_NSACTIONS_SCALE Name jms:queue:NSACTIONS.SCALE Type queue Destination TMF API service Producers OSOM or maybe used by others that would like scale a NS Body A ScaleDescriptor as json string Headers none Description performs a scale Message Alias NFV_CATALOG_NS_LCMCHANGED Name NFV_CATALOG_NS_LCMCHANGED Type topic Destination any Producers MANO client Body A json string Headers none Description A NFV_CATALOG_NS_LCMCHANGED message is published when LCM of a running NS is changed"},{"location":"architecture/messagebus/#alarms","title":"ALARMS","text":"Message Alias ALARMS_ADD_ALARM Name jms:queue:ALARMS.ADD.ALARM Type queue Publishers Consumers TMF API Body AlarmCreate Headers Description Add an alarm Message Alias ALARMS_UPDATE_ALARM Name jms:queue:ALARMS.UPDATE.ALARM Type queue Publishers Consumers TMF API Body AlarmUpdate Headers alarmid = alarm id, body (AlarmUpdate object) Description Update an alarm Message Alias ALARMS_GET_ALARM Name jms:queue:ALARMS.GET.ALARM Type queue Publishers Consumers TMF API Body Headers alarmid = alarm id Description get an alarm"},{"location":"architecture/messagebus/#event-topics-in-message-bus","title":"EVENT TOPICS IN Message Bus","text":"Message Alias EVENT_SERVICE_CREATE Name jms:topic:EVENT.SERVICE.CREATE Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_STATE_CHANGED Name jms:topic:EVENT.SERVICE.STATECHANGED Type topic Publishers TMF API Consumers - Body Notification object Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_DELETE Name jms:topic:EVENT.SERVICE.DELETE Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICE.ATTRCHANGED Type topic Publishers TMF API Consumers - Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description xx Message Alias EVENT_SERVICE_ORDER_CREATE Name jms:topic:EVENT.SERVICEORDER.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to create a new issue Message Alias EVENT_SERVICE_ORDER_STATE_CHANGED Name jms:topic:EVENT.SERVICEORDER.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object. Bugzilla service for example uses this to update an issue Message Alias EVENT_SERVICE_ORDER_DELETE Name jms:topic:EVENT.SERVICEORDER.DELETE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_SERVICE_ORDER_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.SERVICEORDER.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service Body Notification object. Can be one of ServiceOrderCreateNotification, ServiceOrderStateChangeNotification, ServiceOrderAttributeValueChangeNotification, ServiceOrderDeleteNotification, etc Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the ServiceOrder object Message Alias EVENT_ALARM_CREATE Name jms:topic:EVENT.ALARM.CREATE Type topic Publishers TMF API Consumers OAS, BUGZILLA Service, CentralLog Service Body AlarmCreateEvent Headers Description The Event contains the Alarm object in payload Message Alias CATALOG_ADD_RESOURCE Name jms:queue:CATALOG.ADD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceCreate Headers Description The Body contains the ResourceCreate object to add Message Alias CATALOG_UPD_RESOURCE Name jms:queue:CATALOG.UPD.RESOURCE Type topic Publishers TMF API Consumers any Body ResourceUpdate Headers resourceid , propagateToSO Description The Body contains the ResourceCreate object to update Message Alias CATALOG_GET_RESOURCE_BY_ID Name jms:queue:CATALOG.GET.RESOURCE Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceCreate object to update Message Alias CATALOG_RESOURCES_OF_PARTNERS Name jms:queue:CATALOG.GET.SERVICESOFPARTNERS Type topic Publishers TMF API Consumers any Body none Headers none Description retrieve all active services of partners Message Alias CATALOG_ADD_RESOURCESPEC Name jms:queue:CATALOG.ADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationCreate Headers Description The Body contains the ResourceSpecificationCreate object to add Message Alias CATALOG_UPD_RESOURCESPEC Name jms:queue:CATALOG.UPD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body ResourceSpecificationUpdate Headers resourceSpecId Description The Body contains the ResourceSpecificationCreate object to update Message Alias CATALOG_GET_RESOURCESPEC_BY_ID Name jms:queue:CATALOG.GET.RESOURCESPEC_BY_ID Type topic Publishers TMF API Consumers any Body resourceSpecid Headers Description The Body contains the object id to find Message Alias CATALOG_UPDADD_RESOURCESPEC Name jms:queue:CATALOG.UPDADD.RESOURCESPEC Type topic Publishers TMF API Consumers any Body resourceid Headers Description The Body contains the ResourceSpecificationCreate object to update or create if not exist Message Alias EVENT_RESOURCE_CREATE Name jms:topic:EVENT.RESOURCE.CREATE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_STATE_CHANGED Name jms:topic:EVENT.RESOURCE.STATECHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_DELETE Name jms:topic:EVENT.SERVICE.RESOURCE Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED Name jms:topic:EVENT.RESOURCE.ATTRCHANGED Type topic Publishers TMF API Consumers BUGZILLA Service, CentralLog Service, other Body Notification object. Headers \"eventid\"=eventid, \"objId\"= objId Description The Event of the Notification object contains the Resource object Message Alias CATALOG_GET_LCMRULE_BY_ID Name jms:queue:CATALOG.GET.LCMRULE Type topic Publishers TMF API Consumers any Body lcmid Headers Description The Body contains the LCMRuleSpec object Message Alias CATALOG_GET_LCMRULES_BY_SPECID_PHASE Name jms:queue:CATALOG.GET.LCMRULES_BY_SPECID_PHASE Type topic Publishers TMF API Consumers any Body Headers header.servicespecid, header.phasename Description The Body contains the LCMRuleSpec objects of the specific Service Spec and the specific phase Message Alias CATALOG_GET_SERVICETESTSPEC_BY_ID Name jms:queue:CATALOG.GET.SERVICETESTSPEC_BY_ID Type queue Destination TMF API service Producers OSOM Body specid Description Return a ServiceTestSpecification Message Alias CATALOG_ADD_SERVICETEST Name jms:queue:CATALOG.ADD.SERVICETEST Type queue Destination TMF API service Producers OSOM Body ServiceTestCreate String json Headers \"orderid\"=orderid, \"serviceTestSpecid\"= specid Description Creates Service Test based an a Service Test Spec, Returns a ServiceTest object Message Alias CATALOG_UPD_SERVICETEST Name jms:queue:CATALOG.UPD.SERVICETEST Type queue Destination TMF API service Producers Body ServiceTestUpdate Headers \"serviceid\" = serviceId, \"propagateToSO\" = true/false Description will update a service test by id and return the service instance. If propagateToSO=true then any service change will be handled by OSOM. This is needed to be controlled in order to avoid update loops Message Alias CATALOG_GET_SERVICETEST_BY_ID Name jms:queue:CATALOG.GET.SERVICETEST Type queue Destination TMF API service Producers OSOM Body String serviceID Description returns a Service TEST instance Message Alias CRD_DEPLOY_CR_REQ Name jms:queue:CRD.DEPLOY.CR_REQ Type queue Destination CRD service Producers OSOM Body CR spec as String Headers related service id Description Returns a String object containing deployment info Message Alias CRD_PATCH_CR_REQ Name jms:queue:CRD.PATCH.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing PATCH info Message Alias CRD_DELETE_CR_REQ Name jms:queue:CRD.DELETE.CR_REQ Type queue Destination CRD service Producers OSOM Body CR as String Headers related service id Description Returns a String object containing deletion info"},{"location":"architecture/nfvapi/","title":"API interaction","text":""},{"location":"architecture/nfvapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/nfvapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all vxfs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eybGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTcxOTI0MjU2LCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiNzNkZmIxODEtNTMwOS00MmExLThkOWUtOGM3YmQ0YTE1YmU0IiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.Pj_hxnyMGhFhN8avU_DiAw1-LlcaIz5Hp9HNqalw-X4\" http://localhost:13000/osapi/admin/vxfs\n</code></pre> <p>Example response:</p> <pre><code>[\n {\n \"id\": 1,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"a954daf2-16da-4b7e-ae42-4825936d453c\",\n \"name\": \"cirros_vnfd\",\n \"iconsrc\": \"/osapi/images/a954daf2-16da-4b7e-ae42-4825936d453c/cirros-64.png\",\n \"shortDescription\": \"cirros_vnfd\",\n \"longDescription\": \"Simple VNF example with a cirros\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/a954daf2-16da-4b7e-ae42-4825936d453c/cirros_vnf.tar.gz\",\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": 1568981107000,\n \"categories\": [\n {\n \"id\": 3,\n \"name\": \"Service\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 2,\n \"name\": \"Networking\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"descriptor\": \"vnfd-catalog:\\n vnfd:\\n - connection-point:\\n - name: eth0\\n type: VPORT\\n description: Simple VNF example with a cirros\\n id: cirros_vnfd\\n logo: cirros-64.png\\n mgmt-interface:\\n cp: eth0\\n name: cirros_vnfd\\n short-name: cirros_vnfd\\n vdu:\\n - count: 1\\n description: cirros_vnfd-VM\\n id: cirros_vnfd-VM\\n image: cirros034\\n interface:\\n - external-connection-point-ref: eth0\\n name: eth0\\n position: '1'\\n type: EXTERNAL\\n virtual-interface:\\n bandwidth: '0'\\n type: VIRTIO\\n vpci: 0000:00:0a.0\\n name: cirros_vnfd-VM\\n vm-flavor:\\n memory-mb: 512\\n storage-gb: 1\\n vcpu-count: 1\\n vendor: OSM\\n version: '1.0'\\n\",\n \"descriptorHTML\": \"<h3>cirros_vnfd</h3><br><b>Vendor: </b>OSM<br><b>Version: </b>1.0<br><b>Description: </b>Simple VNF example with a cirros<br><b>VM Count: </b>1<br><b>vCPU Count: </b>1<br><b>Memory: </b>512 MB<br><b>Storage: </b>1 GB<br>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 1,\n \"name\": \"cirros034\",\n \"uuid\": \"d4549610-8abd-42ad-97f4-0a64e1c93977\",\n \"shortDescription\": \"Automatically created during vxf cirros_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971426000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 1,\n \"name\": \"cirros_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ADMIN\",\n \"MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n },\n {\n \"id\": 2,\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"createdAt\": null\n },\n \"uuid\": \"4ab80095-a63e-4fe7-8598-e1c7e880706e\",\n \"name\": \"cirros_sriov_vnfd\",\n \"iconsrc\": null,\n \"shortDescription\": \"cirros_sriov_vnf\",\n \"longDescription\": \"Simple VNF example with a cirros SRIOV interface\",\n \"version\": \"1.0\",\n \"packageLocation\": \"/osapi/packages/4ab80095-a63e-4fe7-8598-e1c7e880706e/cirros_sriov.tar.gz\",\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": 1568981100000,\n \"categories\": [\n {\n \"id\": 4,\n \"name\": \"tyu\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n },\n {\n \"id\": 5,\n \"name\": \"tyi\",\n \"productsCount\": 1,\n \"appscount\": 0,\n \"vxFscount\": 1\n }\n ],\n \"extensions\": [],\n \"validationJobs\": [],\n \"screenshots\": \"\",\n \"vendor\": \"OSM\",\n \"published\": false,\n \"termsOfUse\": null,\n \"descriptor\": \"vnfd:vnfd-catalog:\\n vnfd:\\n - connection-point:\\n - name: eth0\\n type: VPORT\\n - name: eth1\\n type: VPORT\\n description: Simple VNF example with a cirros SRIOV interface\\n id: cirros_sriov_vnfd\\n logo: cirros-64.png\\n mgmt-interface:\\n cp: eth0\\n name: cirros_sriov_vnf\\n short-name: cirros_sriov_vnf\\n vdu:\\n - count: 1\\n description: cirros_sriov_vnfd-VM\\n guest-epa:\\n cpu-pinning-policy: DEDICATED\\n cpu-thread-pinning-policy: PREFER\\n mempage-size: SMALL\\n numa-node-policy:\\n mem-policy: STRICT\\n node:\\n - id: '1'\\n node-cnt: '1'\\n id: cirros_sriov_vnfd-VM\\n image: cirros-0.3.6-x86_64\\n interface:\\n - external-connection-point-ref: eth0\\n name: eth0\\n position: '1'\\n type: EXTERNAL\\n virtual-interface:\\n bandwidth: '0'\\n type: VIRTIO\\n vpci: 0000:00:0a.0\\n - external-connection-point-ref: eth1\\n name: eth1\\n position: '2'\\n type: EXTERNAL\\n virtual-interface:\\n type: SR-IOV\\n name: cirros_sriov_vnfd-VM\\n vm-flavor:\\n memory-mb: 4096\\n storage-gb: 10\\n vcpu-count: 4\\n vendor: OSM\\n version: '1.0'\\n\",\n \"descriptorHTML\": \"<h3>cirros_sriov_vnf</h3><br><b>Vendor: </b>OSM<br><b>Version: </b>1.0<br><b>Description: </b>Simple VNF example with a cirros SRIOV interface<br><b>VM Count: </b>1<br><b>vCPU Count: </b>1<br><b>Memory: </b>4096 MB<br><b>Storage: </b>10 GB<br>\",\n \"certified\": false,\n \"certifiedBy\": null,\n \"validationStatus\": \"UNDER_REVIEW\",\n \"packagingFormat\": \"OSMvFIVE\",\n \"supportedMANOPlatforms\": [\n {\n \"id\": 1,\n \"name\": \"osm fivee\",\n \"version\": \"osm fivee\",\n \"description\": \"osm five\"\n }\n ],\n \"vxfOnBoardedDescriptors\": [],\n \"vfimagesVDU\": [\n {\n \"id\": 2,\n \"name\": \"cirros-0.3.6-x86_64\",\n \"uuid\": \"be121176-1d62-4a1b-a3c1-7dce2e069d22\",\n \"shortDescription\": \"Automatically created during vxf cirros_sriov_vnfd submission. Owner must update.\",\n \"packageLocation\": null,\n \"publicURL\": null,\n \"dateCreated\": 1568971740000,\n \"dateUpdated\": null,\n \"refVxFs\": [\n {\n \"id\": 2,\n \"name\": \"cirros_sriov_vnfd\"\n }\n ],\n \"owner\": {\n \"id\": 1,\n \"organization\": \"ee\",\n \"name\": \"Portal Administrator\",\n \"email\": \"\",\n \"username\": \"admin\",\n \"active\": true,\n \"currentSessionID\": null,\n \"apikey\": \"e41c1cc4-aa56-4b7e-9f4d-64589549d768\",\n \"createdAt\": 1568711859000,\n \"roles\": [\n \"ROLE_ADMIN\",\n \"ROLE_MENTOR\"\n ]\n },\n \"published\": false,\n \"termsOfUse\": null,\n \"deployedInfrastructures\": []\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/nfvweb/","title":"Openslice NFV Web Portal","text":"<p>The NFV Web Portal offers a domain-specific UI to manage NFV Services.</p> <p>Indicatively, the portal can be used to: - Register new a new MANO provider (e.g. OSM) - Synchronize the onboarded VNF/NS packages, and the VIMs of the registered MANO provider - Onboard/Delete VNF/NS packages on specific MANO provider - Deploy a NS to a target MANO provider</p> <p>More information can be found at NFV Services.</p>"},{"location":"architecture/oauth/","title":"Authentication Server","text":"<p>Authentication is based on oAuth2. Our authentication service is a Keycloak server which is deployed with Openslice deployment </p> <p>API users needs to authenticate. All APIs (except grant token request) must include Bearer token in request Authorization header.</p>"},{"location":"architecture/oauth/#oauth-token","title":"OAuth token","text":"<p>Get first an oauth token, using your username and password. </p> <pre><code>curl -X POST http://portal.openslice.io/auth/realms/openslice/protocol/openid-connect/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=demouser' -d 'password=demouser' -d 'grant_type=password' -d 'client_id=osapiWebClientId' \n</code></pre> <p>response:</p> <pre><code> {\"access_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw\",\"expires_in\":300,\"refresh_expires_in\":1800,\"refresh_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwZjUxMDk5Yy0wNTIzLTRjNGQtODM0Zi1iNDc0YzBjOTA1MzkifQ.eyJleHAiOjE1ODgyNDIwNzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiZmViOTg5NWEtOTY5ZS00MzIzLWJjY2QtZTY2YzQ0NGE1MzJlIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0Iiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.cDTx9BE1Df8EfGYm3VLr_MNFeymxZtJhMtlK7PVbIuk\",\"token_type\":\"bearer\",\"not-before-policy\":1586797346,\"session_state\":\"3350f493-6627-4373-8544-defd27ad3c74\",\"scope\":\"profile email\"}\n\n</code></pre> <p>The <code>access_token</code> will be used next as a Bearer.</p> <pre><code>curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer yJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1MjQsImlhdCI6MTU4ODI0MDIyNCwianRpIjoiYjg0NGYxZDAtMzk3Mi00YTMyLThiMWEtZDAxMDY3OGZjMTQ4IiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwic3ViIjoiYTFhMjc2NWEtZWM4My00NDU2LWI3YjItMjA3MzE5ODZlMDM1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tY2xpIiwic2Vzc2lvbl9zdGF0ZSI6ImFmMmMzZmY1LTE4YWQtNDFkNC1hYTAyLTFlMGJkNzNmOTM5MSIsImFjciI6IjEiLCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiZGVtb3VzZXIifQ.SMtgV1E44_K_MQumGXZtWsLGVhYNaoM8Pk-DiFIZtUP4Zu-ervOsxHVQMX1frgVERR4jJidBcSshy9TnJ3UjF4l33WujHltbs-1UPy-gaIufVuEpl8RmbjOti3Up70vLfLXbzb6kN6WaahgobWXlbJsSXXwaBPQP6vSX5KigCa8TmzXcuqom14lOrlU-RB2zQTlJ30p7d9ag-a7o3I5m9GZWLJCZW2UYMl1JkskTHKgilA8HFQY4C9DYwWu8YDMyzqQSNumrTlURalBFidFbZvb1kp4dAyct8TysSWSbxxiwaL2RX1PWUqk-5Fpc1Q6BnBC8muMheiukFuoSkuADAg'^C\nubuntu@portal:~$ curl http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHZFRjQnpxczg2VW10NTRVZV8ybTJyWHJkV3dzaWdSZE9EUldMYm1memNvIn0.eyJleHAiOjE1ODgyNDA1NzAsImlhdCI6MTU4ODI0MDI3MCwianRpIjoiOGI2ZTU0NWUtNDIyYy00NzFiLWEwN2UtYTUzYzY1NDQ0MzZmIiwiaXNzIjoiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8vYXV0aC9yZWFsbXMvb3BlbnNsaWNlIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImExYTI3NjVhLWVjODMtNDQ1Ni1iN2IyLTIwNzMxOTg2ZTAzNSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9zYXBpV2ViQ2xpZW50SWQiLCJzZXNzaW9uX3N0YXRlIjoiMzM1MGY0OTMtNjYyNy00MzczLTg1NDQtZGVmZDI3YWQzYzc0IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjEzMDgyIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHA6Ly9vcGVuc2xpY2UuaW8iLCJodHRwOi8vbG9jYWxob3N0OjEzMDAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL3BvcnRhbC5vcGVuc2xpY2UuaW8iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIk5GVl9ERVZFTE9QRVIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwiRVhQRVJJTUVOVEVSIiwiVVNFUiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZW1vdXNlciJ9.TnzzpRLMD94UTKpT5_wkr1h4_3KUQmr4TGvFLpJ7cZx-Klrv8tB_eRkWnPqqzCAM9G21a1qXboL8MLMW8ECzG7HYKpobKOGr7LSczMOTdA2ZDyBCRUSOdW77pchu54tJ0ITEkFaDwSKMKKt04V_Sy4U-eIndj0XzzRlkDolWDnK4Z2lRaXAI6fMwOKx1Toa6RfOcemxtzl3pdtjPx92zo6MaKlbIqHK82lxdK0k8aQQaT6TmIrXbZKV2dU_1d3O0q0dVUEZJ_1kzwqOFkmxr9w0EnndC6ccYJlDAr_-GgUhhhNOn5v6tjYLUQdj5e4KEAsxIPzaCreK4un7mEAPmDw'\n\nResponse:\n\n\n[{\"uuid\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"lastUpdate\":\"2020-03-11T23:19:05Z\",\"@baseType\":\"BaseEntity\",\"@schemaLocation\":null,\"@type\":\"ServiceCatalog\",\"href\":null,\"name\":\"Example Facility Services\",\"description\":\"Example Facility Services\",\"lifecycleStatus\":\"Active\",\"version\":\"1.0\",\"validFor\":{\"endDateTime\":\"2039-11-20T23:07:21Z\",\"startDateTime\":\"2019-11-20T23:07:21Z\"},\"relatedParty\":null,\"id\":\"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\"category\":[{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"Generic Services\",\"@referredType\":null,\"id\":\"98b9adf1-a1d6-4165-855f-153ddc2131b1\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"External\",\"@referredType\":null,\"id\":\"08ffdb3c-6237-45d0-9f3a-d43b5fc5f0b6\"},{\"@baseType\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"@schemaLocation\":null,\"@type\":\"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\"href\":null,\"name\":\"eMBB\",\"@referredType\":null,\"id\":\"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"}]}]\n\n\n</code></pre>"},{"location":"architecture/osom/","title":"Openslice Service Orchestration and Order Management - OSOM","text":"<p>OSOM is a service responsible for:</p> <ul> <li>Service Order Management (SOM)</li> <li>Service Orchestration (SO)</li> </ul> <p>It uses open source Flowable Business process engine (https://www.flowable.org) .</p> <p>A Service Order follows the states as defined in TMF641 specification: </p> <p></p>"},{"location":"architecture/osom/#initial-state","title":"Initial state","text":"<p>When a new order is created, it goes into the Initial state. It is stored in the repository and triggers an Event.</p> <p></p> <p>Administrators are notified usually from the Ticketing System of a new order. They login to Openslice and change the State of the order either to ACKNOWLEDGED or REJECTED. If ACKNOWLEDGED they can Propose a startDate, add Notes, and add any additional service items</p>"},{"location":"architecture/osom/#order-scheduler","title":"Order scheduler","text":"<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p> <p></p> <p></p> <p>It retrieves all orders that are in ACKNOWLEDGED state and if the start date is in time it will initialize the process by settingn the order in IN_PROGRESS state. Finally the Start Order Process will start.</p>"},{"location":"architecture/osom/#start-order-process","title":"Start order process","text":"<p>This process for now is a draft simple prototype to make a simple orchestration via NFVO. Here the actual Services (TMF638/640 model) are created and attached to Service Order and Service Inventory.</p> <p></p> <p></p> <p>We expect here to check which tasks can be orchestrated by NFVO and which by human. We create the equivalent Services(TMF638/640 model) for this order.</p> <ol> <li>During check it should decide to create Service(s) for this service order O1 and send it to ServiceInventory</li> <li>The Services(TMF638 model) are assigned to the Order O1 In supportService List</li> <li>Each OrderItem OI1 is related to one serviceSpecification</li> <li>Each ServiceSpecification has also related serviceSpecRelationships</li> <li>So if we receive an order O1 for a ServiceSpec A which relates to (a bundle of) 3 specs(2 CFS, 1 RFS) we do the following:<ol> <li>Create a Service S_A(TMF638 model) for ServiceSpec A for Order O1</li> <li>We create also 3 Services S_C1, S_C2 and S_R1 equivalent to the serviceSpecRelationships (2 CFS, 1 RFS) </li> <li>At this point the order will have 1 Local Service Orchestration Process(S_A), 2 supportingServices refs(S_C1, S_C2) and 1 supportingResource(S_R1)</li> <li>The 3 supportingServices and 1 supportingResource correspond to total 4 Services in ServiceInventory</li> <li>Service S_A will have: <ol> <li>startMode 1: Automatically by the managed environment</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> </ol> </li> <li>Services S_C1 and S_C2 we decide that cannot be orchestrated then they have <ol> <li>startMode: 3: Manually by the Provider of the Service</li> <li>State: RESERVED and the Lifecycle will be handled by OSOM</li> <li>If the CFS is a bundle spec it is further recursively orchestrated </li> </ol> </li> <li>Service S_R1 will have <ol> <li>startMode 1: Automatically by the managed environment.</li> <li>State: RESERVED</li> <li>IF The Service has the characteristic CharacteristicByName( \"NSDID\") it will be further processed by the NFVO </li> </ol> </li> </ol> </li> </ol> <p>There will be two instances of task \"User Task Manual Complete Service\" each for Services S_C1 and S_C2. The task is Transient for now. It displays only the services that are not automated! Here is a flow for future:</p> <ol> <li>We wait here for human decision.</li> <li>From API we get a result: a. If set to ACTIVE/TERMINATED then we complete the task b. In any other state we stay in this task until it is resolved as in step a c. The Status of ORDER O1 is also updated to PARTIAL</li> </ol> <p>There will be an instance of NFVODeploymentRequest process each for Service S_R1. (see later)</p> <ol> <li>This process is related with the NFVO orchestration</li> <li>It will send a msg to NFVO(s?) for a specific deployment request</li> </ol> <p>All services in \"Order Complete\" are in a status:</p> <ol> <li>Depending on the result the service S_A is either ACTIVE or INACTIVE or TERMINATED</li> <li>The Status of ORDER O1 is also updated to COMPLETED or PARTIAL (in case we have some services running) or FAILED (in cases we have errors)</li> </ol> <p>A Service follows the states as defined in TMF638 Service Inventory specification: </p> <p></p>"},{"location":"architecture/osom/#nfvodeploymentrequest-process","title":"NFVODeploymentRequest process","text":"<p>This process is related with the NFVO orchestration It will send a msg to NFVO(s?) for a specific deployment request Then it checks the deployment status. It will wait 30 secs each time until the deployment is running (or failed)</p>"},{"location":"architecture/osom/#check-in-progress-orders-process","title":"Check In Progress orders process","text":"<p>Every 1 minute the \"Check In Progress Orders\" process is executed checking if a supported Service changed state (i.e. to ACTIVE) then the whole Order will change state (e.g. go to COMPLETED)</p> <p></p>"},{"location":"architecture/osom/#external-service-provider-deployment-request-process","title":"External Service Provider Deployment Request process","text":"<p>This process contains tasks for submitting order requests to external partners. - Submit Order To External Service Provider Task: This task creates automatically a Service Order request to a 3rd party provider SO that hosts the Service Specification - Check external service order fulfillment task: This task Check external partner for Service creations and updates our local inventory of services the service characteristics of remote Service Inventory</p>"},{"location":"architecture/osom/#fetch-partner-services-process","title":"Fetch Partner Services Process","text":"<p>Every 2 minutes the \"fetchPartnerServicesProcess\" process is executed checking remote Partner Organizations for changes in the published catalogues. The Fetch and Update External Partner Services Task is executed in paralle l for each Partner Organization </p>"},{"location":"architecture/osom/#local-service-orchestration-process","title":"Local Service Orchestration Process","text":"<p>This process handles automatically services that need to be further orchestrated or processed by OSOM. For example, for a CFS Bundled service we create such automated service instances that just aggregate the underlying services. </p>"},{"location":"architecture/tmfapi/","title":"TMF OpenAPI specification","text":"<p>PLease check the complete specification here.</p>"},{"location":"architecture/tmfapi/#api-interaction","title":"API interaction","text":""},{"location":"architecture/tmfapi/#oauth-token","title":"OAuth token","text":"<p>See oauth</p>"},{"location":"architecture/tmfapi/#request-a-protected-api-resource","title":"Request a protected API resource","text":"<p>Example: Get all Service Catalogs (check the <code>Authorization:Bearer</code> to be correct)</p> <pre><code>curl -H \"Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbIm9wZW5hcGkiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSJdLCJvcmdhbml6YXRpb24iOiJteW9yZ2FuaXp0aW9uIiwiZXhwIjoxNTc4NTA1MDcyLCJhdXRob3JpdGllcyI6WyJST0xFX01FTlRPUiIsIlJPTEVfQURNSU4iXSwianRpIjoiMTFlNGYxYTUtZDY0Ny00YzA1LWE0ZGMtYWFhYzUyMjk4YzMwIiwiY2xpZW50X2lkIjoib3NhcGlXZWJDbGllbnRJZE91dCJ9.gm7cKdusDrdMRkxEiFU5sENKGRC1xwVj2SgPRmE9xxx\" -H \"accept: application/json;charset=utf-8\" -X GET \"http://portal.openslice.io/tmf-api/serviceCatalogManagement/v4/serviceCatalog\"\n\n</code></pre> <p>response:</p> <pre><code>[\n {\n \"uuid\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"lastUpdate\": \"2019-12-19T10:45:55Z\",\n \"@baseType\": \"BaseEntity\",\n \"@schemaLocation\": null,\n \"@type\": \"ServiceCatalog\",\n \"href\": null,\n \"name\": \"Example Facility Services\",\n \"description\": \"Example Facility Services\",\n \"lifecycleStatus\": \"Active\",\n \"version\": \"1.0\",\n \"validFor\": {\n \"endDateTime\": \"2039-11-20T23:07:21Z\",\n \"startDateTime\": \"2019-11-20T23:07:21Z\"\n },\n \"relatedParty\": null,\n \"id\": \"9e186cd5-b2b2-4a06-b1d6-895720193bc9\",\n \"category\": [\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"eMBB\",\n \"@referredType\": null,\n \"id\": \"ef2c90dd-b65e-4a9f-a9c3-427c9fb0219b\"\n },\n {\n \"@baseType\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"@schemaLocation\": null,\n \"@type\": \"org.etsi.osl.tmf.scm633.model.ServiceCategoryRef\",\n \"href\": null,\n \"name\": \"Generic Services\",\n \"@referredType\": null,\n \"id\": \"98b9adf1-a1d6-4165-855f-153ddc2131b1\"\n }\n ]\n }\n]\n</code></pre>"},{"location":"architecture/tmfweb/","title":"Openslice TMF Web Portal","text":"<p>Openslice comprises of a web landing page that navigates to the respective TMF Portal.</p> <ul> <li>Services Portal</li> <li>Products Portal</li> <li>Testing Portal</li> <li>Resources Portal</li> </ul> <p>The landing page and the TMF portals (Services, Products, Testing, Resources) are written in Angular and are maintained under the same Angular project.</p> <p>Following you may find the scope each portal focuses on and the main TMF APIs it supports.</p> <p>Services Portal is a designated portal for the: - Service Designer - To design Customer Facing Services as bundles of Resource Facing Services that map to specific Resourses (e.g. NFV, Testing, General Resources). Then, it is charged with the designed Services' exposure to public Service Catalogs. - Service Customer - To browse the public Service Catalogs and order the offered Services. The fulfilment process of the Service Order is also captured and the final deployed Services are exposed to the Customer.</p> <p>Products Portal is a designated portal for the: - Product Designer - To design Products as bundles of available Services. Then, it is charged with the designed Products' exposure to public Product Catalogs. - Product Customer - To browse the public Product Catalogs and navigate to the respective offered Services.</p> <p>Testing Portal is a designated portal for the: - Testing Designer - To design Tests and provide the testing scripts as attachments to the latter. The Tests can be imported as Services at the Services Portal, and can be included in a Service Bundle.</p> <p>Resources Portal is a designated portal for the: - Resource Administrator - To view the available Resources that are being synchronized from the underlying infrastructure.</p> TMF620 TMF632 TMF633 TMF634 TMF638 TMF639 TMF640 TMF641 TMF642 TMF653 TMF685 Services Portal x x x x x x Products Portal x x Testing Portal x x Resources Portal x x x x <p>From the landing page, the user can also navigate towards the NFV portal. See NFV WEB.</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/","title":"CRIDGE: A Service to manage Custom Resources in a Kubernetes Cluster","text":""},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#intended-audience-osl-developers","title":"Intended Audience: OSL developers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>CRIDGE is a service designed to create and manage Custom Resources (CRs) based on Custom Resource Definitions (CRDs) installed on a Kubernetes cluster. By leveraging the OpenSlice (OSL), CRIDGE enables seamless integration and orchestration within Kubernetes environments, utilizing Kubernetes APIs via the TMF APIs and models. Thus, more or less, OSL exposes Kubernetes APIs as TMF APIs and models.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>CRIDGE service allows OSL to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OSL services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>CRIDGE capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <p>OSL can expose CRs in service catalogs, facilitating their deployment in complex scenarios. These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</p> </li> </ol> <p>Why the CRIDGE name? we wanted to build a service that maps TMF models to CRDs; a kind of a CRD to TMF bridge. Therefore CRIDGE was born</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#approach","title":"Approach","text":"<p>OSL in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. The OSL Orchestrator (OSOM) will manage the lifecycle of the Service Order.</li> <li>OSOM creates a Resource in OSL Resource inventory and requests (via CRIDGE) a new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol> <p></p> <p>The provided image illustrates the architecture and workflow of the CRIDGE service, showing how it interacts with other components within a Kubernetes (K8s) cluster. Here is an explanation of the key components and flow in the diagram:</p> <ul> <li>Other OSL Services: This box represents various OSL services such as Service Spec Catalogue, Resource Spec Catalogue, Service Inventory, Resource Inventory, and OSOM (OpenSlice Service Orchestration and Management).</li> <li>Service Bus: This is the communication layer that facilitates interaction between the CRIDGE service and other OSL services.</li> <li>CRIDGE: CRIDGE acts as a bridge that converts CRDs (Custom Resource Definitions) to TMF (TM Forum) APIs and models. It enables the creation and management of Custom Resources (CRs) in the Kubernetes cluster.</li> <li> <p>K8s API: The Kubernetes API server, which is the central control point for managing the Kubernetes cluster. CRIDGE interacts with the K8s API to manage CRDs and CRs.</p> <p>CRD (Custom Resource Definition): A CRD is a way to define custom resources in Kubernetes cluster-wise. It allows the extension of Kubernetes API to create and manage user-defined resources. Example :</p> </li> </ul> <pre><code> apiVersion: apiextensions.k8s.io/v1\n kind: CustomResourceDefinition\n metadata:\n name: myresource.example.com\n</code></pre> <ul> <li>Namespaces: Kubernetes namespaces provide a way to partition resources within a cluster. The diagram shows that multiple namespaces (nsxx, nsyy, nsz) can be managed by CRIDGE.</li> </ul> <p>CR (Custom Resource): A CR is an instance of a CRD. It represents the actual custom resource that is managed within the Kubernetes cluster. Example shown in different namespaces:</p> <pre><code> apiVersion: example.com/v1\n kind: Myresource\n metadata:\n name: example_resource_1\n</code></pre> <p>In a nutchell:</p> <ul> <li>Various OSL services use the Service Bus to communicate with CRIDGE.</li> <li>CRIDGE converts requests towards Kubernetes API and vice-versa, facilitating the integration of custom resources with other OSL services.</li> <li>CRDs are defined and managed through the K8s API. The example CRD is named myresource.example.com.</li> <li>Deploying CRs in Namespaces: Custom resources defined by the CRD are created and managed within different namespaces in the Kubernetes cluster. Each namespace can have its own instances of the custom resources.<pre><code>> The example CRD myresource.example.com allows the creation of custom resources of type Myresource.\n> Instances of Myresource are created in various namespaces, each with unique names like example_resource_1.\n</code></pre> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#handling-more-than-one-clusters","title":"Handling more than one clusters","text":"<p>A CRIDGE service is usually responsible for managing one cluster. In the following diagram we show how it can be used for managing multiple clusters:</p> <p></p> <p>We assume that there is an OSL Management cluster that OSL is installed. CRIDGE is also installed there if we would like to manage resources in the same management cluster. - Each CRIDGE service has for example its own configuration to connect to target cluster - Each CRIDGE can be installed either in the managed cluster or at the remote clusters. Connectivity is handled via the service bus - Important: Each CRIDGE has a different context and API endpoints. This is used to request CRDs on a different cluster</p> <p>A CRD has a globally unique name for example mycrd.example.com. So we need to somehow identify also the different cluster</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OSL Resource Inventory need to be aware of these events.</p> <p>The sync process is found in the code and explained by the following picture:</p> <p></p> <p>WatcherService is executed when the cridge service application starts (see onApplicationEvent). First things:</p> <ul> <li>KubernetesClientResource is a class that wraps fabric8\u2019s KubernetesClient<ul> <li>This fabric8 KubernetesClient is initialized from the kubeconf and default context of the machine that runs CRIDGE</li> </ul> </li> <li>On CRIDGE Start up we try to register this cluster and context to OSL catalogs.<ul> <li>See registerKubernetesClientInOSLResource method which registers the KubernetesContextDefinition in Resource Inventory as a LogicalResource via createOrUpdateResourceByNameCategoryVersion method</li> </ul> </li> <li>After the creation(or update) of this cluster as a Resource in OSL we proceed to create SharedIndexInformers for CustomResourceDefinition objects</li> <li>In this way CRIDGE is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)</li> <li>The SharedIndexInformer events notify CRIDGE, which is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL(CRIDGE)<ul> <li>NOTE: The ADD event is raised every time also we run CRIDGE. Therefore, on ADD we do the method to createORupdate resource specifications and resources</li> </ul> </li> <li>On ADD event:<ul> <li>The CRD is transformed to OSL Kubernetes domain model: method kubernetesClientResource.KubernetesCRD2OpensliceCRD</li> <li>Then the OSL Kubernetes domain model is:<ul> <li>transformed to Resource Specification and is stored to catalog (see createOrUpdateResourceSpecByNameCategoryVersion)</li> <li>Transformed to Resource and is stored to catalog (see createOrUpdateResourceByNameCategoryVersion)</li> </ul> </li> <li>Conceptually while a CRD is a new resource located in the Kubernetes cluster resource, it is transformed also as a Resource Specification (a high-level entity) which is ready to be reused as an entity to other scenarios. The same concept as in Kubernetes where a CRD is a definition ready to be used for instantiating resources of this CRD</li> <li>Then for this CRD a Watcher is added for all Resources of this Kind (fabric8\u2019s GenericKubernetesResource entity) </li> <li>When we have a newly added/updated/deleted resource of a certain CRD the method updateGenericKubernetesResourceInOSLCatalog is called for this object (fabric8\u2019s GenericKubernetesResource entity)</li> <li>We examine if the resource has label org.etsi.osl.resourceId<ul> <li>This label is added by OSOM during service orders to correlate K8S requested resources with resources in inventory</li> </ul> </li> <li>If the label exists, we update the resource by ID updateResourceById</li> <li>Else a resource is created in catalog</li> </ul> </li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#deployment-of-a-new-cr-based-on-a-crd","title":"Deployment of a new CR based on a CRD","text":"<ul> <li>A message arrives to deploy a CR<ul> <li>The call examines if this CRIDGE service can handle the request (based on context and masterURL)</li> </ul> </li> <li>There are headers received and a crspec in json</li> <li>The crspec is unmarshaled as GenericKubernetesResource</li> <li>Headers are in format org.etsi.osl.*</li> <li>These headers are injected as labels <ul> <li>(see later in orchestration)</li> </ul> </li> <li>A namespace is created for this resource</li> <li>Watchers are created for this namespace for e.g. new secrets, config maps etc , so that they can be available back as resources to the Inventory of OSL (Note only Secrets for now are watched)</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>See ExposingKubernetesResources</p>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p> <p>However, the following issue needs to be solved: ** How to map the CR lifecycle that is defined in the CRD with the TMF resource Lifecycle? ** - For this We introduced the following characteristics: _CR_CHECK_FIELD, _CR_CHECKVAL_STANDBY, _CR_CHECKVAL_ALARM, _CR_CHECKVAL_AVAILABLE, _CR_CHECKVAL_RESERVED, _CR_CHECKVAL_UNKNOWN, _CR_CHECKVAL_SUSPENDED</p> <p>OSOM sends to CRIDGE a message with the following information:</p> <ul> <li>currentContextCluster: current context of cluster </li> <li>clusterMasterURL: current master url of the cluster </li> <li>org.etsi.osl.serviceId: This is the related service id that the created resource has a reference </li> <li>org.etsi.osl.resourceId: This is the related resource id that the created CR will wrap and reference. </li> <li>org.etsi.osl.prefixName: we need to add a short prefix (default is cr) to various places. For example in K8s cannot start with a number </li> <li>org.etsi.osl.serviceOrderId: the related service order id of this deployment request </li> <li>org.etsi.osl.namespace: requested namespace name </li> <li>org.etsi.osl.statusCheckFieldName: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>org.etsi.osl.statusCheckValueStandby: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAlarm: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueAvailable: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueReserved: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>org.etsi.osl.statusCheckValueUnknown: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li> <p>org.etsi.osl.statusCheckValueSuspended: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </p> </li> <li> <p>Parameters:</p> <ul> <li>aService reference to the service that the resource and the CR belongs to</li> <li>resourceCR reference the equivalent resource in TMF repo of the target CR. One to one mapping</li> <li>orderId related service order ID</li> <li>startDate start date of the deployment (not used currently)</li> <li>endDate end date of the deployment (not used currently)</li> <li>_CR_SPEC the spec that is sent to cridge (in json)</li> </ul> </li> <li> <p>Returns:</p> <ul> <li>a string response from cridge. It might return \"OK\" if everything is ok. \"SEE OTHER\" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. Any other response is handled as error</li> </ul> </li> <li> <p>CRIDGE receives the message and creates according to the labels the necessary CR</p> </li> <li>It monitors the created resource(s) in namespace (see the Sequence Diagram in previous images)</li> <li>It monitors and tries to figure out and map the Status of the CR to the TMF Status according to the provided org.etsi.osl.statusCheck* labels</li> <li>It sends to the message bus the current resource for creation or update to the TMF service inventory</li> </ul>"},{"location":"architecture/CRIDGE/CRIDGEforDevelopers/#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":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/","title":"Exposing Kubernetes Operators as a Service : Offering \"Calculator as a Service\" through OpenSlice","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>To illustrate the powerful concept of Kubernetes operators and how they can be utilized to offer a service through OpenSlice, let's provide an example of a \"Calculator as a Service.\" </p> <p>This example will demonstrate the flexibility and capabilities of Kubernetes operators in managing custom resources and automating operational tasks.</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#offering-calculator-as-a-service-through-openslice","title":"Offering \"Calculator as a Service\" through OpenSlice","text":"<ul> <li>We have a service that can accept two integers and an action (SUM, SUB, etc) and returns a result</li> <li>We would like to offer it as a Service through OpenSlice</li> <li>So when a user orders it with some initial parameters, OpenSlice will create it and return the result</li> <li>Also while the service is active, we can do further calculations, until we destroy it.</li> </ul> <p>Assume the following simple CRD of a calculator model accepting two params (spec section) and an action and returning a result (status section)</p> <p>The controller (the calculator code) is implemented in any language and is installed in a Kubernetes cluster</p> <pre><code>\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n name: mycalculators.examples.osl.etsi.org\nspec:\n group: examples.osl.etsi.org\n names:\n kind: MyCalculator\n plural: mycalculators\n singular: mycalculator\n scope: Namespaced\n versions:\n - name: v1alpha1\n schema:\n openAPIV3Schema:\n properties:\n spec:\n properties:\n parama:\n type: integer\n paramb:\n type: integer\n action:\n type: string\n type: object\n status:\n properties:\n result:\n type: integer\n status:\n type: string\n type: object\n type: object\n served: true\n storage: true\n subresources:\n status: {}\n</code></pre> <p>Request to the cluster (through e.g. kubectl apply)</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p>Response</p> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n\u00a0 creationTimestamp: '2023-12-05T12:26:07Z\u2019\n\n<snip>\n\nstatus:\n\u00a0 result: 350\n\u00a0 status: CALCULATED\nspec:\n\u00a0 action: SUM\n\u00a0 parama: 170\n\u00a0 paramb: 180\n\n</code></pre> <p>To perform this through OpenSlice as a Service Specification ready to be ordered we need to do the following:</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#crd-is-saved-automatically-as-resource-specification","title":"CRD is saved automatically as Resource Specification","text":"<p>As soon as the CRD is deployed in the cluster (e.g. by your admin via kubctl or via any installation through the internet) it is automatically transformed and is available in OpenSlice catalogs as a Resource Specification.</p> <ul> <li>See also the fully qualified name of the resource specification. <ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@docker-desktop@https://kubernetes.docker.internal:6443/</li> <li>The resource specification name is quite unique, so you can install the CRD in many clusters around the internet. Each CRD on each cluster will appear here, for example:<ul> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@default_cluster@https://10.10.10.8:6443/</li> <li>MyCalculator@examples.osl.etsi.org/v1alpha1@edge1_cluster@https://172.16.10.10:6443/</li> </ul> </li> <li>Having this OpenSlice can manage resources in multiple clusters</li> </ul> </li> </ul> <p></p> <p>See also the detailed characteristics. See how OpenSlice makes all characteristics automatically flat and expanded with key-value style</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-to-users","title":"Expose to Users","text":""},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#start-by-creating-a-resourcefacingservicespecification","title":"Start by Creating a ResourceFacingServiceSpecification","text":"<p>From the UI menu create a new Service Specification</p> <p> </p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#creation-of-crd-related-characteristics","title":"Creation of CRD-related characteristics","text":"<ul> <li>We need now to adjust some characteristics of this CRD as Resource Specification.</li> <li>OpenSlice transalted automatically the CRD spec in a flat list of characteristics.So the \"spec\" section from the original yaml for example, is now unfold into: spec, spec.parama, spec.paramb, etc. the same for \"status\" object</li> <li> <p>We need to make OpenSlice aware of when the service will be active. </p> <ul> <li>So we go to characteristic _CR_CHECK_FIELD and we define that the field that shows the status of the service is the characteristic \"status.status\" (is a text field) </li> <li>Then we go to _CR_CHECKVAL_AVAILABLE and we define the value CALCULATED, which signals the following: When the characteristic \"status.status\" has the value \"CALCULATED\" then OpenSlice will mark the underlying service as \"ACTIVE\"</li> <li>We need also to define the yaml file that OpenSLice will use to create the new resource in the kubernetes cluster</li> <li>We insert the YAML in the characteristic _CR_SPEC</li> </ul> <p>the _CR_SPEC is: </p> </li> </ul> <pre><code>apiVersion: examples.osl.etsi.org/v1alpha1\nkind: MyCalculator\nmetadata:\n name: mycalculator.examples.osl.etsi.org\nspec:\n parama: 170\n paramb: 180\n action: 'SUM'\n\n</code></pre> <p></p> <p>However the values are fixed. How do we allow a user to pass parameters through OpenSlice</p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#expose-in-catalog","title":"Expose in Catalog","text":"<p>Create a new CustomerFacingServiceSpecification</p> <pre><code>- Go to the menu Service Specification>New Service Specification\n- Create a service My Calulator and mark it as a Bundle\n- Go to Service Specification Relationships and add MyCalculatorRFS\n- The service will be automatically transformed to a \"CustomerFacingServiceSpecification\"\n- Add the following characteristics as the image shows:\n</code></pre> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#allow-users-to-pass-new-values-through-openslice","title":"Allow users to pass new values through OpenSlice","text":"<p>We need to Create LCM rules in CustomerFacingServiceSpecification:</p> <pre><code>- The goal of the rules is to allow the user to pass parameters to the actual resource towards the cluster.\n- we will create one rule that will pass the parameters just before creating the service (PRE_PROVISION phase)\n- we will create one rule that will pass the parameters while the service is active (SUPERVISION phase)\n- The rules will be the same\n</code></pre> <p></p> <p>If we see one rule it will look like the following: </p> <ul> <li>We need to change the _CR_SPEC characteristic of the referenced ResourceFacingServiceSpecification</li> <li>First bring a block from Service>Relationships>Service Refs and drop the \"Service MyCalculatorRFS\" block</li> <li>Then add a list block from Lists</li> <li>Then add the block that modifies a referenced characteristic from Service>Relationships>Service Refs the block \"Set value to characteristic of a Referenced Service\"</li> <li>Add a block for text _CR_SPEC </li> <li>We use a block that changes a String according to variables Text>\"A formatted text replacing variables from List\"</li> <li>See that we have as Input string the YAML string lines<ul> <li>see that parama, paramb has a %d (they accept integers), action is %s (accepts a string)</li> <li>See that the variables tha will replace the %d, %d and %s are an list<ul> <li>the first %d will be replaced with the value from characteristic spec.parama</li> <li>the second %d will be replaced with the value from characteristic spec.paramb</li> <li>the %s will be replaced with the value from characteristic spec.action</li> </ul> </li> </ul> </li> </ul> <p>If we see the SUPERVISION rule it will look like the following:</p> <ul> <li>It contains also the Result field, which takes the value from the referenced service</li> <li>Add a block for the Result field from Service>Number blocks</li> <li>Add a str to int block from Number blocks</li> <li>Add Service>Relationships>Service Refs and drop the input block [Service MyCalculatorRFS] \"Get Service details from current context running service\" and select from the drop down the \"serviceCharacteristicValue\"</li> <li>Add as name the \"status.result\" </li> </ul> <p></p> <p></p> <p>Expose it then to a catalogue for orders through the Service Categories and Service Catalogs</p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#order-the-service","title":"Order the Service","text":"<p>When a user orders the service, it will look like this:</p> <p></p> <ul> <li>After the Service Order we have 2 services in service inventory on CFS and on RFS. Both have references to values</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The Actual resources are running in the Kubernetes cluster managed by OpenSlice</li> <li>The result is in the characteristic status.result of the running service</li> </ul> <p></p> <p></p>"},{"location":"service_design/examples/ExposingCRDs_aaS_Example_Calculator/ExposingCRDs_aaS_Example_Calculator/#modify-the-running-service","title":"Modify the running service","text":"<p>The user can modify the service</p> <p></p> <ul> <li>After a while the update is applied to the cluster, the controller will pick up the resource update and patch the resource</li> <li>OpenSlice (via CRIDGE service) updates the Resource in Resource Inventory and OSOM updates the Services in Service Inventory</li> <li>The result will be available to the respective characteristic \"Result\" after a few seconds, as need to go through various steps (OpenSlice orchestrator, down to kubernetes, to Calculator controller and back)</li> </ul> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/","title":"Expose and manage Kubernetes Custom Resource Definitions (Operators) in a Kubernetes Cluster","text":"<p>OpenSlice is capable of exposing Kubernetes Resources and Definitions as Service Specifications</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#intended-audience-service-designers","title":"Intended Audience: Service Designers","text":"<p>Kubernetes is an orchestration system for automating software deployment, scaling, and management. One can interact though the Kubernetes API and it has a set of objects ready for use out of the box. Custom Resource Definitions (CRDs) is a way that allows to manage things other than Kubernetes itself and allows to create our own objects The use of CRDs makes the possibilities of Kubernetes management almost limitless. You can extend the base Kubernetes API with any object you like using CRDs.</p> <p>By allowing the design and lifecycle management of services/resources that expose CRDs/CRs in a Kubernetes cluster via the TMF APIs, OSL can be used in many complex scenarios now involing resources from multiple domains.</p> <ol> <li> <p>OpenSlice is capable to:</p> <ul> <li>Create and manage Custom Resources (CRs) using installed CRDs on a target Kubernetes cluster.</li> <li>Facilitate complex orchestration scenarios by wrapping Kubernetes APIs as TMF APIs and models.</li> <li>Handles connectivity to a Kubernetes cluster and manages the lifecycle of CRDs</li> <li>Wraps the Kubernetes API, Receives and provides resources towards other OpenSlice services via the service bus</li> </ul> </li> <li> <p>Enabling Loose Coupling and Orchestration</p> <ul> <li>Language Flexibility: Developers can write CRDs in any language and expose them via the Kubernetes APIs. OSL will reuse these CRDs, enhancing flexibility and integration capabilities.</li> <li>Familiar Deployment: Developers can create and deploy applications using familiar tools such as Helm charts, simplifying the process and reducing the learning curve.</li> </ul> </li> <li> <p>Ecosystem Reusability</p> <ul> <li>OpenSlice capitalizes on the extensive Kubernetes ecosystem, particularly focusing on operators (CRDs).</li> <li>Key repositories and hubs such as artifacthub.io and Operatorhub.io can be utilized for finding and deploying operators.</li> </ul> </li> <li> <p>Service Catalog Exposure and Deployment</p> <ul> <li>OpenSlice can expose CRs in service catalogs, facilitating their deployment in complex scenarios.</li> <li>These scenarios may include service bundles that involve multiple systems, such as RAN controllers or other Kubernetes clusters, providing a robust and versatile deployment framework.</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#approach","title":"Approach","text":"<p>OpenSlice in general is responible for exposing service specifications which are ready to be ordered and orchestrated, through tmforum Open APIs as defined in the OSL Service Spec Catalog. Usually for a service specification a corresponding (one or more) resource specification (resourceSpecificationReference) is registered in the OSL Resource Spec Catalog.</p> <p>The following image illustrates the approach.</p> <p></p> <ol> <li>A CRD in a cluster will be mapped in TMF model as a Resource specification and therefore can be exposed as a service specification in a catalog</li> <li>Service Orders can be created for this service specification. </li> <li>OSOM creates a Resource in OSL Resource inventory and requests new Custom Resource (CR) in the target cluster<ul> <li>The resource is created in a specific namespace (for example the UUID of the Service Order)</li> <li>A CR in a cluster will be mapped in TMF model as a Resource in the resource Inventory</li> <li>Other related resources created by the CRD Controller within the namespace are automatically created in OSL Resource Inventory under the same Service Order</li> </ul> </li> </ol>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#awareness-for-crds-and-crs-in-cluster","title":"Awareness for CRDs and CRs in cluster","text":"<p>CRDs and CRs can appear (disappear) or change status at any time in a cluster. OpenSlice Resource Inventory need to be aware of these events.</p> <p>When installing OpenSlice you can configure at least one management cluster. OpenSlice connects via a provided kubeconf</p> <ul> <li>On Start up OSL tries to register this cluster and context to OSL catalogs.</li> <li>After the registration of this cluster as a Resource in OSL OSL is always aware of all CRDs and their CRs in the cluster, even if a CRD or CR is added/updated/deleted in the K8S cluster outside of OSL</li> <li>Resources created by OpenSlice have labels, e.g. (org.etsi.osl.*)</li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#expose-crds-as-service-specifications-in-openslice-catalogs","title":"Expose CRDs as Service Specifications in OpenSlice catalogs","text":"<p>A CRD by default is exposed as a Resource Specification</p> <p>To ensure unique names across the clusters that OpenSlice can manage, the name of a CRD is constructed as follows:</p> <p><code>Kind @ ApiGroup/version @ ContextCluster @ masterURL</code></p> <p>For example you might see resource Specifications like:</p> <pre><code>- ```Application@argoproj.io/v1alpha1@kubernetes@https://10.10.10.144:6443/```\n- ```IPAddressPool@metallb.io/v1beta1@kubernetes@https://10.10.10.144:6443/```\n- ```Provider@pkg.crossplane.io/v1@kubernetes@https://10.10.10.144:6443/```\n</code></pre> <p>All attributes of the CRD are translated into characteristics</p> <p>The following specific characteristics are added:</p> <pre><code> - _CR_SPEC: Used for providing the json Custom Resource description to apply\n - _CR_CHECK_FIELD: Used for providing the field that need to be checked for the resource status\n - _CR_CHECKVAL_STANDBY: Used for providing the equivalent value from resource to signal the standby status\n - _CR_CHECKVAL_ALARM: Used for providing the equivalent value from resource to signal the alarm status\n - _CR_CHECKVAL_AVAILABLE: Used for providing the equivalent value from resource to signal the available status\n - _CR_CHECKVAL_RESERVED: Used for providing the equivalent value from resource to signal the reserved status\n - _CR_CHECKVAL_UNKNOWN: Used for providing the equivalent value from resource to signal the unknown status\n - _CR_CHECKVAL_SUSPENDED: Used for providing the equivalent value from resource to signal the suspended status\n</code></pre> <ol> <li> <p>Create a new Service Specification and use this Resource Specification in Resource Specification Relationships</p> <ul> <li>Then the Service Specification is saved as ResourceFacingServiceSpecification</li> </ul> <p>1.1. You can give at this stage values to the characteristics:</p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>1.2. You can now create LCM rules if you wish</p> </li> <li> <p>Create a new Service Specification and use the Resource Facing Service Specification in Service Specification Relationships</p> <ul> <li>Then the Service Specification is saved as CustomerFacingServiceSpecification</li> </ul> <p>2.1. You can give at this stage values to the characteristics: </p> <pre><code>- _CR_SPEC, \n- _CR_CHECK_FIELD\n- _CR_CHECKVAL_STANDBY\n- _CR_CHECKVAL_ALARM\n- _CR_CHECKVAL_AVAILABLE\n- _CR_CHECKVAL_RESERVED\n- _CR_CHECKVAL_UNKNOWN\n- _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>2.2. You We can create LCM rules for this new Service Specification</p> <p>2.3. You Expose configurable values for users to configure during service order</p> </li> </ol> <p></p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#service-orchestration-and-crdscrs","title":"Service Orchestration and CRDs/CRs","text":"<p>OSOM - OpenSlice Service Orchestrator, checks the presence of attribute _CR_SPEC at the RFS to make a request for a CR deployment</p> <ul> <li>_CR_SPEC is a JSON or YAML string that is used for the request<ul> <li>It is similar to what one will do with e.g. a kubectl apply</li> <li>There are tools to translate a yaml file to a json</li> </ul> </li> </ul> <p>LCM rules can be used to change attributes of this yaml/json file, before sending this for orchestration</p>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#mapping-the-cr-lifecycle-that-is-defined-in-the-crd-with-the-openslice-tmf-based-resource-lifecycle","title":"Mapping the CR lifecycle that is defined in the CRD with the OpenSLice (TMF-based) resource Lifecycle","text":"<p>OpenSlice adds automatically as we see the following characteristics: </p> <pre><code> - _CR_CHECK_FIELD\n - _CR_CHECKVAL_STANDBY\n - _CR_CHECKVAL_ALARM\n - _CR_CHECKVAL_AVAILABLE\n - _CR_CHECKVAL_RESERVED\n - _CR_CHECKVAL_UNKNOWN\n - _CR_CHECKVAL_SUSPENDED\n</code></pre> <p>These characteristics instrument OpenSlice services to manage and reflect the lifecycle of a kubernetes resource to OpenSlice's (TMF based) lifecycle</p> <ul> <li>_CR_CHECK_FIELD: The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc) </li> <li>_CR_CHECKVAL_STANDBY: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_ALARM: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_AVAILABLE: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_RESERVED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_UNKNOWN: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> <li>_CR_CHECKVAL_SUSPENDED: The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType) </li> </ul>"},{"location":"service_design/kubernetes/ExposingKubernetesResources/#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":"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/HELM_Installation_aaS_Jenkins_Example/#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/HELM_Installation_aaS_Jenkins_Example/#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/HELM_Installation_aaS_Jenkins_Example/#example-offer-jenkins-as-a-service-via-openslice","title":"Example: Offer Jenkins as a Service via Openslice","text":"<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> <ol> <li>Drag-Drop the _CR_SPEC characteristic of jenkinsrfs from the Service>Text blocks</li> <li>Drag-Drop Text>Formatted text block</li> <li>Drag-Drop Text>Multi-line text input block</li> <li>Copy paste the YAML text</li> <li>Change the spec: destination:namespace to the value %s</li> <li>Drag-Drop Lists>Create list with block delete 2 items (click the gear icon). Connect it to formatted text block</li> <li>Drag-Drop Context>Current Service Order block and select the id. Connect it to the List</li> <li>Save the PRE_PROVISION Rule</li> </ol>"},{"location":"service_design/kubernetes/helm/HELM_Installation_aaS_Jenkins_Example/#expose-the-service-to-your-users","title":"Expose the service to your users","text":"<p>Expose then as CustomerFacingServiceSpecification by using the previous RFSS as Service Specification Relationship 1. Create a Jenkins service and mark as Bundle and save it 2. Go to Service Specification Relationships and assign Jenkinsrfs 3. Add also a Logo if you wish</p> <p> </p> <p>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>"}]} \ 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 3ca37514..6889bf91 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 @@ -2280,7 +2280,7 @@ <li class="md-nav__item"> - <a href="../../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 e4d4da8a..820a0309 100644 --- a/public/develop/service_design/intro/index.html +++ b/public/develop/service_design/intro/index.html @@ -2208,7 +2208,7 @@ <li class="md-nav__item"> - <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html b/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html index c91481d8..bf516fd4 100644 --- a/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html +++ b/public/develop/service_design/kubernetes/ExposingKubernetesResources/index.html @@ -2256,7 +2256,7 @@ <li class="md-nav__item"> - <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/service_design/kubernetes/design_helmaas/index.html b/public/develop/service_design/kubernetes/design_helmaas/index.html index 176a6d64..2f087d16 100644 --- a/public/develop/service_design/kubernetes/design_helmaas/index.html +++ b/public/develop/service_design/kubernetes/design_helmaas/index.html @@ -2194,7 +2194,7 @@ <li class="md-nav__item"> - <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> 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 6e1396fe..2062d876 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 @@ -2265,7 +2265,7 @@ <li class="md-nav__item"> - <a href="../../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 5b1cfdf0..ffc02c7f 100644 --- a/public/develop/service_design/kubernetes/intro/index.html +++ b/public/develop/service_design/kubernetes/intro/index.html @@ -2210,7 +2210,7 @@ <li class="md-nav__item"> - <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../../../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 56a3197d..79d52766 100644 --- a/public/develop/service_design_intro/index.html +++ b/public/develop/service_design_intro/index.html @@ -2194,7 +2194,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 48c643e3..48065026 100644 --- a/public/develop/service_inventory/index.html +++ b/public/develop/service_inventory/index.html @@ -2199,7 +2199,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> diff --git a/public/develop/sitemap.xml b/public/develop/sitemap.xml index 36f1b19a..b8ce234c 100644 --- a/public/develop/sitemap.xml +++ b/public/develop/sitemap.xml @@ -146,7 +146,7 @@ <changefreq>daily</changefreq> </url> <url> - <loc>https://osl.etsi.org/develop/architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/</loc> + <loc>https://osl.etsi.org/develop/architecture/CRIDGE/CRIDGEforDevelopers/</loc> <lastmod>2024-07-02</lastmod> <changefreq>daily</changefreq> </url> diff --git a/public/develop/sitemap.xml.gz b/public/develop/sitemap.xml.gz index f533f124edf6ce6281d70e1d761966890979c908..58f13569da8e85ce9a2f4167f7071bdcf7123ffa 100644 GIT binary patch delta 700 zcmV;t0z>`G1<D1G8h_I;5P<LeimLZ*$_j}Eb-Rad7nTKqcHwNf&NQ*=NATEv{Cg&k zcH0{qkjA+rnK;&GXWp6J?X4MYA)xl|cKmiS9gn~%Uusv~j(`1pxVjnN&EL#YFbHu( zgB{+E>lmAlMX}rMCa5D=+2F*7sz6oK4Hkp2m`*;7=Wj-Iw0{%ySKTo)Ud`KCkf!ly zCJ<3~Q<Sg;<C|huv_sC{kQl8m=hxHgcURN*SJP`6GRV$`sam=U)&YLcOR3FaR-8$C zl;Xtl&s5(Va4$wH5G6FmA1t^iU@vWB0GTpNBZEaDRisbM6;jD4jj!0^dAHV;&@Kkg z6!BFd*#j=TZGSuhd(NjDuKL&t1U+GjS8I$u9GKD>Wtoz>^_ICKBtqXiL#BY<fY`u6 z880`&N+&B|>=O~fw$CO|SB`ajIihN}rTye<-4TM-&XWysB}}e_Ajpa^hSX(cTr<a@ zYRcqQOaU%$GT>FDr9m3fgDhxC8xrYl_0pReJ_K)<dw)`9C(RETqN5TmhlOaw1h$Gf zuv$Q*_^?V@>@0;|+2~A2cd*KV)XNm>EI`rQ95|z0XQHG;nu(Gwo*(Z&Er-+Ehx>jI z-+(~DEC#(wk>c4=*j{EpyVF=3s$RL4Us7TL`?h;h3Nke0%-K~lCF=~g<21^$uDni= zAsImasDA;_r$D9R(96hzm3vuxNsA3A&Y;I;K?WL-OJCyxmi_nl{M{5W4%^x8riib% zVv|->ctZrtbOBU>aVBr^*y~3N$-g0g*+DLH=pYZMr{CtwHlL;Bd+~gaLdqAh?4O8* zG%6WMPWi9KWU=Zq*K%Cb(@FF^#CObYEyE9t8a0e<Z6`PUjLhbYy4~&K^YZIA@#v7e i6qx~)TAg`(0k_c(k7n}!m)4yS;`|SryBjuABme+D5na6i delta 702 zcmV;v0zv)C1<VDI8h_d_5P<LdD-d@GT~+F~V%Y<*?RHzWV%xK2oFTFBBlS2u{(UD8 zSde;X50%Eb5KoNt*_n5y4+m=oI|!(~yC1$8Plf|<%IDe@_rsq*9!Gb>huO`v4hA6( zXtKlmVHsofA<Opr{TOuwD=QrPP-Lh|8erB7v&s1VaCS4GtAAObyKAqh@oLtrg0zfB zGlqz|T_T4a7++=6teJB84~fzGe0DpzeLI@G8%=I$N-w*Zrb_7w*aY}B%cVBQX?7v$ zP_i@2KU00Hz`Yo)K;%#vf3)DDfP=J^0c6T7jSLorRFPgWS4btJG`?Vq=iNpZLc16| zQ^Z$=WDhv^wtw;n>^YzBxawmg5cGs8Ua2wqaAZnnlx0fhHaq5ykO+O}44DFY17ZtD zWxU)9E1fKWu}?$@yDpnRT{zb9<%Fu;j?R;>bw>zRJ5M&mm9Ta>1VL7WG1P5V#x-*c zs-#R_#X7+CAOT)QS{kGwJxGF<w4o-wEnYe^!^hz5@_#_e?4<cFLv&Q4rLYl=Sc5HM z3al0oDL$<0Bu<t>udH+;q<dJWK<Z^3%OpV2+Y~sX-6W!<M4E__&R0*1kIRh@i|%O? z3H~Hw+d7Fsuj@#`?Idh&6QJE|EDe>iTx&5YF@r<XO34LT9dhPuOPic^y4!LZWm%VD zXUI?+K!5(I0npch>c+mYkpwIE8uywOD^Q$4Po0AVG$55G#}zF5_wV_;DPru8vpG!> zUx#8_uc-=$2$<*ws2t-=-r%v<j|P%|cmBGaoTboC?orR*(3ed<OUd_qwLl@|i&%C~ z#9SIx8%a+2ujVAN>kHR%+SBt{wCdwKCbyUVYd1y-#x}N-8h%1%b3xslcJ^uc<*Rsd kNM4G}fJ&{_JU)ZlYKJE?`TtvMe-PsAH_qmMg<m8901|Oi9smFU diff --git a/public/develop/terminology/index.html b/public/develop/terminology/index.html index 4e494863..9d0c5793 100644 --- a/public/develop/terminology/index.html +++ b/public/develop/terminology/index.html @@ -2196,7 +2196,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" 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 e9e297d1..b09ae3b6 100644 --- a/public/develop/under_construction/index.html +++ b/public/develop/under_construction/index.html @@ -2194,7 +2194,7 @@ <li class="md-nav__item"> - <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers/" class="md-nav__link"> + <a href="../architecture/CRIDGEforDevelopers/CRIDGEforDevelopers.md" class="md-nav__link"> <span class="md-ellipsis"> -- GitLab