Пример #1
0
    def update_service(self, template, service_id=None):
        """
        서비스 수정, service_id 가 None 이면 생성
        :param template:
        :param service_id:
        :return:
        """
        url = self.CTRL_URL + "/service"
        if service_id:
            url += "/" + service_id
            response = CustomHTTPClient.patch_method(url, headers=self.HEADER, body=template)
        else:
            response = CustomHTTPClient.post_method(url, headers=self.HEADER, body=template)

        return self.confirm_status(response)
Пример #2
0
 def get_service(self, service_id=None):
     """
     Service 상세정보 출력, service_id 가 None 이면 리스트 출력
     :param service_id:
     :return:
         serviceObject:
             service_id(String): 서비스 ID
             service_detail(JSON): 생성된 Serivce 자원 리스트
             sfc_cnt(Integer): SFC 생성 개수
             service_description(String): Service 설명
             created_at(String): Service 생성 시각
             tenant_name(String): Tenant Name
             user_name(String): User Name
             code(Integer): Response Code
         service_detail:
             status(String): 상태
             vm_list(object list):[{vm_object}]
             network_list(object list):[{network_object}]
             volume_list(object list):[{volume_object}]
             vrouter_list(object list):[{vrouter_object}]
             error_msg_list:[]
     """
     url = self.CTRL_URL + "/service"
     if service_id:
         url += "/" + service_id
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #3
0
    def confirm_status(response):
        status = response.status_code
        flag = False

        if status == 400:
            contents = {"error": {"message": "BadRequest", "code": 400, "title": "ControlEngineMessage"}}
        elif status == 404:
            contents = {"error": {"message": "NotFound - URL", "code": 404, "title": "ControlEngine"}}
        elif status == 500:
            try:
                contents = response.json()
            except Exception as e:
                contents = {"error": {"message": e.message, "code": 500, "title": "JsonError"}}
        else:
            flag = True
            contents = CustomHTTPClient.confirm_status(response)
        if not flag and LOG_LEVEL == "DEBUG":
            request = response.request
            log_str = """
            ============================= Request ===============================
            [CURL {}] {}
            HEADERS: {}
            BODY: {}
            ============================= Response ===============================
            status: {}
            contents: {}
            response: {}
            =========================== end Response =============================
            """.format(request.method, request.url, request.headers, request.body, str(status), contents, response.content)
            logger.debug(log_str)
        return contents
Пример #4
0
 def get_route_dst_rule_list(self):
     """
     목적지 기반 전체 라우터 조회
     :return: {"message": "Success", "code": 200, "result": ["qrouter-fb4feaff-93b1-4564-8698-2ca8a67db277", "qrouter-7dbafe64-7d18-4e82-b361-814036d26f43", "qrouter-8beb2526-16f6-423b-a198-04e7d50bd3f1", "qrouter-902ecd6e-03c9-4111-ba10-ce3f7500509d"]}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/dst_rule"
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #5
0
 def get_route_pbr_tables(self):
     """
     송신지 기반 전체 라우터 조회
     :return: {"message": "Success", "code": 200, "result": {"qrouter-7dbafe64-7d18-4e82-b361-814036d26f43": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}], "qrouter-8beb2526-16f6-423b-a198-04e7d50bd3f1": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}], "qrouter-fb4feaff-93b1-4564-8698-2ca8a67db277": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}], "qrouter-902ecd6e-03c9-4111-ba10-ce3f7500509d": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}]}}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/src_rule"
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #6
0
 def delete_service(self, service_id):
     """
     서비스 삭제
     :param service_id:
     :return:
     """
     url = self.CTRL_URL + "/service/" + service_id
     response = CustomHTTPClient.delete_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #7
0
 def resume_service(self, service_id):
     """
     서비스 재실행
     :param service_id:
     :return:
     """
     url = self.CTRL_URL + "/service/" + service_id + "/resume"
     response = CustomHTTPClient.post_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #8
