Skip to content
index.html 20.2 KiB
Newer Older
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        
        <meta name="author" content="Openslice.io">
        <link rel="canonical" href="http://openslice.io/develop/architecture/osom/">
        <link rel="shortcut icon" href="../../img/favicon.ico">
        <title>OSOM - Openslice</title>
        <link href="../../css/bootstrap.min.css" rel="stylesheet">
        <link href="../../css/font-awesome.min.css" rel="stylesheet">
        <link href="../../css/base.css" rel="stylesheet">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css">
        <link href="../../css/version-select.css" rel="stylesheet">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
        <script>hljs.highlightAll();</script> 
    </head>

    <body>
        <div class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary">
            <div class="container">
                <a class="navbar-brand" href="../..">Openslice</a>
                <!-- Expander button -->
                <button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#navbar-collapse">
                    <span class="navbar-toggler-icon"></span>
                </button>

                <!-- Expanded navigation -->
                <div id="navbar-collapse" class="navbar-collapse collapse">
                        <!-- Main navigation -->
                        <ul class="nav navbar-nav">
                            <li class="dropdown">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">Overview <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../.." class="dropdown-item">Introduction</a>
</li>
                                </ul>
                            </li>
                            <li class="dropdown">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">Getting Started <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../../deployment/" class="dropdown-item">Deployment/Installation</a>
</li>
                                    
<li>
    <a href="../../nfvoconfig/" class="dropdown-item">NFV Orchestrator Configuration</a>
</li>
                                    
<li>
    <a href="../../catalogs/" class="dropdown-item">Service Catalogs</a>
</li>
                                    
<li>
    <a href="../../nfvcatalogs/" class="dropdown-item">NFV Catalogs</a>
</li>
                                    
<li>
    <a href="../../lcm/" class="dropdown-item">LCM Rules</a>
</li>
                                    
<li>
    <a href="../consumingServicesFromExternalPartners/" class="dropdown-item">Consuming Services From External OSS</a>
</li>
                                    
<li>
    <a href="../../service_inventory/" class="dropdown-item">Service Inventory</a>
</li>
                                    
<li>
    <a href="../../alarms_actions/" class="dropdown-item">Alarms and Actions</a>
</li>
                                </ul>
                            </li>
                            <li class="dropdown active">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">Design & Architecture <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../architecture/" class="dropdown-item">Architecture</a>
</li>
                                    
<li>
    <a href="../messagebus/" class="dropdown-item">Message bus</a>
</li>
                                    
<li>
    <a href="./" class="dropdown-item active">OSOM</a>
</li>
                                    
<li>
    <a href="../oauth/" class="dropdown-item">Authentication</a>
</li>
                                    
<li>
    <a href="../tmfapi/" class="dropdown-item">TMF API</a>
</li>
                                    
<li>
    <a href="../nfvapi/" class="dropdown-item">NFV API</a>
</li>
                                    
<li>
    <a href="../tmfweb/" class="dropdown-item">TMF WEB</a>
</li>
                                    
<li>
    <a href="../nfvweb/" class="dropdown-item">NFV WEB</a>
</li>
                                    
<li>
    <a href="../issuemgt/" class="dropdown-item">Issue management</a>
</li>
                                    
<li>
    <a href="../centrallog/" class="dropdown-item">Central logging</a>
</li>
                                </ul>
                            </li>
                            <li class="dropdown">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">Contributing <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../../contributing/developing/" class="dropdown-item">Developing</a>
</li>
                                </ul>
                            </li>
                        </ul>

                    <ul class="nav navbar-nav ml-auto">
                        <li class="nav-item">
                            <a href="#" class="nav-link" data-toggle="modal" data-target="#mkdocs_search_modal">
                                <i class="fa fa-search"></i> Search
                            </a>
                        </li>
                            <li class="nav-item">
                                <a rel="prev" href="../messagebus/" class="nav-link">
                                    <i class="fa fa-arrow-left"></i> Previous
                                </a>
                            </li>
                            <li class="nav-item">
                                <a rel="next" href="../oauth/" class="nav-link">
                                    Next <i class="fa fa-arrow-right"></i>
                                </a>
                            </li>
                            <li class="nav-item">
                                <a href="https://github.com/openslice" class="nav-link">openslice</a>
                            </li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="container">
            <div class="row">
                    <div class="col-md-3"><div class="navbar-light navbar-expand-md bs-sidebar hidden-print affix" role="complementary">
    <div class="navbar-header">
        <button type="button" class="navbar-toggler collapsed" data-toggle="collapse" data-target="#toc-collapse" title="Table of Contents">
            <span class="fa fa-angle-down"></span>
        </button>
    </div>

    
    <div id="toc-collapse" class="navbar-collapse collapse card bg-secondary">
        <ul class="nav flex-column">
            
            <li class="nav-item" data-level="1"><a href="#openslice-service-orchestration-and-order-management-osom" class="nav-link">Openslice Service Orchestration and Order Management - OSOM</a>
              <ul class="nav flex-column">
            <li class="nav-item" data-level="2"><a href="#initial-state" class="nav-link">Initial state</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#order-scheduler" class="nav-link">Order scheduler</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#start-order-process" class="nav-link">Start order process</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#nfvodeploymentrequest-process" class="nav-link">NFVODeploymentRequest process</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#check-in-progress-orders-process" class="nav-link">Check In Progress orders process</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#external-service-provider-deployment-request-process" class="nav-link">External Service Provider Deployment Request process</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#fetch-partner-services-process" class="nav-link">Fetch Partner Services Process</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#local-service-orchestration-process" class="nav-link">Local Service Orchestration Process</a>
              <ul class="nav flex-column">
              </ul>
            </li>
              </ul>
            </li>
        </ul>
    </div>
