mirror of https://github.com/apache/cloudstack.git
59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
# Copyright 2012 Citrix Systems, Inc. Licensed under the
|
|
# Apache License, Version 2.0 (the "License"); you may not use this
|
|
# file except in compliance with the License. Citrix Systems, Inc.
|
|
# reserves all rights not expressly granted by the License.
|
|
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# Automatically generated by addcopyright.py at 04/03/2012
|
|
import types
|
|
from OvmCommonModule import *
|
|
from xmlrpclib import Fault
|
|
from OVSCommons import *
|
|
import OvmFaultConstants
|
|
|
|
import OvmHostModule
|
|
import OvmStoragePoolModule
|
|
import OvmVmModule
|
|
import OvmNetworkModule
|
|
import OvmVolumeModule
|
|
import OvmSecurityGroupModule
|
|
from OvmHaHeartBeatModule import OvmHaHeartBeat
|
|
|
|
ExposedClass = {}
|
|
logger = OvmLogger('OvmDispatcher')
|
|
def InitOvmDispacther():
|
|
global ExposedClass
|
|
modules = [ eval(attr) for attr in globals() if isinstance(eval(attr), types.ModuleType) ]
|
|
for m in modules:
|
|
for name in dir(m):
|
|
clz = getattr(m, name)
|
|
if type(clz) is types.TypeType and issubclass(clz, OvmObject):
|
|
ExposedClass[name] = clz
|
|
logger.debug(InitOvmDispacther, "Discovered exposed class:\n\n%s"%"\n".join(ExposedClass))
|
|
|
|
@exposed
|
|
def OvmDispatch(methodName, *params):
|
|
global ExposedClass
|
|
p = methodName.split('.')
|
|
if len(p) != 2:
|
|
logger.error(OvmDispatch, "%s is not a vaild format, should be classname.methodname"%p)
|
|
raise Fault(dispatchErrCode('InvalidCallMethodFormat'), "%s is not a vaild format, should be classname.methodname"%p)
|
|
clzName = p[0]
|
|
funcName = p[1]
|
|
if clzName not in ExposedClass.keys():
|
|
logger.error(OvmDispatch, "class %s is not exposed by agent"%clzName)
|
|
raise Fault(dispatchErrCode('InvaildClass'), "class %s is not exposed by agent"%clzName)
|
|
clz = ExposedClass[clzName]
|
|
if not hasattr(clz, funcName):
|
|
logger.error(OvmDispatch, "class %s has no function %s"%(clzName, funcName))
|
|
raise Fault(dispatchErrCode('InvaildFunction'), "class %s has no function %s"%(clzName, funcName))
|
|
logger.debug(OvmDispatch, "Entering %s.%s ===>"%(clzName, funcName))
|
|
rs = getattr(clz, funcName)(*params)
|
|
logger.debug(OvmDispatch, "Exited %s.%s <==="%(clzName, funcName))
|
|
return rs
|