0
 def get_route_dst_rule(self, route_id, netnodeip):
     """
     목적지 기반 라우터 상세 조회
     :param route_id: qrouter-fb4feaff-93b1-4564-8698-2ca8a67db277
     :return: {"message": "Success", "code": 200, "result": [{"Use": "0", "Iface": "qg-9f4212b2-d1", "Metric": "0", "Destination": "0.0.0.0", "Genmask": "0.0.0.0", "Flags": "UG", "Ref": "0", "Gateway": "10.10.200.1"}, {"Use": "0", "Iface": "qg-9f4212b2-d1", "Metric": "0", "Destination": "10.10.200.0", "Genmask": "255.255.255.0", "Flags": "U", "Ref": "0", "Gateway": "0.0.0.0"}, {"Use": "0", "Iface": "qr-90ce90aa-cb", "Metric": "0", "Destination": "192.168.124.0", "Genmask": "255.255.255.0", "Flags": "U", "Ref": "0", "Gateway": "0.0.0.0"}]}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/dst_rule/" + netnodeip + "/" + route_id
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #9
0
 def get_port_list(self, resource_type, resource_id):
     """
     해당 자원의 포트 출력
     :param resource_type:
     :param resource_id:
     :return:
     """
     url = self.CTRL_URL + "/neutron/port/" + resource_type + "/" + resource_id
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #10
0
 def pause_sfc(self, service_id, sfc_id):
     """
     SFC 중지
     :param service_id:
     :param sfc_id:
     :return:
     """
     url = self.CTRL_URL + "/service/" + service_id + "/sfc/" + sfc_id + "/pause"
     response = CustomHTTPClient.post_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #11
0
 def get_sfc_detail(self, service_id, sfc_id):
     """
     SFC 상세정보 출력
     :param service_id:
     :param sfc_id:
     :return:
     """
     url = self.CTRL_URL + "/service/" + service_id + "/sfc/" + sfc_id
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #12
0
 def delete_route_src_rule_path_pbrtable(self, route_id, netnodeip, data):
     """
     정책기반라우팅 테이블 삭제
     :param route_id:
     :return: {"message": "Success", "code": 200, "result": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}]}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/src_rule/" + netnodeip + "/" + route_id + "/pbrtable"
     response = CustomHTTPClient.put_method(url, headers=self.HEADER, body=data)
     return self.confirm_status(response)
Пример #13
0
 def delete_route_src_rule_path_type1(self, route_id, netnodeip, data):
     """
     가상 라우터의 라우터 네임스페이스에서 정책기반라우팅 규칙 조회 후 삭제
     :param route_id:
     :param data: {"type":"type1", "src":"172.16.10/24"}
     :return: {"message": "Success", "code": 200, "result": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}]}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/src_rule/" + netnodeip + "/" + route_id + "/type1"
     response = CustomHTTPClient.put_method(url, headers=self.HEADER, body=data)
     return self.confirm_status(response)
Пример #14
0
    def delete_route_src_rule_path_type2(self, route_id, netnodeip, data):
        """

        :param route_id:
        :param data: {"type":"type2", "dest":"default", "via":"192.168.132.1","dev":"qr-b37c13d4-d1"}
        :return: {"message": "Success", "code": 200, "result": []}
        {"success": {"result": ["..."]}} 로 변환해서 return
        """
        url = self.CTRL_URL + "/route/src_rule/" + netnodeip + "/" + route_id + "/type2"
        response = CustomHTTPClient.put_method(url, headers=self.HEADER, body=data)
        return self.confirm_status(response)
Пример #15
0
 def create_route_src_rule_path(self, route_id, netnodeip, data):
     """
     송신지 기반 라우팅 테이블 추가 및 규칙 추가 (type1과 type2가 나뉘어져 있으며, type1 실행후 type2가 실행되어야 함)
     :param data: {"type":"type1", "src":"172.16.10/24"} or {"type":"type2", "dest":"default", "via":"192.168.132.1","dev":"qr-b37c13d4-d1"}
     :param route_id: qrouter-7dbafe64-7d18-4e82-b361-814036d26f43
     :return: {"message": "Success", "code": 200, "result": [{"PBR_TABLE": "local", "order": "0", "target": "from all lookup"}, {"PBR_TABLE": "7dbafe64", "order": "32765", "target": "from 172.16.10.0/24 lookup"}, {"PBR_TABLE": "main", "order": "32766", "target": "from all lookup"}, {"PBR_TABLE": "default", "order": "32767", "target": "from all lookup"}]}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/src_rule/" + netnodeip + "/" + route_id
     response = CustomHTTPClient.post_method(url, headers=self.HEADER, body=data)
     return self.confirm_status(response)
