6 Extending UIM NFV Orchestration

This chapter describes how you can customize and extend Oracle Communications Unified Inventory Management (UIM) NFV Orchestration to meet the business needs of your organization.

You can extend the NFV Orchestration functionality by:

  • Designing cartridges in Oracle Communications Design Studio. See "Designing Custom Network Services".

    For more information about designing cartridges:

    • See UIM Cartridge Guide for information about the leading practices for extending cartridge packs.

    • See the section on ”About Cartridges and Cartridge Packs” in the chapter, ”Using Design Studio to Extend UIM” in UIM Developer's Guide for information about how to extend cartridge packs.

    • See the Design Studio Help for instructions on how to extend cartridge packs through specifications, characteristics, and rulesets.

    Important:

    To ensure that your extensions can be upgraded and supported, you must follow the guidelines and policies described in UIM Cartridge Guide.
  • Using extension points and Java interface extensions. See "Using Extension Points and Java Interface Extensions to Extend the NFV Orchestration Functionality".

Setting Up Design Studio for Extending NFV Orchestration

To extend NFV Orchestration, you build an Inventory cartridge in Design Studio. The UIM Software Developer's Kit (UIM SDK) provides the resources required to build an Inventory cartridge in Design Studio.

To set up Design Studio for extending NFV Orchestration:

  1. Follow the steps described in the section on ”Building an Inventory Cartridge Using the UIM SDK” in the chapter, ”Using Design Studio to Extend UIM” in the UIM Developer's Guide.

  2. Create a local directory (NSO_CartridgePack_Home).

  3. Locate the OracleComms_NSO_CartridgePacks.zip file and extract the file into the NSO_CartridgePack_Home local directory.

  4. Copy the following WebLogic libraries from your WebLogic installation into the OTHER_LIB local directory:

    • WL_Home/oracle_common/modules/groovy-all-2.4.6.jar

    • WL_Home/oracle_common/modules/com.sun.jersey.jersey-core.jar

    • WL_Home/oracle_common/modules/com.sun.jersey.jersey-client.jar

  5. In Design Studio, open a new workspace.

  6. Import the following UIM base cartridges into Design Studio from UIM_SDK_Home/cartridges:

    • ora_uim_baseextpts

    • ora_uim_basemeasurements

    • ora_uim_basespecifications

    • ora_uim_basetechnologies

    • ora_uim_common

    • ora_uim_mds

    • ora_uim_model

    • OracleComms_NSO_BaseCartridge

  7. Import the following NFV Orchestration sample cartridges into Design Studio from NSO_CartridgePack_Home/designStudio/cartridgeZips:

    • Juniper_vSRX

    • Checkpoint_NG_FW

    • Cisco_xRV

    • ResidentialGateway_NetworkService

    • NPaaS_NetworkService

  8. In Design Studio, configure the following Java build path classpath variables for the NFV Orchestration cartridge projects:

    • UIM_LIB. Specify the path as UIM_SDK_Home/lib

    • OTHER_LIB. Specify the path as OTHER_LIB_Home

See "Designing Custom Network Services" for information about creating cartridges for new network services.

Using Extension Points and Java Interface Extensions to Extend the NFV Orchestration Functionality

You can extend the core functionality of NFV Orchestration by:

Writing a Custom Ruleset Extension Point

You can extend the NFV Orchestration core functionality by writing a custom ruleset extension point and associating the extension point with the ruleset in Design Studio. See the chapter on ”Extending UIM Through Rulesets” in UIM Developer's Guide for more information.

Table 6-1 describes the NFV Orchestration core APIs that can be extended by using extension points in NFV Orchestration.

Table 6-1 NFV Orchestration Core APIs and Extension Points

API Extension Point Description

NetworkServiceDesignManager.processCreate

NetworkServiceDesignManager_processCreate

Implements the design-and-assign logic for a network service when the network service is instantiated.

NetworkServiceDesignManager.processDisconnect

NetworkServiceDesignManager_processDisconnect

Cleans up the network service resources when the network service is terminated.

NetworkServiceDesignManager.processChange

