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(
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)
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),
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),
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),
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),
Port(""))
else:
## Other OVSPort
- self._port_to_br[port] = br_src
+ self._cu._port_to_br[port] = br_src
else:
continue
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):
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
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()
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),
"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 = ""
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),
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),
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),
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),
"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),
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),
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),
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),
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),
--- /dev/null
+#!/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