Oracle® Communications IP Service Activator Configuration Development Kit Guide Release 7.2 E47724-01 |
|
|
PDF · Mobi · ePub |
This appendix provides sample scripts. These scripts follow the logic outlined in "An Example of Using the Shared Data Area".
The following script is supplied as a sample only and is not intended for deployment. Oracle Support does not provide support for this script.
When applied to the device driver using the command-line parameter -SharedDataModule, the following script defines the structure of the shared data area.
# This shared info module does not handle removing behavior objects # from lifetime shared memory. One way to deal with this issue is for # each behavior object to define an idea of identity and the shared # Module to insert behaviors in a structure that can be accessed by # identity so that specific objects can be removed. # Python "reflection" would be needed to help solve the problem in this # implementation. class SharedInfo: # In these functions get and set are methods to get data # from/insert data into the shared area functions with Add relate # to data to be treated as an add action(normally added by the # "on install" part of a data script functions, with Remove # relate to data to be treated as a remove action (normally added # by the "on remove" part of a data script def __init__(self): self.behaviors={} # Dictionary for behavior objects. self.data={"add":{},"remove":{}} # Dictionary for data.- broken into add and remove sections. self.addInterface={} # Dictionary for add data to interfaces. self.removeInterface={} # Dictionary for remove data to interfaces. self.general={} # Some simple functions to ensure that objects exist before being # accessed. def fetchDict(self, container, key): if( not container.has_key(key) ): container[key]={} return container[key] def fetch(self, container, key): if( not container.has_key(key) ): container[key]=[] return container[key] def insert(self, container, key, value ): if( not container.has_key(key) ): container[key]=[] container[key].append(value) # Insert the behavior object into the behaviors dictionary, keying # on the priority of the behavior object. def insertBehavior(self, behavior): self.insert( self.behaviors, behavior.priority(), behavior ) # Return all of the registered behavior objects def fetchBehavior(self): return self.behaviors #Insert data keyed by data type and interface name. def setInterfaceAddData(self, iface, name, data): self.insert( self.fetchDict( self.addInterface, name), iface, data) def setInterfaceRemoveData(self, iface, name, data): self.insert( self.fetchDict( self.removeInterface, name), iface, data) # Get data of type "name" for all interfaces def getInterfaceAddData(self, name): return self.fetchDict( self.addInterface, name) def getInterfaceRemoveData(self, iface, name): return self.fetchDict( self.removeInterface, name) # Get data of type "name" for this interface only. def getThisInterfaceAddData(self, iface, name): return self.fetch( self.fetchDict( self.addInterface, name), iface) def getThisInterfaceRemoveData(self, iface, name): return self.fetch( self.fetchDict( self.removeInterface, name), iface) # Data for a given key is stored as a list ( in case multiple # scripts register against the same key). "TrustMe" functions can # be used when the calling script is sure that there will # be an entry for the key, and that there is only one entry, # or the first entry is the only one it cares about. def getInterfaceAddDataTrustMe(self, iface, name): return self.fetch( self.fetchDict( self.addInterface, name), iface)[0] def getInterfaceRemoveDataTrustme(self, iface, name): return self.fetch( self.fetchDict( self.removeInterface, name), iface)[0] # Generic get and set data methods for add and remove def setAddData(self, name, data): self.insert( self.data["add"], name, data) def setRemoveData(self, name, data): self.insert( self.data["remove"], name, data) def getAddData(self, name): return self.fetch( self.data["add"], name) def getRemoveData(self, name): return self.fetch( self.data["remove"], name) def getAddDataTrustMe(self, name): return self.fetch( self.data["add"], name)[0] def getRemoveDataTrustme(self, name): return self.fetch( self.data["remove"], name)[0] # This function will be called by the driver whenever a new shared data # object is needed. It returns an object of the class type created # above. def CreateSharedObject(): return SharedInfo()
The following script is supplied as a sample only and is not intended for deployment. Oracle Support does not provide support for this script.
#Title: Sample behavior script Version = '1.0' #IP Service Activator version: 7.0.0 #Date: 19-Mar-2008 IOS level: 12.1 - 12.2.8 #(c) T.Romain 2008 #This script is a sample generic behavior script # #begin preamble section #N/A ###################################################################### #begin behavior section #script_name = "do X" #script_driver_type = "cisco" #script_type = Device #script_device_role = Access #script_interface_role = Any #script_apply_when = Before #script_repeat = False #script_apply_on_restart = True #begin common section #begin install section class DoXer: def __init__( self ): self.reportingData={"id":_id, "failureCode":_failure_code} # The priority to execute this with: the lowest number will be # executed first. def priority( self ): return 2 def Execute(self, parse): print "executing X script : priority "+ str( self.priority() ) # Retrieve data generated by pre-created data object interfaceData=_device.getThisCommitSharedData().getInterfaceAddData("XDATA") if( len(interfaceData) != 0 ): # we have some interfaces # Perform some function for iface in interfaceData.keys(): print "Requested to put X on " + iface else: print "No interfaces to do X to" # Finally insert an instance of the class into the shared area _device.getLifetimeSharedData().insertBehavior( DoXer() ) #begin remove section
The following script is supplied as a sample only and is not intended for deployment. Oracle Support does not provide support for this script.
#Title: Sample data script Version = '1.0' #IP Service Activator version: 7.0.0 #Date: 19-Apr-2008 IOS level: 12.1 - 12.2.8 #(c) T.Romain 2008 #This script is a sample generic data script # #begin preamble section #N/A #begin behavior section #script_name = "iface wants X" #script_driver_type = "cisco" #script_type = Interface #script_device_role = Access #script_interface_role = Any #script_apply_when = Before #script_repeat = False #script_apply_on_restart = True #begin common section data={ "_reporting_id":_id, "_failure_code":_failure_code, #begin install section _device.getThisCommitSharedData().setInterfaceAddData(_interface.getInterfaceName(), "XDATA", data) #begin remove section
The following script is supplied as a sample only and is not intended for deployment. Oracle Support does not provide support for this script.
#Title: Sample controller script Version = '1.0' #IP Service Activator version: 7.0.0 #Date: 19-Apr-2008 IOS level: 12.1 - 12.2.8 #(c) T.Romain 2008 #This is a sample controller script # #begin preamble section #N/A ###################################################################### #begin behavior section #script_name = "controller" #script_driver_type = "cisco" #script_type = Device #script_device_role = Access #script_interface_role = Any #script_apply_when = After #script_repeat = True #script_apply_on_restart = True #begin common section #begin install section import string import sre tempbehaviors =_device.getThisCommitSharedData().fetchBehavior() permbehaviors =_device.getLifetimeSharedData().fetchBehavior() _device.openSession() config= _device.deliverCommand("show running-config") splitConfig=string.split(config,"\n") _device.closeSession() tmp=tempbehaviors.keys() + permbehaviors.keys() tmp.sort() lastI=-1 for i in tmp : if( lastI!= i ): lastI=i if( permbehaviors.has_key(i) ): for j in permbehaviors[i]: print j result=j.Execute( splitConfig ) if( result): print "FAILED!" #_result.sendScriptObjectFailure(result[0],result[1],result[2]) if( tempbehaviors.has_key(i) ): for j in tempbehaviors[i]: print j result=j.Execute( splitConfig ) if( result): print "FAILED" #begin remove section