OSDN Git Service

refactoring...
authort.moriyama <t.moriyama@users.sourceforge.jp>
Sun, 9 Jun 2013 16:36:49 +0000 (01:36 +0900)
committert.moriyama <t.moriyama@users.sourceforge.jp>
Sun, 9 Jun 2013 16:36:49 +0000 (01:36 +0900)
linkpair/collect/agent/linuxvlan_agent.py
linkpair/collect/agent/ovs_agent.py
linkpair/collect/utils.py
linkpair/formatter/baseformatter.py
linkpair/formatter/graphviz_tb.py
linkpair/formatter/springy.py

index 34555d7..11fa522 100755 (executable)
@@ -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))
index 7f70f15..b25a7d8 100755 (executable)
@@ -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),
index 786a9ed..08bf138 100755 (executable)
@@ -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
index 8198211..aef93fd 100755 (executable)
@@ -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),
index 0abd574..604cec5 100755 (executable)
@@ -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,
index d8d5350..97bd262 100755 (executable)
@@ -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,