NetworkServiceDesignManager_processChange

Implements the design-and-assign logic or cleans up the resources when a network service is updated.

VNFServiceDesignManager.processCreate

VNFServiceDesignManager_processCreate

Implements the design-and-assign logic for the VNF service when a network service is instantiated with a VNF.

VNFServiceDesignManager.processDisconnect

VNFServiceDesignManager_processDisconnect

Cleans up the VNF service resources when a network service is terminated.

VNFServiceDesignManager.processChange

VNFServiceDesignManager_processChange

Implements the design-and-assign logic for a VNF service when the network service is updated.

VNFServiceManager.processTechnicalActions

VNFServiceManager_processTechnicalActions

Activates or removes the resources in a VIM for each VNF service.

NetworkServiceManager.processTechnicalActions

NetworkServiceManager_processTechnicalActions

Activates or removes the resources in a VIM for each network service.

ConsumerHelper.getDataCenterForConsumer

ConsumerHelper_getDataCenterForConsumer

Looks up the data center based on the NS endpoint.

VNFServiceHelper.createVNF

VNFServiceHelper_createVNF

Creates a VNF.

ConsumerHelper.getDataCenterLookupIdentifier

ConsumerHelper_getDataCenterLookupIdentifier

Returns the string representation of the dynamic property in the JSON request for NS instantiation.

NetworkServiceManager.designInstantiate

NetworkServiceManager_designInstantiate_Global

Used to design the network service for instantiation.

NetworkServiceManager.designUpdate

NetworkServiceManager_designUpdate_Global

Used to design the network service for update.


Using Java Interface Extensions

You can extend the NFV Orchestration core functionality by using Java interface extensions. You write a new Java implementation class for a core interface and implement the core interface for a specific network service or VNF descriptor. See UIM API Overview for more information about the NFV Orchestration Java manager classes and package locations.

NFV Orchestration supports the following functionality through custom Java implementation classes:

Note:

Implementing some custom managers requires changes to the nso.properties file. Make a backup copy of the file before modifying it.

Implementing a Custom SDN Controller

By default, NFV Orchestration supports OpenStack Neutron Networking-SFC (Service Function Chaining) for service chaining, but you can also implement a custom SDN controller.

You can implement a custom SDN controller in one of the following ways:

  • Using a custom SDN driver in Openstack Networking-SFC. NFV Orchestration supports VNF forwarding graph (VNFFG) implementation using Openstack Networking-SFC. OpenStack Neutron Networking-SFC can interface with different SDN drivers in the southbound integration. To use a different SDN Controller, you must configure the required driver in OpenStack Neutron. Refer to the OpenStack documentation for more information.

  • Creating a Java implementation class for the SDN Controller interface. See "Implementing a Custom SDN Controller by Creating a Java Implementation Class" for more information.

Implementing a Custom SDN Controller by Creating a Java Implementation Class

To implement a custom SDN controller by creating a Java implementation class:

  1. In the custom Network Service descriptor cartridge project, create a Java implementation class for the SDN controller.

  2. Configure the custom SDN controller class to implement the oracle.communications.inventory.nso.nfvi.SDNController interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the following methods in the custom SDN controller Java implementation class:

    public String createClassifier(Map request) throws Exception
    public String deleteClassifier(Map request) throws Exception
    public String createNFP(Map request) throws Exception
    public String deleteNFP(Map request) throws Exception
    public String updateNFP(Map request) throws Exception
    public String customCall(Map request) throws Exception
    public void notifyEMS(Map request, Map vnfDetailsMap, Service networkService,NFVIVimInfo vimInfo) throws Exception
    public void sendNotification(Map<String, Object> devicesRequest, String nsd, String emsUrl, boolean isEMSEnabled)
    public NFVISFCPortChainInfo getNFP(Map nfpDetails) throws ValidationException, Exception
    
  4. In your Network Service descriptor cartridge project, create or update the network service properties file and add the following entry:

    sdnController.NSD_Name=SDNController_ImplementationClassPath
    

    where:

    • NSD_Name is the name of the network service descriptor

    • SDNController_ImplementationClassPath is the path of the implementation class of your custom SDN controller

  5. Build and redeploy the cartridge.

