X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=aspects%2Fomfaspects.py;h=6e5ba82a7caf6b4ff34907dee9121735491cc940;hb=b2b1bed64f7427ec6a84fbb28250cba8f922c462;hp=250390b362b843ddafc385e99959d33a58c65a66;hpb=1c10d2b89c1a733a943b1ba9a05f5031417aff5f;p=plcapi.git diff --git a/aspects/omfaspects.py b/aspects/omfaspects.py index 250390b..6e5ba82 100644 --- a/aspects/omfaspects.py +++ b/aspects/omfaspects.py @@ -6,11 +6,30 @@ import xmlrpclib from PLC.Slices import Slices from PLC.SliceTags import SliceTags, SliceTag from PLC.TagTypes import TagTypes -from PLC.Nodes import Nodes +from PLC.NodeTags import NodeTags from PLC.Config import Config from pyaspects.meta import MetaAspect +def ignore_exception(ExceptionType=None): + '''A decorator to ignore the given exception type. Use as + @ignore_exception() to ignore all exceptions.''' + def deco_ignore(f): + def f_ignore(*args, **kwargs): + if not ExceptionType: + try: + return f(*args, **kwargs) + except: + return None + else: + try: + return f(*args, **kwargs) + except ExceptionType, e: + return None + return f_ignore + return deco_ignore + + class BaseOMF(object): def __init__(self): @@ -22,6 +41,7 @@ class BaseOMF(object): self.log = None + @ignore_exception() def logit(self, call, args, kwargs, data, slice): if not self.log: return @@ -30,7 +50,7 @@ class BaseOMF(object): self.log.write("%s\n\n" % slice) self.log.flush() - + @ignore_exception() def get_slice(self, api, id_or_name): slice_filter = {} try: # if integer @@ -53,23 +73,26 @@ class BaseOMF(object): # return slice # return None - def get_node_hostname(self, api, node_id_or_hostname): - node_filter = {} + @ignore_exception() + def get_node_hrn(self, api, node_id_or_hostname): + tag_filter = {'tagname': 'hrn'} try: - node_filter['node_id'] = int(str(node_id_or_hostname)) + tag_filter['node_id'] = int(str(node_id_or_hostname)) except ValueError: # we have a hostname - node_filter['hostname'] = node_id_or_hostname + tag_filter['hostname'] = node_id_or_hostname try: - node = Nodes(api, node_filter = node_filter)[0] - return node['hostname'] + tag = NodeTags(api, node_tag_filter = tag_filter)[0] + return tag['value'] except IndexError: return None - + + @ignore_exception() def get_slice_tags(self, api, slice_id): return SliceTags(api, slice_tag_filter = {'slice_id': slice_id}) + @ignore_exception() def get_tag_type(self, api, tagname): try: tag = TagTypes(api, {'tagname':tagname})[0] @@ -77,15 +100,19 @@ class BaseOMF(object): except IndexError: return None + @ignore_exception() def create_slice(self, slice): pass + @ignore_exception() def add_resource(self, slice, resource): pass + @ignore_exception() def delete_slice(self, slice): pass + @ignore_exception() def delete_resource(self, slice, resource): pass @@ -132,8 +159,8 @@ class BaseOMF(object): elif api_method_name == "AddSliceToNodes" and ret_val == 1: node_ids = args[2] for node_id in node_ids: - node_hostname = self.get_node_hostname(wobj.api, node_id) - self.add_resource(self.slice['name'], node_hostname) + node_hrn = self.get_node_hrn(wobj.api, node_id) + self.add_resource(self.slice['name'], node_hrn) elif api_method_name == "DeleteSlice" and ret_val == 1: self.delete_slice(self.slice['name']) @@ -141,8 +168,8 @@ class BaseOMF(object): elif api_method_name == "DeleteSliceFromNodes" and ret_val == 1: node_ids = args[2] for node_id in node_ids: - node_hostname = self.get_node_hostname(wobj.api, node_id) - self.delete_resource(self.slice['name'], node_hostname) + node_hrn = self.get_node_hrn(wobj.api, node_id) + self.delete_resource(self.slice['name'], node_hrn) elif api_method_name == "AddSliceTag": # OMF slices need to have dotsshmount vsys tag set to be @@ -150,7 +177,8 @@ class BaseOMF(object): tag_type_id_or_name = args[2] omf_tag = self.get_tag_type(wobj.api, "omf_control") vsys_tag = self.get_tag_type(wobj.api, "vsys") - if tag_type_id_or_name in (omf_tag['tagname'], omf_tag['tag_type_id']): + if omf_tag and vsys_tag \ + and tag_type_id_or_name in (omf_tag['tagname'], omf_tag['tag_type_id']): slice_tag = SliceTag(wobj.api) slice_tag['slice_id'] = self.slice['slice_id'] slice_tag['tag_type_id'] = vsys_tag['tag_type_id'] @@ -171,15 +199,19 @@ class OMFAspect_xmlrpc(BaseOMF): slicemgr_url = self.config.PLC_OMF_SLICEMGR_URL self.server = xmlrpclib.ServerProxy(slicemgr_url, allow_none = 1) + @ignore_exception() def create_slice(self, slice): self.server.createSlice(slice) + @ignore_exception() def add_resource(self, slice, resource): self.server.addResource(slice, resource) + @ignore_exception() def delete_slice(self, slice): self.server.deleteSlice(slice) + @ignore_exception() def delete_resource(self, slice, resource): self.server.removeResource(slice, resource)