Skip to content
index.html 19.9 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/lcm/">
        <link rel="shortcut icon" href="../img/favicon.ico">
        <title>LCM Rules - 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 active">
                                <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="./" class="dropdown-item active">LCM Rules</a>
</li>
                                    
<li>
    <a href="../architecture/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">
                                <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/architecture/" class="dropdown-item">Architecture</a>
</li>
                                    
<li>
    <a href="../architecture/messagebus/" class="dropdown-item">Message bus</a>
</li>
                                    
<li>
    <a href="../architecture/osom/" class="dropdown-item">OSOM</a>
</li>
                                    
<li>
    <a href="../architecture/oauth/" class="dropdown-item">Authentication</a>
</li>
                                    
<li>
    <a href="../architecture/tmfapi/" class="dropdown-item">TMF API</a>
</li>
                                    
<li>
    <a href="../architecture/nfvapi/" class="dropdown-item">NFV API</a>
</li>
                                    
<li>
    <a href="../architecture/tmfweb/" class="dropdown-item">TMF WEB</a>
</li>
                                    
<li>
    <a href="../architecture/nfvweb/" class="dropdown-item">NFV WEB</a>
</li>
                                    
<li>
    <a href="../architecture/issuemgt/" class="dropdown-item">Issue management</a>
</li>
                                    
<li>
    <a href="../architecture/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="../nfvcatalogs/" class="nav-link">
                                    <i class="fa fa-arrow-left"></i> Previous
                                </a>
                            </li>
                            <li class="nav-item">
                                <a rel="next" href="../architecture/consumingServicesFromExternalPartners/" 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="#lifecycle-management-lcm-rules" class="nav-link">Lifecycle Management (LCM) Rules</a>
              <ul class="nav flex-column">
            <li class="nav-item" data-level="2"><a href="#examine-if-the-rules-are-executed-successfully" class="nav-link">Examine if the rules are executed successfully</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#lcm-rules-and-osom-service-orchestration" class="nav-link">LCM Rules and OSOM Service Orchestration</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#define-rules" class="nav-link">Define rules</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#the-blocks-library" class="nav-link">The blocks library</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#examples-of-rules" class="nav-link">Examples of Rules</a>
              <ul class="nav flex-column">
              </ul>
            </li>
              </ul>
            </li>
        </ul>
    </div>
</div></div>
                    <div class="col-md-9" role="main">

<h1 id="lifecycle-management-lcm-rules">Lifecycle Management (LCM) Rules</h1>
<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><a href="../images/lcm/lcmfig1.png"><img alt="Rules in NSI" src="../images/lcm/lcmfig1.png" /></a></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>
<h2 id="examine-if-the-rules-are-executed-successfully">Examine if the rules are executed successfully</h2>
<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>
<h2 id="lcm-rules-and-osom-service-orchestration">LCM Rules and OSOM Service Orchestration</h2>
<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><a href="../images/lcm/lcmfig1_osom.png"><img alt="Rules" src="../images/lcm/lcmfig1_osom.png" /></a></p>
<h2 id="define-rules">Define rules</h2>
<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p>
<p><a href="../images/lcm/lcmfig2.png"><img alt="lcmrules" src="../images/lcm/lcmfig2.png" /></a></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>
<h3 id="definition-language">Definition language</h3>
<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><a href="../images/lcm/lcmfig3.png"><img alt="lcmrules" src="../images/lcm/lcmfig3.png" /></a></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>
<h2 id="the-blocks-library">The blocks library</h2>
<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><a href="../images/lcm/lcmfig4.png"><img alt="lcmrules" src="../images/lcm/lcmfig4.png" /></a>
<a href="../images/lcm/lcmfig5.png"><img alt="lcmrules" src="../images/lcm/lcmfig5.png" /></a>
<a href="../images/lcm/lcmfig6.png"><img alt="lcmrules" src="../images/lcm/lcmfig6.png" /></a>
<a href="../images/lcm/lcmfig7.png"><img alt="lcmrules" src="../images/lcm/lcmfig7.png" /></a>
<a href="../images/lcm/lcmfig8.png"><img alt="lcmrules" src="../images/lcm/lcmfig8.png" /></a></p>
<h2 id="examples-of-rules">Examples of Rules</h2>
<p>The following images provide some examples of rules.</p>
<h3 id="define-variables-according-to-cases">define variables according to cases</h3>
<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><a href="../images/lcm/lcmfig9.png"><img alt="lcmrules" src="../images/lcm/lcmfig9.png" /></a></p>
<h3 id="define-complex-osm-configs-for-day-0">Define complex OSM configs for DAY 0</h3>
<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><a href="../images/lcm/lcmfig10.png"><img alt="lcmrules" src="../images/lcm/lcmfig10.png" /></a></p>
<h3 id="define-and-instantiate-different-services-according-to-service-order-request">Define and instantiate different services according to Service Order request</h3>
<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><a href="../images/lcm/lcmfig11.png"><img alt="lcmrules" src="../images/lcm/lcmfig11.png" /></a></p>
<h3 id="call-an-external-restful-service">Call an external RESTful service</h3>
<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><a href="../images/lcm/lcmfig12.png"><img alt="lcmrules" src="../images/lcm/lcmfig12.png" /></a></p>
<p><a href="../images/lcm/lcmfig13.png"><img alt="lcmrules" src="../images/lcm/lcmfig13.png" /></a></p>
<h3 id="create-new-service-orders">Create New Service Orders</h3>
<p>The following example calls to Order a New Service Specification with specific Parameter Values</p>
<p><a href="../images/lcm/lcmfig14.png"><img alt="lcmrules" src="../images/lcm/lcmfig14.png" /></a></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>