Пример #16
0
 def get_sfc_list(self, service_id):
     """
     SFC 리스트 출력
     :param service_id:
     :return:
         list(object): SFC List
         code(Integer): Response Code
     """
     url = self.CTRL_URL + "/service/" + service_id + "/sfc"
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #17
0
    def get_resource(self, resource_type, resource_id):
        """
        리소스 상세정보 출력
        :param resource_type:
        :param resource_id:
        :return:
        """
        url = self.CTRL_URL + "/resource/" + resource_type + "/" + resource_id
        response = CustomHTTPClient.get_method(url, headers=self.HEADER)

        return self.confirm_status(response)
Пример #18
0
    def update_map(self, service_id, map_data):
        """
        Map 수정
        :param service_id:
        :param map_data:
        :return:
        """
        url = self.CTRL_URL + "/service/" + service_id + "/map"
        response = CustomHTTPClient.patch_method(url, headers=self.HEADER, body=map_data)

        return self.confirm_status(response)
Пример #19
0
    def get_route_src_rules(self, route_id, netnodeip, pbr_table_name):
        """
        송신지 기반 특정 라우터의 특정 테이블 상세 조회
        :param route_id: qrouter-7dbafe64-7d18-4e82-b361-814036d26f43
        :return: {"message": "Success", "code": 200, "result": ["broadcast 10.10.200.0 dev qg-aa2581f6-a9  proto kernel  scope link  src 10.10.200.57 ", "local 10.10.200.57 dev qg-aa2581f6-a9  proto kernel  scope host  src 10.10.200.57 ", "local 10.10.200.58 dev qg-aa2581f6-a9  proto kernel  scope host  src 10.10.200.58 ", "broadcast 10.10.200.58 dev qg-aa2581f6-a9  proto kernel  scope link  src 10.10.200.58 ", "broadcast 10.10.200.255 dev qg-aa2581f6-a9  proto kernel  scope link  src 10.10.200.57 ", "broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 ", "local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 ", "local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 ", "broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 ", "broadcast 192.168.132.0 dev qr-b37c13d4-d1  proto kernel  scope link  src 192.168.132.1 ", "local 192.168.132.1 dev qr-b37c13d4-d1  proto kernel  scope host  src 192.168.132.1 ", "broadcast 192.168.132.255 dev qr-b37c13d4-d1  proto kernel  scope link  src 192.168.132.1 "]}
        {"success": {"result": ["..."]}} 로 변환해서 return
        """
        url = self.CTRL_URL + "/route/src_rule/" + netnodeip + "/" + route_id + "/" + pbr_table_name
        response = CustomHTTPClient.get_method(url, headers=self.HEADER)
        result = self.confirm_status(response)
        if result.get("success"):
            temp = []
            for src_rule in result["success"].get("result"):
                if pbr_table_name == "local":
                    pattern = re.compile(r"([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s*")
                    matcher = pattern.search(src_rule)
                    if matcher:
                        temp.append({
                            "str": src_rule,
                            matcher.group(1): matcher.group(2),
                            matcher.group(3): matcher.group(4),
                            matcher.group(5): matcher.group(6),
                            matcher.group(7): matcher.group(8),
                            matcher.group(9): matcher.group(10)
                        })

                else:
                    pattern = re.compile(r"([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)\s+([\S]+)")
                    matcher = pattern.search(src_rule)
                    pattern1 = re.compile(r"([\S]+)\s+([\S]+)\s+([\S]+)\s*")
                    matcher1 = pattern1.search(src_rule)
                    if matcher:
                        temp.append({
                            "str": src_rule,
                            "dest": matcher.group(1),
                            matcher.group(2): matcher.group(3),
                            matcher.group(4): matcher.group(5)
                        })
                    elif matcher1:
                        temp.append({
                            "str": src_rule,
                            "via": matcher1.group(1),
                            matcher1.group(2): matcher1.group(3),
                        })
                    else:
                        temp.append({
                            "str": src_rule
                        })
            result["success"]["result"] = temp
        return result