Figure 6-1 shows a model diagram that depicts the relationship between the Java Manager interface for the SDN Controller and your new custom Java implementation class.

Figure 6-1 Custom SDN Controller Model

Surrounding text describes Figure 6-1 .

Note:

If the sdnController.NSD_Name entry is commented out or if the path of the implementation class is not specified, NFV Orchestration does not perform the network flow operations such as creation of flows, deletion of flows, and update of flows for the network service.

Implementing a Custom Monitoring Engine

By default, NFV Orchestration supports integration with OpenStack Ceilometer, but you can also implement and use a custom monitoring engine.

Figure 6-2 shows a model diagram that depicts the relationship between the Java Manager interface for the Monitoring Manager and your new custom Java implementation class.

Figure 6-2 Custom Monitoring Engine Model

Surrounding text describes Figure 6-2 .

To implement a custom monitoring engine:

  1. In the custom VNF descriptor cartridge project, create a Java implementation class for the VNF monitoring manager.

  2. Configure the VNFMonitoringManager class to implement the oracle.communications.inventory.nso.nfvi.VNFMonitoringManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the following methods in the custom VNF monitoring engine Java implementation class:

    public String createAlarms(Map request) throws Exception
    public String deleteAlarms(Map request) throws Exception
    public String updateAlarms(Map request) throws Exception
    public String getAlarms(Map request) throws Exception
    public String customCall(Map request) throws Exception
    
  4. In the VNF descriptor cartridge project, create or update the VNF properties file and add the following entry:

    vnfMonitor.VNFD_Name=MonitoringEngine_ImplementationClassPath

    where:

    • VNFD_Name is the name of the VNF descriptor

    • MonitoringEngine_ImplementationClassPath is the path of the implementation class of your monitoring engine

  5. Build and redeploy the cartridge.

Note:

If the vnfMonitor.VNFD_Name entry is commented out or if the path of the implementation class is not specified, NFV Orchestration does not perform monitoring operations such as creation, deletion, and update of alarms for the network service.

Implementing a Custom VIM

By default, NFV Orchestration supports integration with OpenStack, but you can also implement a custom VIM.

Figure 6-3 shows a model diagram that depicts the relationship between the Java Manager interface for the VIM and your new custom Java implementation class.

Figure 6-3 Custom VIM Model

Surrounding text describes Figure 6-3 .

To implement a custom VIM:

  1. In your custom cartridge project, create a Java implementation class for the NFVIManager interface.

  2. Configure the NFVIManager class to implement the oracle.communications.inventory.nso.nfvi.NFVIManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the methods in the custom NFVI manager Java implementation class.

  4. Open the UIM_Home/config/nso.properties file, and add or update the following entry:

    nfviMgr.nfviType=VIM_ImplementationClassPath

    where:

    • nfviType is the type of VIM. For example, OpenStack.

    • VIM_ImplementationClassPath is the path of the implementation class of your VIM

  5. Build and redeploy the cartridge.

Implementing a Custom VNF Life Cycle Manager

By default, NFV Orchestration manages VNF life cycle operations (such as instantiate, reboot, and terminate) by using OpenStack Compute services (referred to as Nova), but you can also implement and use a custom VNF life cycle manager with NFV Orchestration.

Figure 6-4 shows a model diagram that depicts the relationship between the Java Manager interface for the Life Cycle Manager and your new custom Java implementation class.

Figure 6-4 Custom VNF Life Cycle Manager Model

Surrounding text describes Figure 6-4 .

To implement a custom VNF life cycle manager:

  1. In your custom cartridge project, create a Java implementation class for the VNF life cycle manager.

  2. Configure the custom VNF life cycle manager class to implement the oracle.communications.inventory.nso.nfvi.VNFLifeCycleManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the methods in the custom VNF life cycle manager Java implementation class.

  4. Open the UIM_Home/config/nso.properties file, and add or update the following entry:

    vnflcMgr.vimType=VNFLifecycleManager_ImplementationClassPath

    where:

    • vimType is the type of VIM

    • VNFLifecycleManager_ImplementationClassPath is the path of the implementation class of your custom VNF life cycle manager

  5. Build and redeploy the cartridge.

