1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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]
|