Пример #20
0
 def get_map(self, service_id):
     """
     Map 상세정보 출력
     :param service_id:
     :return:
     """
     url = self.CTRL_URL + "/service/" + service_id + "/map"
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     contents = self.confirm_status(response)
     if contents.get("success"):
         map_link_list = contents["success"].get("map_link_list")
         if type(map_link_list) == str or type(map_link_list) == unicode:
             logger.error("map_link_list: {}".format(map_link_list))
             contents["success"]["map_link_list"] = json.loads(map_link_list.replace("\\", ""))
     return contents
Пример #21
0
    def get_template(self, service_id):
        """
        template 상세정보 출력
        :param service_id:
        :return:
        """
        url = self.CTRL_URL + "/service/" + service_id + "/template"
        response = CustomHTTPClient.get_method(url, headers=self.HEADER)
        contents = self.confirm_status(response)

        if contents.get("success"):
            user_template = contents["success"].get("user_template")
            if type(user_template) == str or type(user_template) == unicode:
                contents["success"]["user_template"] = ast.literal_eval(user_template.replace("\\", ""))

        return contents
Пример #22
0
    def create_sfc(self, service_id, sfc_template):
        """
        SFC 생성
        :param service_id:
        :param sfc_template:
        :return:
            id(String): SFC ID
            chain_id(String): CHAIN ID
            sfc_status(String ): SFC 상태
            message(String): 전달 메시지
            code(Integer): Response Code

        """
        url = self.CTRL_URL + "/service/" + service_id + "/sfc"
        response = CustomHTTPClient.post_method(url, headers=self.HEADER, body=sfc_template)
        return self.confirm_status(response)
