def manage_flows(self, tgt_box_name): filepath = "./templates/" + tgt_box_name + ".json" tgt_tmpl_json = Parser.json_load_file(filepath) tgt_box_dict = Parser.json_parse_by_key(tgt_tmpl_json, "box") tgt_bridge_list = Parser.json_parse_by_key(tgt_tmpl_json, "bridge") tgt_flow_list = Parser.json_parse_by_key(tgt_tmpl_json, "flows") tgt_box_ip = tgt_box_dict["ipaddr"] tgt_ovsdb_pt = tgt_box_dict["ovsdb_port"] for tgt_flow_dict in tgt_flow_list: tgt_br_name = tgt_flow_dict["bridge"] tgt_bridge_dict = None for br in tgt_bridge_list: if br["name"] == tgt_br_name: tgt_bridge_dict = br break if tgt_bridge_dict is None: print "Failed: The bridge " + tgt_br_name + " is not exist." print "Failed: Therefore the flow " + tgt_flow_dict["name"] + " can't be created" continue tgt_ctrl = tgt_bridge_dict ["Controller"] if self.is_flow_exists(tgt_flow_dict, tgt_ctrl): pass self.manage_flow(tgt_flow_dict) return
def manage_bridges(self, tgt_box_name): filepath = "./templates/" + tgt_box_name + ".json" tgt_tmpl_json = Parser.json_load_file(filepath) tgt_box_dicts = Parser.json_parse_by_key(tgt_tmpl_json, "box") tgt_br_list = Parser.json_parse_by_key(tgt_tmpl_json, "bridges") tgt_box_ip = tgt_box_dicts["ipaddr"] tgt_ovsdb_pt = tgt_box_dicts["ovsdb_port"] ex_all_br_ovsdb_list = Parser.divide_str_to_list_by_keyword(iface.ovs_vsctl_show(tgt_box_ip, tgt_ovsdb_pt), "Bridge") # Remove Unrequired field in the "ovs-vsctl show" result # (e.g ovs_version: "2.0.2") unreq_key = ["ovs_version"] for i in ex_all_br_ovsdb_list: for j in i: if j.split()[0] in unreq_key: idx = i.index(j) del i[idx] ex_all_br_dicts = Parser.convert_ovsshow_to_json_dicts(ex_all_br_ovsdb_list) # Manage each bridge in the bridge list defined in box's template for tgt_br_dict in tgt_br_list: print "Bridge !!" print tgt_br_dict self.manage_bridge(tgt_box_ip, tgt_ovsdb_pt, tgt_br_dict, ex_all_br_dicts) return
def manage_tunnel_pair(self, tnl_pair_list): # self.prepare_tunnel_manager(tgtname) tnl_end1_dict = tnl_pair_list[0] tnl_end2_dict = tnl_pair_list[1] try: end1_filepath = "./templates/" + tnl_end1_dict["boxname"] + ".json" end2_filepath = "./templates/" + tnl_end2_dict["boxname"] + ".json" # end1_json = parser.json_load_file(end1_filepath) # end2_json = parser.json_load_file(end2_filepath) end1_box_dict = (Parser.json_load_file(end1_filepath))["box"] end2_box_dict = (Parser.json_load_file(end2_filepath))["box"] end1_box_ip = end1_box_dict["ipaddr"] end2_box_ip = end2_box_dict["ipaddr"] end1_box_pt = end1_box_dict["ovsdb_port"] end2_box_pt = end2_box_dict["ovsdb_port"] end1_all_br_ovsdb_list = Parser.divide_str_to_list_by_keyword( iface.ovs_vsctl_show(end1_box_ip, end1_box_pt), "bridge") end2_all_br_ovsdb_list = Parser.divide_str_to_list_by_keyword( iface.ovs_vsctl_show(end2_box_ip, end2_box_pt), "bridge") end1_all_br_dicts = Parser.convert_ovsshow_to_json_dicts(end1_all_br_ovsdb_list) end2_all_br_dicts = Parser.convert_ovsshow_to_json_dicts(end2_all_br_ovsdb_list) self.manage_tunnel(tnl_end1_dict, end1_all_br_dicts) self.manage_tunnel(tnl_end2_dict, end2_all_br_dicts) check1 = PingChecker.is_pingable_tunnel(end1_box_ip, tnl_end1_dict["bridge"], tnl_end1_dict["options"]["remote_ip"], end1_box_dict["user"]) check2 = PingChecker.is_pingable_tunnel(end2_box_ip, tnl_end2_dict["bridge"], tnl_end2_dict["options"]["remote_ip"], end2_box_dict["user"]) except IOError as e: print e return except ValueError as e: print e return return
def scan_tunnels(self, tgt_list): for tgt_box in tgt_list: try: file_path = "./templates/" + tgt_box + ".json" tgt_tmpl_json = Parser.json_load_file(file_path) tgt_tnls_json = tgt_tmpl_json["tunnels"] except IOError as e: print e continue except ValueError as e: print e continue for tgt_tnl_json in tgt_tnls_json: peer_box_name = tgt_tnl_json["peer_box"] peer_box_json = {} for i in tgt_list: if i == peer_box_name: peer_file_path = "./templates/" + peer_box_name + ".json" try: peer_tmpl_json = Parser.json_load_file(peer_file_path) peer_tnls_json = peer_tmpl_json["tunnels"] break except IOError as e: print e continue except ValueError as e: print e continue if peer_tnls_json is None: continue peer_tnl_json = {} for tmp_tnl_json in peer_tnls_json: try: if tmp_tnl_json["peer_box"] == tgt_tnl_json["name"] and \ tmp_tnl_json["options"]["local_ip"] == tgt_tnl_json["options"]["remote_ip"] and \ tmp_tnl_json["options"]["remote_ip"] == tgt_tnl_json["options"]["local_ip"]: peer_tnl_json = tmp_tnl_json break else: continue except ValueError as e: print e continue if peer_tnl_json is None: continue tnl_pair_list = [] for tnl_pair in self.tnl_pair_lists: if (tnl_pair[0]["name"] == tgt_tnl_json["name"] and tnl_pair[1]["name"] == peer_tnl_json["name"]) or \ (tnl_pair[1]["name"] == tgt_tnl_json["name"] and tnl_pair[0]["name"] == peer_tnl_json[ "name"]): tnl_pair_list = tnl_pair break if tnl_pair_list is not None: continue tgt_tnl_json["boxname"] = tgt_tmpl_json["box"]["hostname"] peer_tnl_json["boxname"] = peer_tmpl_json["box"]["hostname"] tnl_pair_list.append(tgt_tnl_json) tnl_pair_list.append(peer_tnl_json) self.tnl_pair_lists.append(tnl_pair_list)