diff options
Diffstat (limited to 'lcm/ns/sfcs/create_flowcla.py')
-rw-r--r-- | lcm/ns/sfcs/create_flowcla.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lcm/ns/sfcs/create_flowcla.py b/lcm/ns/sfcs/create_flowcla.py new file mode 100644 index 00000000..346a8bcf --- /dev/null +++ b/lcm/ns/sfcs/create_flowcla.py @@ -0,0 +1,92 @@ +# Copyright 2016 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with 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. + + +import logging + +from lcm.ns.sfcs.utils import get_fp_model_by_fp_inst_id +from lcm.pub.database.models import FPInstModel +from lcm.pub.msapi import extsys +from lcm.pub.msapi import sdncdriver + +logger = logging.getLogger(__name__) + + +class CreateFlowClassifier(object): + def __init__(self, data): + self.ns_model_data = data["ns_model_data"] + self.fp_inst_id = data["fpinstid"] + self.flow_classifiers_model = get_fp_model_by_fp_inst_id(data["ns_model_data"], self.fp_inst_id)["properties"][ + "policy"] + self.sdnControllerId = "" + self.url = "" + self.dscp = "" + self.ip_proto = "" + self.source_port_range = "" + self.dest_port_range = "" + self.source_ip_range = "" + self.dest_ip_range = "" + self.flow_classfier_id = "" + + def do_biz(self): + logger.info("CreateFlowClassifier start:") + self.init_data(self.flow_classifiers_model) + self.create_flow_classfier() + self.update_fp_inst() + logger.info("CreateFlowClassifier end:") + + def init_data(self, flow_classifiers_model): + fp_database_info = FPInstModel.objects.filter(fpinstid=self.fp_inst_id).get() + self.sdnControllerId = fp_database_info.sdncontrollerid + self.url = extsys.get_sdn_controller_by_id(self.sdnControllerId)["url"] + self.dscp = flow_classifiers_model["criteria"]["dscp"] + self.ip_proto = flow_classifiers_model["criteria"]["ip_protocol"] + self.source_port_range = flow_classifiers_model["criteria"]["source_port_range"] + self.dest_port_range = flow_classifiers_model["criteria"]["dest_port_range"] + self.dest_ip_range = flow_classifiers_model["criteria"]["dest_ip_range"] + self.source_ip_range = flow_classifiers_model["criteria"]["source_ip_range"] + + def update_fp_inst(self): + fp_inst_info = FPInstModel.objects.filter(fpinstid=self.fp_inst_id).get() + fp_inst_info.flowclassifiers = self.flow_classfier_id + FPInstModel.objects.filter(fpinstid=self.fp_inst_id).update(flowclassifiers=fp_inst_info.flowclassifiers) + + def create_flow_classfier(self): + data = { + "sdnControllerId": self.sdnControllerId, + "url": self.url, + "name": "", + "description": "", + "dscp": self.dscp, + "ip_proto": self.ip_proto, + "source_port_range": self.source_port_range, + "dest_port_range": self.dest_port_range, + "source_ip_range": self.concat_str(self.source_ip_range), + "dest_ip_range": self.concat_str(self.dest_ip_range) + } + # req_param = json.JSONEncoder().encoding(data) + # url = "/openoapi/sdncdriver/v1.0/createflowclassfier" + # ret = req_by_msb(url,"POST", data) + # if ret[0] > 0: + # logger.error('Send Flow Classifier request to Driver failed.') + # utils.sfc_inst_failed_handle(self.fp_inst_id, "Send Flow Classifier request to Driver failed.") + # raise NSLCMException('Send Flow Classifier request to Driver failed.') + # resp_body = json.loads(ret[1]) + self.flow_classfier_id = sdncdriver.create_flow_classfier(data) + + def concat_str(self, str_list): + final_str = "" + for str in str_list: + final_str += str + "," + return final_str[:-1] |