Пример #23
0
 def get_route_devices(self, route_id, netnodeip):
     """
     Router device 정보확인
     :return: {"message": "Success", "code": 200, "result": [{"lo": ["Link encap:Local Loopback  ", "inet addr:127.0.0.1  Mask:255.0.0.0", "inet6 addr: ::1/128 Scope:Host", "UP LOOPBACK RUNNING  MTU:65536  Metric:1", "RX packets:0 errors:0 dropped:0 overruns:0 frame:0", "TX packets:0 errors:0 dropped:0 overruns:0 carrier:0", "collisions:0 txqueuelen:0 ", "RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)"]}, {"qg-9be0d60a-75": ["Link encap:Ethernet  HWaddr fa:16:3e:a9:37:95  ", "inet addr:10.10.200.48  Bcast:10.10.200.255  Mask:255.255.255.0", "inet6 addr: fe80::f816:3eff:fea9:3795/64 Scope:Link", "UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1", "RX packets:576391 errors:0 dropped:0 overruns:0 frame:0", "TX packets:2731 errors:0 dropped:0 overruns:0 carrier:0", "collisions:0 txqueuelen:0 ", "RX bytes:105722737 (105.7 MB)  TX bytes:115765 (115.7 KB)"]}, {"qr-54f631f2-1a": ["Link encap:Ethernet  HWaddr fa:16:3e:78:24:d1  ", "inet addr:10.31.0.1  Bcast:10.31.0.255  Mask:255.255.255.0", "inet6 addr: fe80::f816:3eff:fe78:24d1/64 Scope:Link", "UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1", "RX packets:383 errors:0 dropped:0 overruns:0 frame:0", "TX packets:207 errors:0 dropped:0 overruns:0 carrier:0", "collisions:0 txqueuelen:0 ", "RX bytes:34016 (34.0 KB)  TX bytes:21062 (21.0 KB)"]}]}
     {"success": {"result": ["..."]}} 로 변환해서 return
     """
     url = self.CTRL_URL + "/route/src_rule/" + netnodeip + "/" + route_id
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     result = self.confirm_status(response)
     if result.get("success"):
         data = {}
         for pbr_tables in result["success"]["result"]:
             for pbr_table_name, info_str_list in pbr_tables.items():
                 data[pbr_table_name] = {}
                 if pbr_table_name == "lo":
                     pattern = re.compile(r"Link encap:\s*(?P<link_encap>\w+)\s+(?P<hw_addr>\w+)\s*", re.I)
                     pattern1 = re.compile(r"inet addr:\s*(?P<inet_addr>[\d\:./]+)\s+Mask:\s*(?P<mask>[\d.]+)\s*", re.I)
                     pattern2 = re.compile(r"inet6 addr:\s*(?P<inet6_addr>[\w\:./]+)\s+Scope:\s*(?P<scope>\w+)\s*", re.I)
                     data[pbr_table_name]["b_cast"] = "-"
                     # pattern3 = re.compile(r"UP LOOPBACK RUNNING  MTU:65536  Metric:1", re.I)
                     # pattern4 = re.compile(r"RX packets:0 errors:0 dropped:0 overruns:0 frame:0", re.I)
                     # pattern5 = re.compile(r"TX packets:0 errors:0 dropped:0 overruns:0 carrier:0", re.I)
                     # pattern6 = re.compile(r"collisions:0 txqueuelen:0 ", re.I)
                     # pattern7 = re.compile(r"RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)", re.I)
                 else:
                     pattern = re.compile(r"Link encap:\s*(?P<link_encap>\w+)\s+HWaddr\s+(?P<hw_addr>[\w\:]+)\s*", re.I)
                     pattern1 = re.compile(r"inet addr:\s*(?P<inet_addr>[\d.]+)\s+Bcast:\s*(?P<b_cast>[\d.]+)\s+Mask:\s*(?P<mask>[\d.]+)\s*", re.I)
                     pattern2 = re.compile(r"inet6 addr:\s*(?P<inet6_addr>[\w\:./]+)\s+Scope:(?P<scope>\w+)\s*", re.I)
                     # pattern3 = re.compile(r"UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1", re.I)
                     # pattern4 = re.compile(r"RX packets:576391 errors:0 dropped:0 overruns:0 frame:0", re.I)
                     # pattern5 = re.compile(r"TX packets:2731 errors:0 dropped:0 overruns:0 carrier:0", re.I)
                     # pattern6 = re.compile(r"collisions:0 txqueuelen:0 ", re.I)
                     # pattern7 = re.compile(r"RX bytes:105722737 (105.7 MB)  TX bytes:115765 (115.7 KB)", re.I)
                 for info_str in info_str_list:
                     m = pattern.search(info_str)
                     if m:
                         data[pbr_table_name].update(m.groupdict())
                     else:
                         m1 = pattern1.search(info_str)
                         if m1:
                             data[pbr_table_name].update(m1.groupdict())
                         else:
                             m2 = pattern2.search(info_str)
                             if m2:
                                 data[pbr_table_name].update(m2.groupdict())
         result["success"]["result"] = data
     return result
Пример #24
0
 def get_vnc_console(self, vm_id):
     url = self.CTRL_URL + "/nova/servers/" + vm_id + "/vnc"
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)
Пример #25
0
 def get_all_service_list(self):
     url = self.CTRL_URL + "/service_admin"
     response = CustomHTTPClient.get_method(url, headers=self.HEADER)
     return self.confirm_status(response)