aboutsummaryrefslogtreecommitdiffstats
path: root/lcm/ns/sfcs/create_flowcla.py
blob: 346a8bcf039172ac0b46182b75a642874a5f8be3 (plain)
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]