summaryrefslogtreecommitdiffstats
path: root/lcm/ns/sfcs/create_flowcla.py
diff options
context:
space:
mode:
Diffstat (limited to 'lcm/ns/sfcs/create_flowcla.py')
-rw-r--r--lcm/ns/sfcs/create_flowcla.py92
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]