OSDN Git Service

fix agent bugs
authort.moriyama <t.moriyama@users.sourceforge.jp>
Mon, 15 Apr 2013 18:17:29 +0000 (03:17 +0900)
committert.moriyama <t.moriyama@users.sourceforge.jp>
Mon, 15 Apr 2013 18:17:29 +0000 (03:17 +0900)
linkpair/collect/agent/namespace.py
linkpair/collect/agent/ovs.py
linkpair/collect/collector.py
linkpair/collect/utils.py [new file with mode: 0644]

index ce0f965..a06a195 100644 (file)
@@ -13,6 +13,7 @@ from socket import gethostname
 from linkpair.device import Device
 from linkpair.port import Port
 from linkpair.linkpair import LinkPair
+from linkpair.collect.utils import CollectUtils
 from linkpair.collect.agent.commandrunner import CommandRunner
 from linkpair.formatter.grapheasy import GraphEasyFormatter
 from linkpair.commonutils import CommonUtils
@@ -26,12 +27,16 @@ class NamespaceAgent(object):
 
     PEER_FOUND = 1
 
-    def __init__(self, runner, iface_to_nss):
+    def __init__(self, runner, cu, iface_to_nss):
         self._runner = runner
+        self._cu = cu
         self._iface_to_nss = iface_to_nss
         self._u = CommonUtils()
-        
     def run(self):
+           self.map_port_to_namespace()
+           
+    def map_port_to_namespace(self):
         result = self._runner.exec_cmd("ip netns")
     # if result....
         for ns in result:
index e4685e0..16c4fb2 100755 (executable)
@@ -10,39 +10,43 @@ import re
 from xml.dom import minidom
 from subprocess import Popen, PIPE
 from socket import gethostname
-from device import Device
-from port import Port
-from linkpair import LinkPair
+from linkpair.device import Device
+from linkpair.port import Port
+from linkpair.linkpair import LinkPair
+from linkpair.collect.utils import CollectUtils
 from linkpair.collect.agent.commandrunner import CommandRunner
-from formatter.grapheasy import GraphEasyFormatter
-from commonutils import CommonUtils
+from linkpair.formatter.grapheasy import GraphEasyFormatter
+from linkpair.commonutils import CommonUtils
 
 
-class OvsAgent(object):
+class OVSAgent(object):
     '''
     Open vSwitch Collector Agent
     '''
 
     PEER_FOUND = 1
 
-    def __init__(self, linkpairs, runner, formatter=GraphEasyFormatter()):
+    def __init__(self, runner, cu, linkpairs, port_to_br, iface_to_nss, formatter=GraphEasyFormatter()):
+        self._runner = runner
+        self._cu = cu
         self._linkpairs = linkpairs
-        self._port_to_br = {}
-        self._iface_to_nss = {}
+        self._port_to_br = port_to_br
+        self._iface_to_nss = iface_to_nss
         self._u = CommonUtils()
-        self._runner = runner
 
         ''' set parameters '''
-        self._dbu = dbu
         self._formatter = formatter
 
+    def run(self):
+           self.get_configuration()
+    
     def get_configuration(self):
         patch_peers = {}
 
-        result = self._exec_cmd("ovs-vsctl list-br")
+        result = self._runner.exec_cmd("ovs-vsctl list-br")
         for br_src in result:
             br_src = br_src.rstrip()