Implementing an Adapter for a Custom VNF Manager

By default, NFV Orchestration contains and uses the built-in adapter for the built-in VNF manager to manage the VNFs in your network services, but you can also implement an adapter to integrate with third-party VNF managers.

Figure 6-5 shows a model diagram that depicts the relationship between the Java Manager interface for the VNF Manager and your new custom Java implementation class.

Figure 6-5 Custom Adapter for VNF Manager Model

Surrounding text describes Figure 6-5 .

To implement an adapter for custom VNF manager:

  1. In your custom cartridge project, create a Java implementation class for the custom adapter.

  2. Configure the custom adapter class to implement the oracle.communications.inventory.nso.api.sb.SBSystemManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the methods in the custom adapter Java implementation class:

  4. Open the UIM_Home/config/nso.properties file, and add or update the following entry:

    sbClient.name=vnf_manager_adapter_ImplementationClassPath

    where:

    • name is the name of the VNF descriptor

    • vnf_manager adapter_ImplementationClassPath is the path of the implementation class of your custom

  5. Build and redeploy the cartridge.

Implementing a Custom VNF Connection Manager

NFV Orchestration includes a VNF connection manager that enables NFV Orchestration to establish a communication channel with VNFs for deploying configurations during VNF life cycle operations. You can also implement a custom VNF connection manager for NFV Orchestration by writing an extension.

Figure 6-6 shows a model diagram that depicts the relationship between the Java Manager interface for the VNF Connection Manager and your new custom Java implementation class.

Figure 6-6 Custom VNF Connection Manager Model

Surrounding text describes Figure 6-6 .

To implement a custom VNF connection manager:

  1. In the custom VNF descriptor cartridge project, create a Java implementation class for the custom VNF connection manager.

  2. Configure the custom VNF connection manager class to implement the oracle.communications.inventory.nso.nfvi.VNFConnectionManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the methods in the custom VNF connection manager Java implementation class.

  4. In the VNF descriptor cartridge project, create or update the VNF properties file and add the following entry:

    vnfConnectionMgr.VNFD_Name=VNFConnectionManager_ImplementationClassPath

    where:

    • VNFD_Name is the name of the VNF descriptor

    • VNFConnectionManager_ImplementationClassPath is the path of the implementation class of your custom VNF connection manager

  5. Build and redeploy the cartridge.

Note:

If the vnfConnectionMgr.VNFD_Name key is commented out or if the path of the implementation class is not specified, NFV Orchestration does not run configurations on the virtual machines on which the VNFs are deployed.

Implementing a Custom VNF Configuration Manager

NFV Orchestration includes a VNF configuration manager that generates configuration content for VNF configuration. You can also implement a custom VNF configuration manager for NFV Orchestration by writing an extension.

Figure 6-7 shows a model diagram that depicts the relationship between the Java Manager interface for the VNF Configuration Manager and your new custom Java implementation class.

Figure 6-7 Custom VNF Configuration Manager Model

Surrounding text describes Figure 6-7 .

To implement a custom VNF configuration manager:

  1. In the custom VNF descriptor cartridge project, create a Java implementation class for the custom VNF configuration manager.

  2. Configure the custom VNF configuration manager class to implement the oracle.communications.inventory.nso.nfvi.VNFConfigManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the methods in the custom VNF configuration manager Java implementation class.

  4. In the VNF descriptor cartridge project, create or update the VNF properties file and add the following entry:

    vnfConfigMgr.VNFD_Name=VNFConfigurationManager_ImplementationClassPath

    where:

    • VNFD_Name is the name of the VNF descriptor

    • VNFConfigurationManager_ImplementationClassPath is the path of the implementation class of your custom VNF configuration manager

  5. Build and redeploy the cartridge.

Note:

If the vnfConfigMgr.VNFD_Name entry is commented out or if the path of the implementation class is not specified, NFV Orchestration does not generate configurations for the VNF.

