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".
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:
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.
Create a local directory (NSO_CartridgePack_Home).
Locate the OracleComms_NSO_CartridgePacks.zip file and extract the file into the NSO_CartridgePack_Home local directory.
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
In Design Studio, open a new workspace.
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
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
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.
You can extend the core functionality of NFV Orchestration by:
Writing a custom ruleset extension point. See "Writing a Custom Ruleset Extension Point".
Using Java interface extensions. See "Using Java Interface Extensions".
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. |
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:
Implementation of a custom SDN controller. See "Implementing a Custom SDN Controller".
Implementation of a custom VNF monitoring engine. See "Implementing a Custom Monitoring Engine".
Implementation of a custom VIM. See "Implementing a Custom VIM".
Implementation of a custom VNF life cycle manager. See "Implementing a Custom VNF Life Cycle Manager".
Implementation of an adapter for a custom VNF manager. See "Implementing an Adapter for a Custom VNF Manager".
Implementation of a custom VNF connection manager. See "Implementing a Custom VNF Connection Manager".
Implementation of a custom VNF configuration manager. See "Implementing a Custom VNF Configuration Manager".
Implementation of a custom response manager. See "Implementing a Custom Response Manager".
Implementation of a custom notification manager. See "Implementing a Custom Notification Manager".
Note:
Implementing some custom managers requires changes to the nso.properties file. Make a backup copy of the file before modifying it.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:
In the custom Network Service descriptor cartridge project, create a Java implementation class for the SDN controller.
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.
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
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
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.
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.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.
To implement a custom monitoring engine:
In the custom VNF descriptor cartridge project, create a Java implementation class for the VNF monitoring manager.
Configure the VNFMonitoringManager class to implement the oracle.communications.inventory.nso.nfvi.VNFMonitoringManager interface, which is available in UIM_SDK/lib/nso-managers.jar.
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
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
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.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.
To implement a custom VIM:
In your custom cartridge project, create a Java implementation class for the NFVIManager interface.
Configure the NFVIManager class to implement the oracle.communications.inventory.nso.nfvi.NFVIManager interface, which is available in UIM_SDK/lib/nso-managers.jar.
Override the methods in the custom NFVI manager Java implementation class.
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
Build and redeploy the cartridge.
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.
To implement a custom VNF life cycle manager:
In your custom cartridge project, create a Java implementation class for the VNF life cycle manager.
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.
Override the methods in the custom VNF life cycle manager Java implementation class.
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
Build and redeploy the cartridge.
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.
To implement an adapter for custom VNF manager:
In your custom cartridge project, create a Java implementation class for the custom adapter.
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.
Override the methods in the custom adapter Java implementation class:
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
Build and redeploy the cartridge.
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.
To implement a custom VNF connection manager:
In the custom VNF descriptor cartridge project, create a Java implementation class for the custom VNF connection manager.
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.
Override the methods in the custom VNF connection manager Java implementation class.
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
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.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.
To implement a custom VNF configuration manager:
In the custom VNF descriptor cartridge project, create a Java implementation class for the custom VNF configuration manager.
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.
Override the methods in the custom VNF configuration manager Java implementation class.
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
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.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:
In your custom cartridge project, create a Java implementation class for the custom response manager.
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.
Override the following method in the custom response manager Java implementation class:
public void processRequest(NSResponseInfo response) throws ValidationException
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.
Build and redeploy the cartridge.
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:
Build the Notification object by using the NotificationBuilder inner class:
Notification notice = new Notification.NotificationBuilder().id(ID).messageKey("<Message Key>", args).build();
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:
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.
Override the following method in the custom notification manager Java implementation class:
public void processNotification(Notification notification)
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.
Build and redeploy the cartridge.
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:
Localize the UIM user interface and UIM Help. For instructions, see the chapter about localizing UIM in UIM Developer's Guide.
Localize the responses that the RESTful APIs return. See "Localizing the Responses in RESTful APIs" for instructions.
To localize the responses in the NFV Orchestration RESTful APIs:
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.
Open the nsoresourcebundle_localeID.properties file and localize the messages.
(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.
Restart the UIM server.
In your RESTful API client, update the Accept-Language header with the locale ID. For example, for French, specify fr-FR.