-            result2 = self._exec_cmd("ovs-dpctl show " + br_src)
+            result2 = self._runner.exec_cmd("ovs-dpctl show " + br_src)
             for port_desc in result2:
                 port_desc = port_desc.rstrip()
                 if self._u.d_push(
@@ -56,20 +60,20 @@ class OvsAgent(object):
                     if patch_dst + ":" + patch_src in patch_peers:
                         continue
 
-                    result3 = self._exec_cmd(
+                    result3 = self._runner.exec_cmd(
                         "ovs-vsctl port-to-br " + patch_dst)
                     if result3 is not None and len(result3) > 0:
                         br_dst = result3[0].rstrip()
-                        self.add_linkpair(
+                        self._cu.add_linkpair(
                             Device(br_src, Device.BR_TYPE),
                             Device(br_dst, Device.BR_TYPE),
                             Port(patch_src),
                             Port(patch_dst),
                             self._formatter.PATCH_FORMAT)
                     else:
-                        self.add_linkpair(
+                        self._cu.add_linkpair(
                             Device(br_src, Device.BR_TYPE),
-                            Device("NOT CONNECTED", Device.BR_TYPE),
+                            Device("NOT CONNECTED", Device.NOT_CONNECTED_TYPE),
                             Port(patch_src),
                             Port(patch_dst),
                             self._formatter.PATCH_FORMAT)
@@ -85,8 +89,8 @@ class OvsAgent(object):
                             if self._u.d_push(re.match(r'^eth\d+$', port)) \
                                 or self._u.d_push(re.match(r'^em\d+$', port)) \
                                     or self._u.d_push(re.match(r'^igb\d+$', port)):
-                                self._port_to_br[port] = br_src
-                                self.add_linkpair(
+                                self._cu._port_to_br[port] = br_src
+                                self._cu.add_linkpair(
                                     Device(br_src, Device.BR_TYPE),
                                     Device("Physical NW", Device.PHYNET_TYPE),
                                     Port(port),
@@ -95,8 +99,8 @@ class OvsAgent(object):
                                 or self._u.d_push(re.match(r'(gre\d+)', port)) \
                                     or self._u.d_push(re.match(r'(gre-\d+)', port)):
                                 port2 = self._u.d_pop().group(1)
-                                self._port_to_br[port2] = br_src
-                                self.add_linkpair(
+                                self._cu._port_to_br[port2] = br_src
+                                self._cu.add_linkpair(
                                     Device(br_src, Device.BR_TYPE),
                                     Device("OS Routing", Device.OS_ROUTE_TYPE),
                                     Port(port),
@@ -104,7 +108,7 @@ class OvsAgent(object):
                             elif re.search(r' \(internal\)', port):
                                 port = re.sub(r' \(internal\)', '', port)
                                 if port in self._iface_to_nss:
-                                    self.add_linkpair(
+                                    self._cu.add_linkpair(
                                         Device(br_src, Device.BR_TYPE),
                                         Device(self._iface_to_nss[
                                                port], Device.NAMESPACE_TYPE),
@@ -112,7 +116,7 @@ class OvsAgent(object):
                                         Port(""),
                                         self._formatter.NAMESPACE_FORMAT)
                                 else:
-                                    self.add_linkpair(
+                                    self._cu.add_linkpair(
                                         Device(br_src, Device.BR_TYPE),
                                         Device(
                                             "INTERNAL", Device.OS_ROUTE_TYPE),
@@ -120,6 +124,6 @@ class OvsAgent(object):
                                         Port(""))
                             else:
                                 ## Other OVSPort
-                                self._port_to_br[port] = br_src
+                                self._cu._port_to_br[port] = br_src
                         else:
                             continue
index 821f059..1578221 100755 (executable)
@@ -18,8 +18,10 @@ from linkpair.linkpair import LinkPair
 from linkpair.formatter.grapheasy import GraphEasyFormatter
 from linkpair.commonutils import CommonUtils
 from linkpair.dbutils import DBUtils
+from linkpair.collect.utils import CollectUtils
 from linkpair.collect.agent.commandrunner import CommandRunner
 from linkpair.collect.agent.namespace import NamespaceAgent
+from linkpair.collect.agent.ovs import OVSAgent
 
 
 class Collector(object):
@@ -35,6 +37,7 @@ class Collector(object):
         self._port_to_br = {}
         self._iface_to_nss = {}
         self._u = CommonUtils()
+        self._cu = None
         self._db_enable = False
         self._sql_conn = None
         self._remote_desc = remote_desc
@@ -53,26 +56,30 @@ class Collector(object):
         self._runner = CommandRunner(self._remote_desc)
         
     def run(self):
+        self._cu = CollectUtils(self._linkpairs, self._port_to_br, self._iface_to_nss, self._dbu, self._formatter)
         #self.map_port_to_namespace()
-        namespace_agent = NamespaceAgent(self._runner, self._iface_to_nss)
+        namespace_agent = NamespaceAgent(self._runner, self._cu, self._iface_to_nss)
         namespace_agent.run()
-        self.pick_ovs_configuration()
+        #self.pick_ovs_configuration()
+        ovs_agent = OVSAgent(self._runner, self._cu, self._linkpairs, self._port_to_br, self._iface_to_nss, self._formatter)
+        ovs_agent.run()
         self.pick_bridge_configuration()
         self.pick_libvirt_configuration()
-    
-    def add_linkpair(self, dev1, dev2, port1, port2, format=""):
-        if format == "":
-            format = self._formatter.DEFAULT_FORMAT
-        self._linkpairs.append(
-            LinkPair(dev1, dev2, port1, port2, format))
-#        if self._dbu.enable_db:
-#            insert_record(fmt, src, src_style, label, dst, dst_style)
-
+        
     def get_linkpairs(self):
         return self._linkpairs
-
-    def drop_linkpairs(self):
-        self._linkpairs = []
+            
+#     def add_linkpair(self, dev1, dev2, port1, port2, format=""):
+#         if format == "":
+#             format = self._formatter.DEFAULT_FORMAT
+#         self._linkpairs.append(
+#             LinkPair(dev1, dev2, port1, port2, format))
+##        if self._dbu.enable_db:
+##            insert_record(fmt, src, src_style, label, dst, dst_style)
+#
+# 
+#     def drop_linkpairs(self):
+#         self._linkpairs = []
 
     def pick_libvirt_configuration(self):
         virt_conn = self.get_libvirt_conn()
@@ -86,7 +93,7 @@ class Collector(object):
                 device = iface.getElementsByTagName(
                     "target")[0].getAttribute("dev")
                 bridge = self.regist_to_port2br(device, bridge)
-                self.add_linkpair(
+                self._cu.add_linkpair(
                     Device(str(vm.name()), Device.VM_TYPE),
                     Device(bridge, Device.BR_TYPE),
                     Port(device),
@@ -108,27 +115,27 @@ class Collector(object):
                 "source")[0].getAttribute("bridge")
         return [device, bridge]
 
-    def regist_to_port2br(self, device, bridge):
-        if device in self._port_to_br:
-            if bridge == "":
-                return self._port_to_br[device]
-            else:
-                return bridge
-        else:
-            self._port_to_br[device] = bridge
-            return bridge
+    def regist_to_port2br(self, device, bridge):
+        if device in self._port_to_br:
+            if bridge == "":
+                return self._port_to_br[device]
+            else:
+                return bridge
+        else:
+            self._port_to_br[device] = bridge
+            return bridge
 
-    def map_port_to_namespace(self):
-        result = self._runner.exec_cmd("ip netns")
-    # if result....
-        for ns in result:
-            ns = ns.rstrip()
-            result2 = self._runner.exec_cmd("ip netns exec " + ns + " ip link show")
-            for linkpair_out in result2:
-                linkpair_out = linkpair_out.rstrip()
-                match = re.match(r'\d+: (.*?): ', linkpair_out)
-                if match is not None and match.group(1) != 'lo':
-                    self._iface_to_nss[match.group(1).rstrip()] = ns
+    def map_port_to_namespace(self):
+        result = self._runner.exec_cmd("ip netns")
+    # if result....
+        for ns in result:
+            ns = ns.rstrip()
+            result2 = self._runner.exec_cmd("ip netns exec " + ns + " ip link show")
+            for linkpair_out in result2:
+                linkpair_out = linkpair_out.rstrip()
+                match = re.match(r'\d+: (.*?): ', linkpair_out)
+                if match is not None and match.group(1) != 'lo':
+                    self._iface_to_nss[match.group(1).rstrip()] = ns
 
     def pick_bridge_configuration(self):
         br_name = ""
@@ -145,7 +152,7 @@ class Collector(object):
                     if self._u.d_push(re.match(r'^qvb(.+)', port)):
                         quantum_idprefix = self._u.d_pop().group(1)
                         if "qvo" + quantum_idprefix in self._port_to_br:
-                            self.add_linkpair(
+                            self._cu.add_linkpair(
                                 Device(br_name, Device.BR_TYPE),
                                 Device(self._port_to_br[
                                        "qvo" + quantum_idprefix], Device.BR_TYPE),
@@ -153,7 +160,7 @@ class Collector(object):
                                 Port("qvo" + quantum_idprefix),
                                 self._formatter.VETH_FORMAT)
                     else:
-                        self.add_linkpair(
+                        self._cu.add_linkpair(
                             Device(br_name),
                             Device("INTERNAL", Device.OS_ROUTE_TYPE),
                             Port(port),
@@ -173,7 +180,7 @@ class Collector(object):
                     if self._u.d_push(re.match(r'^qvb(.+)', port)):
                         quantum_idprefix = self._u.d_pop().group(1)
                         if "qvo" + quantum_idprefix in self._port_to_br:
-                            self.add_linkpair(
+                            self._cu.add_linkpair(
                                 Device(br_name, Device.BR_TYPE),
                                 Device(self._port_to_br[
                                        "qvo" + quantum_idprefix], Device.BR_TYPE),
@@ -183,7 +190,7 @@ class Collector(object):
                     else:
                         if self._u.d_push(re.match(r'^qvo(.+)', port)):
                             continue
-                        self.add_linkpair(
+                        self._cu.add_linkpair(
                             Device(br_name),
                             Device("INTERNAL", Device.OS_ROUTE_TYPE),
                             Port(port),
@@ -213,14 +220,14 @@ class Collector(object):
                         "ovs-vsctl port-to-br " + patch_dst)
                     if result3 is not None and len(result3) > 0:
                         br_dst = result3[0].rstrip()
-                        self.add_linkpair(
+                        self._cu.add_linkpair(
                             Device(br_src, Device.BR_TYPE),
                             Device(br_dst, Device.BR_TYPE),
                             Port(patch_src),
                             Port(patch_dst),
                             self._formatter.PATCH_FORMAT)
                     else:
-                        self.add_linkpair(
+                        self._cu.add_linkpair(
                             Device(br_src, Device.BR_TYPE),
                             Device("NOT CONNECTED", Device.NOT_CONNECTED_TYPE),
                             Port(patch_src),
@@ -239,7 +246,7 @@ class Collector(object):
                                 or self._u.d_push(re.match(r'^em\d+$', port)) \
                                     or self._u.d_push(re.match(r'^igb\d+$', port)):
                                 self._port_to_br[port] = br_src
-                                self.add_linkpair(
+                                self._cu.add_linkpair(
                                     Device(br_src, Device.BR_TYPE),
                                     Device("Physical NW", Device.PHYNET_TYPE),
                                     Port(port),
@@ -249,7 +256,7 @@ class Collector(object):
                                     or self._u.d_push(re.match(r'(gre-\d+)', port)):
                                 port2 = self._u.d_pop().group(1)
                                 self._port_to_br[port2] = br_src
-                                self.add_linkpair(
+                                self._cu.add_linkpair(
                                     Device(br_src, Device.BR_TYPE),
                                     Device("OS Routing", Device.OS_ROUTE_TYPE),
                                     Port(port),
@@ -257,7 +264,7 @@ class Collector(object):
                             elif re.search(r' \(internal\)', port):
                                 port = re.sub(r' \(internal\)', '', port)
                                 if port in self._iface_to_nss:
-                                    self.add_linkpair(
+                                    self._cu.add_linkpair(
                                         Device(br_src, Device.BR_TYPE),
                                         Device(self._iface_to_nss[
                                                port], Device.NAMESPACE_TYPE),
@@ -265,7 +272,7 @@ class Collector(object):
                                         Port(""),
                                         self._formatter.NAMESPACE_FORMAT)
                                 else:
-                                    self.add_linkpair(
+                                    self._cu.add_linkpair(
                                         Device(br_src, Device.BR_TYPE),
                                         Device(
                                             "INTERNAL", Device.OS_ROUTE_TYPE),
diff --git a/linkpair/collect/utils.py b/linkpair/collect/utils.py
new file mode 100644 (file)
index 0000000..69d2141
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+
+__version__ = '1.1'
+
+import sys
+import os
+import re
+from socket import gethostname
+from linkpair.device import Device
+from linkpair.port import Port
+from linkpair.linkpair import LinkPair
+from linkpair.formatter.grapheasy import GraphEasyFormatter
+from linkpair.commonutils import CommonUtils
+from linkpair.dbutils import DBUtils
+from linkpair.collect.agent.commandrunner import CommandRunner
+
+
+class CollectUtils(object):
+    '''LinkpPair collector utility
+
+    This class 
+    '''
+
+    PEER_FOUND = 1
+
+    def __init__(self, linkpairs, port_to_br, iface_to_nss, dbu, formatter=GraphEasyFormatter()):
+        self._linkpairs = linkpairs
+        self._port_to_br = port_to_br
+        self._iface_to_nss = iface_to_nss
+        self._u = CommonUtils()
+        self._db_enable = False
+
+        ''' set parameters '''
+        self._dbu = dbu
+        self._formatter = formatter
+    
+    def add_linkpair(self, dev1, dev2, port1, port2, format=""):
+        if format == "":
+            format = self._formatter.DEFAULT_FORMAT
+        self._linkpairs.append(
+            LinkPair(dev1, dev2, port1, port2, format))
+#        if self._dbu.enable_db:
+#            insert_record(fmt, src, src_style, label, dst, dst_style)
+
+    def get_linkpairs(self):
+        return self._linkpairs
+
+    def drop_linkpairs(self):
+        self._linkpairs = []
+
+    def regist_to_port2br(self, device, bridge):
+        if device in self._port_to_br:
+            if bridge == "":
+                return self._port_to_br[device]
+            else:
+                return bridge
+        else:
+            self._port_to_br[device] = bridge
+            return bridge