</div></div>
                    <div class="col-md-9" role="main">

<h1 id="openslice-service-orchestration-and-order-management-osom">Openslice Service Orchestration and Order Management - OSOM</h1>
<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><a href="../../images/service_order_states.png"><img alt="Service Order state" src="../../images/service_order_states.png" /></a></p>
<h2 id="initial-state">Initial state</h2>
<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><a href="../../images/service_order_initial_state.png"><img alt="Initial state" src="../../images/service_order_initial_state.png" /></a></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>
<h2 id="order-scheduler">Order scheduler</h2>
<p>A process checks every 1 minute for ACKNOWLEDGED orders.</p>
<p><a href="../../images/order_scheduler_bpm.png"><img alt="Order scheduler BPM" src="../../images/order_scheduler_bpm.png" /></a></p>
<p><a href="../../images/order_scheduler_diagram.png"><img alt="Order scheduler" src="../../images/order_scheduler_diagram.png" /></a></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>
<h2 id="start-order-process">Start order process</h2>
<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><a href="../../images/start_order_process_bpm.png"><img alt="Start Order BPM" src="../../images/start_order_process_bpm.png" /></a></p>
<p><a href="../../images/start_order_process_diagram.png"><img alt="Start Order interactions" src="../../images/start_order_process_diagram.png" /></a></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><a href="../../images/service_states.png"><img alt="Service state" src="../../images/service_states.png" /></a></p>
<h2 id="nfvodeploymentrequest-process">NFVODeploymentRequest process</h2>
<p><a href="../../images/NFVODeploymentReq_process.png"><img alt="NFVODeploymentRequest BPM" src="../../images/NFVODeploymentReq_process.png" /></a></p>
<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>
<h2 id="check-in-progress-orders-process">Check In Progress orders process</h2>
<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><a href="../../images/check_inProgress_orders.png"><img alt="Check In Progress BPM" src="../../images/check_inProgress_orders.png" /></a></p>
<h2 id="external-service-provider-deployment-request-process">External Service Provider Deployment Request process</h2>
<p><a href="../../images/externalSPDeploymentReq.png"><img alt="External Service Provider Deployment Request process BPM" src="../../images/externalSPDeploymentReq.png" /></a></p>
<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>
<h2 id="fetch-partner-services-process">Fetch Partner Services Process</h2>
<p><a href="../../images/fetchPartnerServices.png"><img alt="Fetch Partner Services Process BPM" src="../../images/fetchPartnerServices.png" /></a></p>
<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>
<h2 id="local-service-orchestration-process">Local Service Orchestration Process</h2>
<p><a href="../../images/LocalServiceOrchestrationProcess.png"><img alt="Local Service Orchestration Process BPM" src="../../images/LocalServiceOrchestrationProcess.png" /></a></p>
<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></div>
            </div>
        </div>

        <footer class="col-md-12">
            <hr>
                <p>Copyright &copy; 2019-2023 Openslice Project</p>
            <p>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</p>
        </footer>
        <script src="../../js/jquery-3.6.0.min.js"></script>
        <script src="../../js/bootstrap.min.js"></script>
        <script>
            var base_url = "../..",
                shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83};
        </script>
        <script src="../../js/base.js"></script>
        <script src="../../js/version-select.js"></script>

        <div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="searchModalLabel">Search</h4>
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            </div>
            <div class="modal-body">
                <p>From here you can search these documents. Enter your search terms below.</p>
                <form>
                    <div class="form-group">
                        <input type="search" class="form-control" placeholder="Search..." id="mkdocs-search-query" title="Type search term here">
                    </div>
                </form>
                <div id="mkdocs-search-results" data-no-results-text="No results found"></div>
            </div>
            <div class="modal-footer">
            </div>
        </div>
    </div>
</div><div class="modal" id="mkdocs_keyboard_modal" tabindex="-1" role="dialog" aria-labelledby="keyboardModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="keyboardModalLabel">Keyboard Shortcuts</h4>
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            </div>
            <div class="modal-body">
              <table class="table">
                <thead>
                  <tr>
                    <th style="width: 20%;">Keys</th>
                    <th>Action</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td class="help shortcut"><kbd>?</kbd></td>
                    <td>Open this help</td>
                  </tr>
                  <tr>
                    <td class="next shortcut"><kbd>n</kbd></td>
                    <td>Next page</td>
                  </tr>
                  <tr>
                    <td class="prev shortcut"><kbd>p</kbd></td>
                    <td>Previous page</td>
                  </tr>
                  <tr>
                    <td class="search shortcut"><kbd>s</kbd></td>
                    <td>Search</td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div class="modal-footer">
            </div>
        </div>
    </div>
</div>

    </body>
</html>