Implementing a Custom Response Manager

By default, NFV Orchestration includes a response manager that publishes the status of the VNF and network service life-cycle actions to a topic in the WebLogic server. You can also implement a custom response manager by writing an extension.

To implement a custom response manager:

  1. In your custom cartridge project, create a Java implementation class for the custom response manager.

  2. Configure the custom response manager class to implement the oracle.communications.inventory.nso.nfvi.NSOResponseManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  3. Override the following method in the custom response manager Java implementation class:

    public void processRequest(NSResponseInfo response)   throws ValidationException
    
  4. Open the UIM_Home/config/nso.properties file, and add or update the following entry:

    nso.ResponseManager.list.1=ResponseManager_ImplementationClassPath

    where ResponseManager_ImplementationClassPath is the path of the implementation class of your custom response manager.

    NFV Orchestration supports multiple implementations of response manager.

  5. Build and redeploy the cartridge.

Implementing a Custom Notification Manager

By default, NFV Orchestration includes a notification manager that publishes the status of the various intermediate processes that are run during the life-cycle actions for a VNF or a network service. You can also implement a custom notification manager in any custom implementations of NFV Orchestration managers, such as VNF Life Cycle Manager, VNF Manager, and so on.

Implementing a custom notification manager involves sending and receiving notifications for the processes that are run during the life-cycle actions.

Implementing a Custom Notification Manager for Sending Notifications

To implement a custom notification manager for sending notifications:

  1. Build the Notification object by using the NotificationBuilder inner class:

    Notification notice = new Notification.NotificationBuilder().id(ID).messageKey("<Message Key>", args).build();
    
  2. Call the sendNotification() method in the oracle.communications.inventory.nso.helper.NSOResponseHelper class:

    NSOResponseHelper.sendNotification(notice);
    

    The sendNotification() method accepts an object of type Notification and broadcasts it to all the classes that implement the oracle.communications.inventory.nso.api.ns.NSONotificationManager interface.

Implementing a Custom Notification Manager for Receiving Notifications

To implement a custom response manager for receiving notifications:

  1. In your custom cartridge project, create a Java implementation class for the custom notification manager by implementing the oracle.communications.inventory.nso.api.ns.NSONotificationManager interface, which is available in UIM_SDK/lib/nso-managers.jar.

  2. Override the following method in the custom notification manager Java implementation class:

    public void processNotification(Notification notification)
    
  3. Open the UIM_Home/config/nso.properties file, and add or update the following entry:

    nso.NotificationAgent.list.1=NotificationManager_ImplementationClassPath

    where NotificationManager_ImplementationClassPath is the path of the implementation class of your custom notification manager.

    NFV Orchestration supports multiple implementations of notification manager.

  4. Build and redeploy the cartridge.

Localizing UIM NFV Orchestration

You can localize the UIM user interface, UIM Help, and the responses that the REST APIs return into your local language.

To localize NFV Orchestration:

  1. Localize the UIM user interface and UIM Help. For instructions, see the chapter about localizing UIM in UIM Developer's Guide.

  2. Localize the responses that the RESTful APIs return. See "Localizing the Responses in RESTful APIs" for instructions.

Localizing the Responses in RESTful APIs

To localize the responses in the NFV Orchestration RESTful APIs:

  1. Make a copy of the UIM_Home/config/resources/logging/nsoresourcebundle.properties file in the same directory and rename it as nsoresourcebundle_localeID.properties, where localeID is the locale ID of your local language. For example, rename it to nsoresourcebundle_fr_FR.properties to localize the responses into French.

  2. Open the nsoresourcebundle_localeID.properties file and localize the messages.

  3. (Optional) If you want to implement the sample Network Protection service by using the sample cartridges, make a copy of the UIM_Home/config/resources/logging/npassresourcebundle.properties file in the same directory and name it as npaasresourcebundle_localeID.properties and localize the messages.

  4. Restart the UIM server.

  5. In your RESTful API client, update the Accept-Language header with the locale ID. For example, for French, specify fr-FR.