From 3305d3d79274cd1d5756aa341ec3fcf7aa59df2e Mon Sep 17 00:00:00 2001 From: "t.moriyama" Date: Mon, 10 Jun 2013 01:36:49 +0900 Subject: [PATCH] refactoring... --- linkpair/collect/agent/linuxvlan_agent.py | 5 ++- linkpair/collect/agent/ovs_agent.py | 74 ++++++++++++++++--------------- linkpair/collect/utils.py | 32 +++++++++++++ linkpair/formatter/baseformatter.py | 26 ++++++----- linkpair/formatter/graphviz_tb.py | 24 +++++----- linkpair/formatter/springy.py | 26 ++++++----- 6 files changed, 118 insertions(+), 69 deletions(-) diff --git a/linkpair/collect/agent/linuxvlan_agent.py b/linkpair/collect/agent/linuxvlan_agent.py index 34555d7..11fa522 100755 --- a/linkpair/collect/agent/linuxvlan_agent.py +++ b/linkpair/collect/agent/linuxvlan_agent.py @@ -29,7 +29,7 @@ class LinuxVlanAgent(BaseAgent): vlan_configs.append(vlan_config) else: return - + for if_line in vlan_configs[2:]: if_line = if_line.rstrip() if self._u.d_push(re.match(r'^(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)', if_line)) is not None: @@ -37,6 +37,7 @@ class LinuxVlanAgent(BaseAgent): vlan_if_name = match.group(1) vlan_vid = match.group(2) vlan_master_if = match.group(3) - port_meta = {"vlan_vid": vlan_vid, "vlan_master_if": vlan_master_if} + port_meta = { + "vlan_vid": vlan_vid, "vlan_master_if": vlan_master_if} self._cu.add_port(Port( vlan_if_name, Port.DEFAULT_TYPE, port_meta)) diff --git a/linkpair/collect/agent/ovs_agent.py b/linkpair/collect/agent/ovs_agent.py index 7f70f15..b25a7d8 100755 --- a/linkpair/collect/agent/ovs_agent.py +++ b/linkpair/collect/agent/ovs_agent.py @@ -15,9 +15,6 @@ class OVSAgent(BaseAgent): Open vSwitch Collector Agent ''' - PORT_TYPE_UNSPECIFIED = "UNSPECIFIED" - PORT_PEER_UNSPECIFIED = "UNSPECIFIED" - def run(self): self.get_configuration() @@ -53,12 +50,16 @@ class OVSAgent(BaseAgent): return br_meta - def get_port_metadata(self, port): + def get_port_metadata(self, port_name): port_meta = {} + exist_port = self._cu.get_port(port_name) + if exist_port != self._cu.PORT_NOT_FOUND: + port_meta = exist_port.metadata + res_ovsport = self._runner.exec_cmd("ovs-vsctl show") for i in range(0, len(res_ovsport)): port_start = res_ovsport[i].strip() - if self._u.d_push(re.search(r'Port "?%s"?' % port, port_start)) is not None: + if self._u.d_push(re.search(r'Port "?%s"?' % port_name, port_start)) is not None: for j in range(i + 1, len(res_ovsport)): port_spec = res_ovsport[j].strip() if self._u.d_push(re.search(r'tag: (.*)', port_spec)) is not None: @@ -76,29 +77,6 @@ class OVSAgent(BaseAgent): return port_meta - def get_port_type(self, port_meta): - if "type" in port_meta: - return port_meta["type"] - else: - return self.PORT_TYPE_UNSPECIFIED - - def get_port_peer(self, port_meta): - if self.get_port_type(port_meta) == "patch": - return port_meta["peer"] - else: - return self.PORT_TYPE_UNSPECIFIED - - def get_port_veth_peer(self, port_name): - port = self._cu.get_port(port_name) - if port != self._cu.PORT_NOT_FOUND: - port_meta = port.metadata - if "veth_peer" in port_meta: - return port_meta["veth_peer"] - else: - return self.PORT_PEER_UNSPECIFIED - else: - return self.PORT_PEER_UNSPECIFIED - def get_configuration(self): patch_peers = {} veth_peers = {} @@ -114,9 +92,9 @@ class OVSAgent(BaseAgent): port_meta = self.get_port_metadata(port_name) # patch port - if self.get_port_type(port_meta) == "patch": + if self._cu.get_port_type(port_meta) == "patch": patch_src = port_name - patch_dst = self.get_port_peer(port_meta) + patch_dst = self._cu.get_port_peer(port_meta) patch_peers[patch_src + ":" + patch_dst] = self.PEER_FOUND if patch_dst + ":" + patch_src in patch_peers: @@ -144,9 +122,9 @@ class OVSAgent(BaseAgent): self._formatter.PATCH_FORMAT) # veth port - elif self.get_port_veth_peer(port_name) != self.PORT_PEER_UNSPECIFIED: + elif self._cu.get_port_veth_peer(port_name) != self._cu.PORT_PEER_UNSPECIFIED: peer_src = port_name - peer_dst = self.get_port_veth_peer(port_name) + peer_dst = self._cu.get_port_veth_peer(port_name) veth_peers[peer_src + ":" + peer_dst] = self.PEER_FOUND if peer_dst + ":" + peer_src in veth_peers: @@ -176,7 +154,7 @@ class OVSAgent(BaseAgent): # none patch port else: # NOT Internal Bridge Port. - if self.get_port_type(port_meta) != "internal": + if self._cu.get_port_type(port_meta) != "internal": # physical interface if self._u.d_push(re.match(r'^eth\d+$', port_name)) \ @@ -204,10 +182,36 @@ class OVSAgent(BaseAgent): else: ## Other OVSPort - self._cu._port_to_br[port_name] = br_src + #### VLAN interface + if self._cu.get_port_vlan_master_if(port_meta) != self._cu.PORT_VLAN_UNSPECIFIED: + master_if = self._cu.get_port_vlan_master_if( + port_meta) + if self._u.d_push(re.match(r'^eth\d+$', master_if)) \ + or self._u.d_push(re.match(r'^em\d+$', master_if)) \ + or self._u.d_push(re.match(r'^igb\d+$', master_if)) \ + or self._u.d_push(re.match(r'^bond\d+$', master_if)): + self._cu._port_to_br[port_name] = br_src + self._cu.add_linkpair( + Device( + br_src, Device.BR_TYPE, br_src_meta), + Device( + "Physical NW", Device.PHYNET_TYPE), + Port( + port_name, Port.DEFAULT_TYPE, port_meta), + Port("")) + else: + self._cu._port_to_br[port_name] = br_src + self._cu.add_linkpair( + Device( + br_src, Device.BR_TYPE, br_src_meta), + Device( + "NOT CONNECTED", Device.NOT_CONNECTED_TYPE), + Port( + port_name, Port.DEFAULT_TYPE, port_meta), + Port("")) # internal - elif self.get_port_type(port_meta) == "internal": + elif self._cu.get_port_type(port_meta) == "internal": if port_name in self._iface_to_nss: self._cu.add_linkpair( Device(br_src, Device.BR_TYPE, br_src_meta), diff --git a/linkpair/collect/utils.py b/linkpair/collect/utils.py index 786a9ed..08bf138 100755 --- a/linkpair/collect/utils.py +++ b/linkpair/collect/utils.py @@ -26,6 +26,9 @@ class CollectUtils(object): PEER_FOUND = 1 DEVICE_NOT_FOUND = -1 PORT_NOT_FOUND = -1 + PORT_TYPE_UNSPECIFIED = "UNSPECIFIED" + PORT_PEER_UNSPECIFIED = "UNSPECIFIED" + PORT_VLAN_UNSPECIFIED = "UNSPECIFIED" def __init__(self, cd, dbu, formatter=GraphEasyFormatter()): self._devices = cd.devices @@ -108,3 +111,32 @@ class CollectUtils(object): else: self._port_to_br[device] = bridge return bridge + + def get_port_type(self, port_meta): + if "type" in port_meta: + return port_meta["type"] + else: + return self.PORT_TYPE_UNSPECIFIED + + def get_port_peer(self, port_meta): + if self.get_port_type(port_meta) == "patch": + return port_meta["peer"] + else: + return self.PORT_TYPE_UNSPECIFIED + + def get_port_vlan_master_if(self, port_meta): + if "vlan_master_if" in port_meta: + return port_meta["vlan_master_if"] + else: + return self.PORT_VLAN_UNSPECIFIED + + def get_port_veth_peer(self, port_name): + port = self.get_port(port_name) + if port != self.PORT_NOT_FOUND: + port_meta = port.metadata + if "veth_peer" in port_meta: + return port_meta["veth_peer"] + else: + return self.PORT_PEER_UNSPECIFIED + else: + return self.PORT_PEER_UNSPECIFIED diff --git a/linkpair/formatter/baseformatter.py b/linkpair/formatter/baseformatter.py index 8198211..aef93fd 100755 --- a/linkpair/formatter/baseformatter.py +++ b/linkpair/formatter/baseformatter.py @@ -41,19 +41,23 @@ class BaseFormatter(object): formatted_lp = "" device1_label = linkpair.device1 - device2_label = linkpair.device2 + device2_label = linkpair.device2 port1_label = linkpair.port1 port2_label = linkpair.port2 - - if linkpair.port1.metadata.has_key("remote_ip"): - port1_label = port1_label + " remote=" + linkpair.port1.metadata["remote_ip"] - if linkpair.port1.metadata.has_key("tag"): - port1_label = port1_label + " vlan=" + linkpair.port1.metadata["tag"] - if linkpair.port2.metadata.has_key("remote_ip"): - port2_label = port2_label + " remote=" + linkpair.port2.metadata["remote_ip"] - if linkpair.port2.metadata.has_key("tag"): - port2_label = port2_label + " vlan=" + linkpair.port2.metadata["tag"] - + + if "remote_ip" in linkpair.port1.metadata: + port1_label = port1_label + " remote=" + \ + linkpair.port1.metadata["remote_ip"] + if "tag" in linkpair.port1.metadata: + port1_label = port1_label + " vlan=" + \ + linkpair.port1.metadata["tag"] + if "remote_ip" in linkpair.port2.metadata: + port2_label = port2_label + " remote=" + \ + linkpair.port2.metadata["remote_ip"] + if "tag" in linkpair.port2.metadata: + port2_label = port2_label + " vlan=" + \ + linkpair.port2.metadata["tag"] + formatted_lp = linkpair.format % ( device1_label, cls.get_device_style(linkpair.device1.type), diff --git a/linkpair/formatter/graphviz_tb.py b/linkpair/formatter/graphviz_tb.py index 0abd574..604cec5 100755 --- a/linkpair/formatter/graphviz_tb.py +++ b/linkpair/formatter/graphviz_tb.py @@ -124,18 +124,22 @@ node [ def format_linkpair(cls, linkpair): formatted_lp = "" device1_label = linkpair.device1 - device2_label = linkpair.device2 + device2_label = linkpair.device2 port1_label = linkpair.port1 port2_label = linkpair.port2 - - if linkpair.port1.metadata.has_key("remote_ip"): - port1_label = port1_label + " remote=" + linkpair.port1.metadata["remote_ip"].replace("\"", "\\\"") - if linkpair.port1.metadata.has_key("tag"): - port1_label = port1_label + " vlan=" + linkpair.port1.metadata["tag"] - if linkpair.port2.metadata.has_key("remote_ip"): - port2_label = port2_label + " remote=" + linkpair.port2.metadata["remote_ip"] - if linkpair.port2.metadata.has_key("tag"): - port2_label = port2_label + " vlan=" + linkpair.port2.metadata["tag"] + + if "remote_ip" in linkpair.port1.metadata: + port1_label = port1_label + " remote=" + \ + linkpair.port1.metadata["remote_ip"].replace("\"", "\\\"") + if "tag" in linkpair.port1.metadata: + port1_label = port1_label + " vlan=" + \ + linkpair.port1.metadata["tag"] + if "remote_ip" in linkpair.port2.metadata: + port2_label = port2_label + " remote=" + \ + linkpair.port2.metadata["remote_ip"] + if "tag" in linkpair.port2.metadata: + port2_label = port2_label + " vlan=" + \ + linkpair.port2.metadata["tag"] formatted_lp = linkpair.format % ( device1_label, diff --git a/linkpair/formatter/springy.py b/linkpair/formatter/springy.py index d8d5350..97bd262 100755 --- a/linkpair/formatter/springy.py +++ b/linkpair/formatter/springy.py @@ -79,19 +79,23 @@ jQuery(function(){ def format_linkpair(cls, linkpair): formatted_lp = "" device1_label = linkpair.device1 - device2_label = linkpair.device2 + device2_label = linkpair.device2 port1_label = linkpair.port1 port2_label = linkpair.port2 - - if linkpair.port1.metadata.has_key("remote_ip"): - port1_label = port1_label + " remote=" + linkpair.port1.metadata["remote_ip"].replace("\"", "\\\"") - if linkpair.port1.metadata.has_key("tag"): - port1_label = port1_label + " vlan=" + linkpair.port1.metadata["tag"] - if linkpair.port2.metadata.has_key("remote_ip"): - port2_label = port2_label + " remote=" + linkpair.port2.metadata["remote_ip"] - if linkpair.port2.metadata.has_key("tag"): - port2_label = port2_label + " vlan=" + linkpair.port2.metadata["tag"] - + + if "remote_ip" in linkpair.port1.metadata: + port1_label = port1_label + " remote=" + \ + linkpair.port1.metadata["remote_ip"].replace("\"", "\\\"") + if "tag" in linkpair.port1.metadata: + port1_label = port1_label + " vlan=" + \ + linkpair.port1.metadata["tag"] + if "remote_ip" in linkpair.port2.metadata: + port2_label = port2_label + " remote=" + \ + linkpair.port2.metadata["remote_ip"] + if "tag" in linkpair.port2.metadata: + port2_label = port2_label + " vlan=" + \ + linkpair.port2.metadata["tag"] + formatted_lp = linkpair.format % ( device1_label, device2_label, -- 2.11.0