integrate model operations 25/71225/3
authorSam Hague <shague@redhat.com>
Mon, 23 Apr 2018 16:07:36 +0000 (12:07 -0400)
committerSam Hague <shague@redhat.com>
Wed, 25 Apr 2018 16:49:57 +0000 (16:49 +0000)
Change-Id: Ie1dc0946bbe906549a0ea71e59adec69cd2171f8
Signed-off-by: Sam Hague <shague@redhat.com>
27 files changed:
resources/tools/odltools/csit/robotfiles.py
resources/tools/odltools/mdsal/elan.py [new file with mode: 0644]
resources/tools/odltools/mdsal/id_manager.py [new file with mode: 0644]
resources/tools/odltools/mdsal/ietf_interfaces.py [new file with mode: 0644]
resources/tools/odltools/mdsal/interface_service_bindings.py [new file with mode: 0644]
resources/tools/odltools/mdsal/itm_state.py
resources/tools/odltools/mdsal/l3vpn.py [new file with mode: 0644]
resources/tools/odltools/mdsal/mip.py [new file with mode: 0644]
resources/tools/odltools/mdsal/model.py [new file with mode: 0644]
resources/tools/odltools/mdsal/models.py
resources/tools/odltools/mdsal/network_topology.py [new file with mode: 0644]
resources/tools/odltools/mdsal/neutron.py [new file with mode: 0644]
resources/tools/odltools/mdsal/odl_fib.py [new file with mode: 0644]
resources/tools/odltools/mdsal/odl_interface_meta.py [new file with mode: 0644]
resources/tools/odltools/mdsal/odl_l3vpn.py [new file with mode: 0644]
resources/tools/odltools/mdsal/opendaylight_inventory.py [new file with mode: 0644]
resources/tools/odltools/mdsal/request.py
resources/tools/odltools/mdsal/tests/resources/config_ietf-interfaces:interfaces.json [new file with mode: 0644]
resources/tools/odltools/mdsal/tests/resources/config_itm-state:dpn-endpoints.json [moved from resources/tools/odltools/mdsal/tests/resources/itm-state_dpn-endpoints.json with 100% similarity]
resources/tools/odltools/mdsal/tests/resources/config_network-topology:network-topology_topology_ovsdb:1.json [new file with mode: 0644]
resources/tools/odltools/mdsal/tests/test_ietf_interfaces.py [new file with mode: 0644]
resources/tools/odltools/mdsal/tests/test_itm_state.py
resources/tools/odltools/mdsal/tests/test_network_topology.py [new file with mode: 0644]
resources/tools/odltools/mdsal/tests/test_request.py
resources/tools/odltools/netvirt/ds_analyze.py
resources/tools/odltools/netvirt/ds_get_data.py [deleted file]
resources/tools/odltools/ovs/request.py

index 791e2e7b7072b010d5b692fe06acbf62b8497fca..9f84e1832889c4beeed7333d340935df2b441beb 100644 (file)
@@ -216,8 +216,8 @@ class RobotFiles:
                 self.process_element(state, event, element)
                 element.clear()
                 # debugging code to stop after the named test case is processed
-                if "s1-t1" in self.pdata:
-                    break
+                if "s1-t1" in self.pdata:
+                #    break
             root.clear()
 
     def write_pdata(self):
diff --git a/resources/tools/odltools/mdsal/elan.py b/resources/tools/odltools/mdsal/elan.py
new file mode 100644 (file)
index 0000000..e0343b7
--- /dev/null
@@ -0,0 +1,42 @@
+from model import Model
+
+
+NAME = "elan"
+
+
+def elan_instances(store, ip=None, port=None, path=None):
+    return ElanInstances(NAME, ElanInstances.CONTAINER, store, ip, port, path)
+
+
+def elan_interfaces(store, ip=None, port=None, path=None):
+    return ElanInstances(NAME, ElanInstances.CONTAINER, store, ip, port, path)
+
+
+class ElanInstances(Model):
+    CONTAINER = "elan-instances"
+    ELAN_INSTANCE = "elan-instance"
+
+    def get_elan_instances(self):
+        return self.data[self.CONTAINER][self.ELAN_INSTANCE]
+
+    def get_elan_instances_by_key(self, key="elan-instance-name"):
+        d = {}
+        instances = self.get_elan_instances()
+        for instance in instances:
+            d[instance[key]] = instance
+        return d
+
+
+class ElanInterfaces(Model):
+    CONTAINER = "elan-interfaces"
+    ELAN_INSTANCE = "elan-instance"
+
+    def get_elan_interfaces(self):
+        return self.data[self.CONTAINER][self.ELAN_INSTANCE]
+
+    def get_elan_interfaces_by_key(self, key="name"):
+        d = {}
+        ifaces = self.get_elan_ifaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
diff --git a/resources/tools/odltools/mdsal/id_manager.py b/resources/tools/odltools/mdsal/id_manager.py
new file mode 100644 (file)
index 0000000..8eb3c39
--- /dev/null
@@ -0,0 +1,23 @@
+from model import Model
+
+
+NAME = "id-manager"
+
+
+def id_pools(store, ip=None, port=None, path=None):
+    return IdPools(NAME, IdPools.CONTAINER, store, ip, port, path)
+
+
+class IdPools(Model):
+    CONTAINER = "id-pools"
+    ID_POOL = "id-pool"
+
+    def get_id_pools(self):
+        return self.data[self.CONTAINER][self.ID_POOL]
+
+    def get_id_pools_by_key(self, key="pool-name"):
+        d = {}
+        idpools = self.get_id_pools()
+        for idpool in idpools:
+            d[idpool[key]] = idpool
+        return d
diff --git a/resources/tools/odltools/mdsal/ietf_interfaces.py b/resources/tools/odltools/mdsal/ietf_interfaces.py
new file mode 100644 (file)
index 0000000..f6b08d0
--- /dev/null
@@ -0,0 +1,59 @@
+from model import Model
+
+
+NAME = "ietf-interfaces"
+
+
+def interfaces(store, ip=None, port=None, path=None):
+    return Interfaces(NAME, Interfaces.CONTAINER, store, ip, port, path)
+
+
+def interfaces_state(store, ip=None, port=None, path=None):
+    return Interfaces(NAME, InterfacesState.CONTAINER, store, ip, port, path)
+
+
+class Interfaces(Model):
+    CONTAINER = "interfaces"
+    INTERFACE = "interface"
+
+    def get_interfaces(self):
+        return self.data[self.CONTAINER][self.INTERFACE]
+
+    def get_interfaces_by_key(self, key="name"):
+        d = {}
+        ifaces = self.get_interfaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
+
+
+class InterfacesState(Model):
+    ROOT = NAME
+    CONTAINER = "interfaces-state"
+    INTERFACE = "interface"
+
+    def get_interfaces(self):
+        return self.data[self.CONTAINER][self.INTERFACE]
+
+    def get_interfaces_by_key(self, key="name"):
+        d = {}
+        ifaces = self.get_interfaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
+
+
+class InterfacesState(Model):
+    ROOT = NAME
+    CONTAINER = "interfaces-state"
+    INTERFACE = "interface"
+
+    def get_interfaces(self):
+        return self.data[self.CONTAINER][self.INTERFACE]
+
+    def get_interfaces_by_key(self, key="name"):
+        d = {}
+        ifaces = self.get_interfaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
diff --git a/resources/tools/odltools/mdsal/interface_service_bindings.py b/resources/tools/odltools/mdsal/interface_service_bindings.py
new file mode 100644 (file)
index 0000000..c2b1478
--- /dev/null
@@ -0,0 +1,29 @@
+import collections
+from model import Model
+
+
+NAME = "interface-service-bindings"
+
+
+def service_bindings(store, ip=None, port=None, path=None):
+    return ServiceBindings(NAME, ServiceBindings.CONTAINER, store, ip, port, path)
+
+
+class ServiceBindings(Model):
+    CONTAINER = "service-bindings"
+    SERVICES_INFO = "services-info"
+
+    def get_services_infos(self):
+        return self.data[self.CONTAINER][self.SERVICES_INFO]
+
+    def get_service_bindings(self):
+        sb_dict = collections.defaultdict(dict)
+        orphans_dict = collections.defaultdict(dict)
+        sb_infos = self.get_services_infos()
+        for sb_info in sb_infos:
+            service_mode = sb_info['service-mode'][len('interface-service-bindings:'):]
+            if sb_info.get('bound-services'):
+                sb_dict[sb_info['interface-name']][service_mode] = sb_info
+            else:
+                orphans_dict[sb_info['interface-name']][service_mode] = sb_info
+        return dict(sb_dict), dict(orphans_dict)
index db83ca93d18af5624b1a4989a5f7fc5bdda99d2b..3ee9cdccfc02b97a6cdba757a37c6efa5b8dcafe 100644 (file)
@@ -1,9 +1,21 @@
-from models import Model
+from model import Model
 
 
 NAME = "itm-state"
 
 
+def dpn_endpoints(store, ip, port, path):
+    return DpnEndpoints(NAME, DpnEndpoints.CONTAINER, store, ip, port, path)
+
+
+def interfaces(store, ip=None, port=None, path=None):
+    return DpnTepsState(NAME, DpnTepsState.CONTAINER, store, ip, port, path)
+
+
+def tunnels_state(store, ip=None, port=None, path=None):
+    return TunnelsState(NAME, TunnelsState.CONTAINER, store, ip, port, path)
+
+
 class DpnEndpoints(Model):
     CONTAINER = "dpn-endpoints"
     DPN_TEPS_INFO = "DPN-TEPs-info"
@@ -11,20 +23,6 @@ class DpnEndpoints(Model):
     TUNNEL_END_POINTS = "tunnel-end-points"
     IP_ADDRESS = "ip-address"
 
-    # not currently used, backup method to get_kv
-    def item_generator(self, json_input, lookup_key):
-        if isinstance(json_input, dict):
-            for k, v in json_input.iteritems():
-                if k == lookup_key:
-                    yield v
-                else:
-                    for child_val in self.item_generator(v, lookup_key):
-                        yield child_val
-        elif isinstance(json_input, list):
-            for item in json_input:
-                for item_val in self.item_generator(item, lookup_key):
-                    yield item_val
-
     def get_dpn_teps_infos(self):
         return self.data[self.CONTAINER][self.DPN_TEPS_INFO]
 
@@ -48,5 +46,32 @@ class DpnEndpoints(Model):
         return tunnel_endpoints[0][self.IP_ADDRESS]
 
 
-def dpn_endpoints(store, ip, port):
-    return DpnEndpoints(NAME, DpnEndpoints.CONTAINER, store, ip, port)
+class DpnTepsState(Model):
+    CONTAINER = "dpn-teps-state"
+    DPN_TEPS = "dpns-teps"
+
+    def get_dpn_teps(self):
+        return self.data[self.CONTAINER][self.DPN_TEPS]
+
+    def get_tuninterfaces_by_name(self):
+        d = {}
+        tunifaces = self.get_dpn_teps()
+        for sourcedpn in tunifaces:
+            for remotedpn in sourcedpn['remote-dpns']:
+                d[remotedpn['tunnel-name']] = remotedpn
+        return d
+
+
+class TunnelsState(Model):
+    CONTAINER = "tunnels_state"
+    STATE_TUNNEL_LIST = "state-tunnel-list"
+
+    def get_state_tunnel_list(self):
+        return self.data[self.CONTAINER][self.STATE_TUNNEL_LIST]
+
+    def get_tunnels_by_key(self, key="tunnel-interface-name"):
+        d = {}
+        tunnels = self.get_state_tunnel_list()
+        for tunnel in tunnels:
+            d[tunnel[key]] = tunnel
+        return d
diff --git a/resources/tools/odltools/mdsal/l3vpn.py b/resources/tools/odltools/mdsal/l3vpn.py
new file mode 100644 (file)
index 0000000..afdc262
--- /dev/null
@@ -0,0 +1,23 @@
+from model import Model
+
+
+NAME = "l3vpn"
+
+
+def vpn_instance_to_vpn_id(store, ip=None, port=None, path=None):
+    return VpnInterfaces(NAME, VpnInterfaces.CONTAINER, store, ip, port, path)
+
+
+class VpnInterfaces(Model):
+    CONTAINER = "vpn-interfaces"
+    VPN_INTERFACE = "vpn-interface"
+
+    def get_vpn_interfaces(self):
+        return self.data[self.CONTAINER][self.VPN_INTERFACE]
+
+    def get_vpn_ids_by_key(self, key="name"):
+        d = {}
+        ifaces = self.get_vpn_interfaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
diff --git a/resources/tools/odltools/mdsal/mip.py b/resources/tools/odltools/mdsal/mip.py
new file mode 100644 (file)
index 0000000..adccea1
--- /dev/null
@@ -0,0 +1,24 @@
+from model import Model
+
+
+NAME = "mip"
+
+
+def mac(store, ip=None, port=None, path=None):
+    return Mac(NAME, Mac.CONTAINER, store, ip, port, path)
+
+
+class Mac(Model):
+    CONTAINER = "mac"
+    ENTRY = "entry"
+
+    def get_entries(self):
+        return self.data[self.CONTAINER][self.ENTRY]
+
+    def get_entries_by_key(self, key="name"):
+        d = {}
+        entries = self.get_entries()
+        for entry in entries:
+            entry['mac'] = entry['mac'].lower()
+        d[entry.get('mac')][entry.get('network-id')] = entry
+        return d
diff --git a/resources/tools/odltools/mdsal/model.py b/resources/tools/odltools/mdsal/model.py
new file mode 100644 (file)
index 0000000..562211b
--- /dev/null
@@ -0,0 +1,82 @@
+import json
+import request
+
+
+class Model:
+    CONFIG = "config"
+    OPERATIONAL = "operational"
+    USER = "admin"
+    PW = "admin"
+
+    def __init__(self, name, container, store, ip=None, port=None, path="/tmp", mid=None):
+        self.name = name
+        self.container = container
+        self.store = store
+        self.ip = ip
+        self.port = port
+        self.url = self.make_url()
+        self.path = path
+        self.filename = self.make_filename()
+        if mid is not None:
+            self.url = self.make_url_type(mid)
+            self.filename = self.make_filename_type(mid)
+        self.data = None
+        self.data = self.get_model_data()
+
+    def make_filename(self):
+        return "{}/{}_{}:{}.json".format(self.path, self.store, self.name, self.container)
+
+    def make_filename_type(self, mid):
+        return "{}/{}_{}:{}_topology_{}.json".format(self.path, self.store, self.name, self.container, mid)
+
+    def make_url(self):
+        return "http://{}:{}/restconf/{}/{}:{}".format(self.ip, self.port, self.store,
+                                                       self.name, self.container)
+
+    def make_url_type(self, mid):
+        return "http://{}:{}/restconf/{}/{}:{}/topology/{}".format(self.ip, self.port, self.store,
+                                                                   self.name, self.container, mid)
+
+    def get_from_odl(self):
+        return request.get(self.url, self.USER, self.PW)
+
+    def read_file(self, filename):
+        return request.read_file(filename)
+
+    def get_model_data(self):
+        if self.data is not None:
+            return self.data
+
+        self.data = self.read_file(self.filename)
+        if self.data is not None:
+            return self.data
+
+        self.data = self.get_from_odl()
+        if self.data is not None:
+            request.write_file(self.filename, self.data)
+            return self.data
+
+    def pretty_format(self, data=None):
+        if data is None:
+            data = self.data
+        return json.dumps(data, indent=4, separators=(',', ': '))
+
+    def get_kv(self, k, v, values):
+        """
+        Return a list of values for the given key
+        :param k:
+        :param v:
+        :param values:
+        :return:
+        """
+        if type(v) is dict:
+            for jsonkey in v:
+                if jsonkey == k:
+                    values.append(v[jsonkey])
+                elif type(v[jsonkey]) in (list, dict):
+                    self.get_kv(k, v[jsonkey], values)
+        elif type(v) is list:
+            for item in v:
+                if type(item) in (list, dict):
+                    self.get_kv(k, item, values)
+        return values
index d96bd2b6fe6fdba6fc49398534c11e8420b98e81..9320067ead6d4ff3ba7a27c1abce25e6f8172148 100644 (file)
@@ -1,60 +1,73 @@
-import json
-import request
+from mdsal.model import Model
+from mdsal import elan
+from mdsal import id_manager
+from mdsal import ietf_interfaces
+from mdsal import interface_service_bindings
+from mdsal import itm_state
+from mdsal import l3vpn
+from mdsal import mip
+from mdsal import network_topology
+from mdsal import neutron
+from mdsal import odl_fib
+from mdsal import odl_interface_meta
+from mdsal import odl_l3vpn
+from mdsal import opendaylight_inventory
 
 
-class Model:
-    CONFIG = "config"
-    OPERATIONAL = "operational"
-    USER = "admin"
-    PW = "admin"
+modelpath = "/tmp/robotjob/s1-t1_Create_VLAN_Network_net_1/models"
+elan_elan_instances = None
+elan_elan_interfaces = None
+id_manager_id_pools = None
+ietf_interfaces_interfaces = None
+ietf_interfaces_interfaces_state = None
+interface_service_bindings_service_bindings = None
+itm_state_tunnels_state = None
+l3vpn_vpn_interfaces = None
+mip_mac = None
+network_topology_network_topology_config = None
+network_topology_network_topology_operational = None
+neutron_neutron = None
+odl_fib_fib_entries = None
+odl_interface_meta_if_index_interface_map = None
+odl_inventory_nodes_config = None
+odl_inventory_nodes_operational = None
+odl_l3vpn_vpn_instance_to_vpn_id = None
 
-    def __init__(self, name, container, store, ip, port):
-        self.name = name
-        self.CONTAINER = container
-        self.store = store
-        self.ip = ip
-        self.port = port
-        self.data = None
-        self.url = self.make_url()
 
-    def set_odl_address(self, ip, port):
-        self.ip = ip
-        self.port = port
+def get_all_dumps():
+    global elan_elan_instances
+    global elan_elan_interfaces
+    global id_manager_id_pools
+    global ietf_interfaces_interfaces
+    global ietf_interfaces_interfaces_state
+    global interface_service_bindings_service_bindings
+    global itm_state_tunnels_state
+    global l3vpn_vpn_interfaces
+    global mip_mac
+    global network_topology_network_topology_config
+    global network_topology_network_topology_operational
+    global neutron_neutron
+    global odl_fib_fib_entries
+    global odl_interface_meta_if_index_interface_map
+    global odl_inventory_nodes_config
+    global odl_inventory_nodes_operational
+    global odl_l3vpn_vpn_instance_to_vpn_id
 
-    def make_url(self):
-        url = "http://{}:{}/restconf/{}/{}:{}".format(self.ip, self.port, self.store,
-                                                      self.name, self.CONTAINER)
-        return url
-
-    def get_from_odl(self):
-        self.data = request.get(self.url, self.USER, self.PW)
-        return self.data
-
-    def read_file(self, filename):
-        self.data = request.read_file(filename)
-        return self.data
-
-    def pretty_format(self, data=None):
-        if data is None:
-            data = self.data
-        return json.dumps(data, indent=4, separators=(',', ': '))
-
-    def get_kv(self, k, v, values):
-        """
-        Return a list of values for the given key
-        :param k:
-        :param v:
-        :param values:
-        :return:
-        """
-        if type(v) is dict:
-            for jsonkey in v:
-                if jsonkey == k:
-                    values.append(v[jsonkey])
-                elif type(v[jsonkey]) in (list, dict):
-                    self.get_kv(k, v[jsonkey], values)
-        elif type(v) is list:
-            for item in v:
-                if type(item) in (list, dict):
-                    self.get_kv(k, item, values)
-        return values
+    elan_elan_instances = elan.elan_instances(Model.CONFIG, modelpath)
+    elan_elan_interfaces = elan.elan_interfaces(Model.CONFIG, modelpath)
+    id_manager_id_pools = id_manager.id_pools(Model.CONFIG, modelpath)
+    ietf_interfaces_interfaces = ietf_interfaces.interfaces(Model.CONFIG, modelpath)
+    ietf_interfaces_interfaces_state = ietf_interfaces.interfaces_state(Model.OPERATIONAL, modelpath)
+    interface_service_bindings_service_bindings = interface_service_bindings.service_bindings(Model.CONFIG, modelpath)
+    itm_state_tunnels_state = itm_state.tunnels_state(Model.OPERATIONAL, modelpath)
+    l3vpn_vpn_interfaces = l3vpn.vpn_instance_to_vpn_id(Model.CONFIG, modelpath)
+    mip_mac = mip.mac(Model.CONFIG, modelpath)
+    neutron_neutron = neutron.neutron(Model.CONFIG, modelpath)
+    network_topology_network_topology_config = network_topology.network_topology(Model.CONFIG, modelpath)
+    network_topology_network_topology_operational = network_topology.network_topology(Model.CONFIG, modelpath)
+    neutron_neutron = neutron.neutron(Model.CONFIG, modelpath)
+    odl_fib_fib_entries = odl_fib.fib_entries(Model.CONFIG, modelpath)
+    odl_interface_meta_if_index_interface_map = odl_interface_meta.if_indexes_interface_map(Model.OPERATIONAL, modelpath)
+    odl_inventory_nodes_config = opendaylight_inventory.nodes(Model.CONFIG, modelpath)
+    odl_inventory_nodes_operational = opendaylight_inventory.nodes(Model.OPERATIONAL, modelpath)
+    odl_l3vpn_vpn_instance_to_vpn_id = odl_l3vpn.vpn_instance_to_vpn_id(Model.CONFIG, modelpath)
diff --git a/resources/tools/odltools/mdsal/network_topology.py b/resources/tools/odltools/mdsal/network_topology.py
new file mode 100644 (file)
index 0000000..0da5bd9
--- /dev/null
@@ -0,0 +1,36 @@
+from model import Model
+
+
+NAME = "network-topology"
+
+
+def network_topology(store, ip=None, port=None, path=None, mid="ovsdb:1"):
+    return NetworkTopology(NAME, NetworkTopology.CONTAINER, store, ip, port, path, mid)
+
+
+class NetworkTopology(Model):
+    # TODO: class currently assumes the ovsdb:1 has been used so need to fix that to take a topology-id
+    CONTAINER = "network-topology"
+    TOPOLOGY = "topology"
+    NODE = "node"
+    OVSDB1 = "ovsdb:1"
+
+    def get_topologies(self):
+        return self.data[self.TOPOLOGY]
+
+    def get_topology_by_tid(self, tid="ovsdb:1"):
+        topologies = self.get_topologies()
+        for topology in topologies:
+            if topology['topology-id'] == tid:
+                return topology
+
+    def get_nodes_by_tid(self, tid="ovsdb:1"):
+        topology = self.get_topology_by_tid(tid)
+        return topology[self.NODE]
+
+    def get_nodes_by_tid_and_key(self, tid="ovsdb:1", key='node-id'):
+        nodes = self.get_nodes_by_tid_and_key(tid, key)
+        d = {}
+        for node in nodes:
+            d[node[key]] = node
+        return d
diff --git a/resources/tools/odltools/mdsal/neutron.py b/resources/tools/odltools/mdsal/neutron.py
new file mode 100644 (file)
index 0000000..883925b
--- /dev/null
@@ -0,0 +1,42 @@
+from model import Model
+
+
+NAME = "neutron"
+
+
+def neutron(store, ip=None, port=None, path=None):
+    return Neutron(NAME, Neutron.CONTAINER, store, ip, port, path)
+
+
+class Neutron(Model):
+    CONTAINER = "neutron"
+    NETWORKS = "networks"
+    NETWORK = "network"
+    PORTS = "ports"
+    PORT = "port"
+    ROUTERS = "routers"
+    ROUTER = "router"
+    TRUNKS = "trunks"
+    TRUNK = "trunk"
+    NAME = "name"
+    UUID = "uuid"
+
+    def get_ports(self):
+        return self.data[self.CONTAINER][self.PORTS][self.PORT]
+
+    def get_ports_by_key(self, key="uuid"):
+        d = {}
+        ports = self.get_ports()
+        for port in ports:
+            d[port[key]] = port
+        return d
+
+    def get_trunks(self):
+        return self.data[self.CONTAINER][self.TRUNKS][self.TRUNK]
+
+    def get_trunks_by_key(self, key="uuid"):
+        d = {}
+        trunks = self.get_trunks()
+        for trunk in trunks:
+            d[trunk[key]] = trunk
+        return d
diff --git a/resources/tools/odltools/mdsal/odl_fib.py b/resources/tools/odltools/mdsal/odl_fib.py
new file mode 100644 (file)
index 0000000..2643893
--- /dev/null
@@ -0,0 +1,29 @@
+from model import Model
+
+
+NAME = "odl-fib"
+
+
+def fib_entries(store, ip=None, port=None, path=None):
+    return FibEntries(NAME, FibEntries.CONTAINER, store, ip, port, path)
+
+
+class FibEntries(Model):
+    CONTAINER = "fibEntries"
+    VRFTABLES = "vrfTables"
+    VRFENTRY = "vrfEntry"
+    ROUTEDISTINGUISHER = "routeDistinguisher"
+    RD = "rd"
+
+    def get_vrf_tables(self):
+        return self.data[self.CONTAINER][self.VRFTABLES]
+
+    def get_vrf_entries_by_key(self, key="label"):
+        d = {}
+        vrf_tables = self.get_vrf_tables()
+        for vrf_table in vrf_tables:
+            for vrf_entry in vrf_table.get(self.VRFENTRY, []):
+                if vrf_entry.get('label'):
+                    vrf_entry[self.RD] = vrf_table[self.ROUTEDISTINGUISHER]
+                    d[vrf_entry[key]] = vrf_entry
+        return d
diff --git a/resources/tools/odltools/mdsal/odl_interface_meta.py b/resources/tools/odltools/mdsal/odl_interface_meta.py
new file mode 100644 (file)
index 0000000..db4440e
--- /dev/null
@@ -0,0 +1,38 @@
+from model import Model
+
+
+NAME = "odl-interface-meta"
+
+
+def if_indexes_interface_map(store, ip=None, port=None, path=None):
+    return IfIndexesInterfaceMap(NAME, IfIndexesInterfaceMap.CONTAINER, store, ip, port, path)
+
+
+class IfIndexesInterfaceMap(Model):
+    CONTAINER = "if-indexes-interface-map"
+    IF_INDEX_INTERFACE = "if-index-interface"
+
+    def get_if_index_interfaces(self):
+        return self.data[self.CONTAINER][self.IF_INDEX_INTERFACE]
+
+    def get_if_index_interfaces_by_key(self, key="if-index"):
+        d = {}
+        ifaces = self.get_if_index_interfaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
+
+
+class ElanInterfaces(Model):
+    CONTAINER = "elan-interfaces"
+    ELAN_INSTANCE = "elan-instance"
+
+    def get_elan_interfaces(self):
+        return self.data[self.CONTAINER][self.ELAN_INSTANCE]
+
+    def get_elan_interfaces_by_key(self, key="name"):
+        d = {}
+        ifaces = self.get_elan_ifaces()
+        for iface in ifaces:
+            d[iface[key]] = iface
+        return d
diff --git a/resources/tools/odltools/mdsal/odl_l3vpn.py b/resources/tools/odltools/mdsal/odl_l3vpn.py
new file mode 100644 (file)
index 0000000..5d3932a
--- /dev/null
@@ -0,0 +1,42 @@
+from model import Model
+
+
+NAME = "odl-l3vpn"
+
+
+def vpn_id_to_vpn_instance(store, ip=None, port=None, path=None):
+    return VpnIdToVpnInstance(NAME, VpnIdToVpnInstance.CONTAINER, store, ip, port, path)
+
+
+def vpn_instance_to_vpn_id(store, ip=None, port=None, path=None):
+    return VpnInstanceToVpnId(NAME, VpnInstanceToVpnId.CONTAINER, store, ip, port, path)
+
+
+class VpnIdToVpnInstance(Model):
+    CONTAINER = "vpn-id-to-vpn-instance"
+    VPN_IDS = "vpn-ids"
+
+    def get_vpn_ids(self):
+        return self.data[self.CONTAINER][self.VPN_IDS]
+
+    def get_vpn_ids_by_key(self, key="vpn-id"):
+        d = {}
+        vpnids = self.get_vpn_ids()
+        for vpnid in vpnids:
+            d[vpnid[key]] = vpnid
+        return d
+
+
+class VpnInstanceToVpnId(Model):
+    CONTAINER = "vpn-instance-to-vpn-id"
+    VPN_INSTANCE = "vpn-instance"
+
+    def get_vpn_instances(self):
+        return self.data[self.CONTAINER][self.VPN_INSTANCE]
+
+    def get_vpn_instances_by_key(self, key="vpn-id"):
+        d = {}
+        instances = self.get_vpn_instances()
+        for instance in instances:
+            d[instance[key]] = instance
+        return d
diff --git a/resources/tools/odltools/mdsal/opendaylight_inventory.py b/resources/tools/odltools/mdsal/opendaylight_inventory.py
new file mode 100644 (file)
index 0000000..3d243ab
--- /dev/null
@@ -0,0 +1,23 @@
+from model import Model
+
+
+NAME = "opendaylight-inventory"
+
+
+def nodes(store, ip=None, port=None, path=None):
+    return Nodes(NAME, Nodes.CONTAINER, store, ip, port, path)
+
+
+class Nodes(Model):
+    CONTAINER = "nodes"
+    NODE = "node"
+
+    def get_nodes(self):
+        return self.data[self.CONTAINER][self.NODE]
+
+    def get_nodes_by_key(self, key="id"):
+        d = {}
+        nodez = self.get_nodes()
+        for node in nodez:
+            d[node[key]] = node
+        return d
index 423dccfa608ca99defaae614dd1b148e912e968c..28e1e0ef3b50511ce2eb6b73383135f0f0abd43b 100644 (file)
@@ -7,7 +7,7 @@ logger = logging.getLogger("mdsal.request")
 
 
 def debug_print(text1, data):
-    logger.info("request: %s: processed %d lines", text1, len(data))
+    logger.debug("request: %s: processed %d lines", text1, len(data))
     logger.debug("request: %s", text1)
     logger.debug("%s", json.dumps(data))
     logger.debug("%s", json.dumps(data, indent=4, separators=(',', ': ')))
@@ -26,3 +26,9 @@ def read_file(filename):
         data = json.load(json_file)
     debug_print(filename, data)
     return data
+
+
+def write_file(filename, data):
+    with open(filename, 'w') as fp:
+        json.dump(data, fp)
+    logger.debug("write_file: File: %s", filename)
diff --git a/resources/tools/odltools/mdsal/tests/resources/config_ietf-interfaces:interfaces.json b/resources/tools/odltools/mdsal/tests/resources/config_ietf-interfaces:interfaces.json
new file mode 100644 (file)
index 0000000..950d4f8
--- /dev/null
@@ -0,0 +1,102 @@
+{
+  "interfaces": {
+    "interface": [
+      {
+        "description": "VXLAN Trunk Interface",
+        "enabled": true,
+        "name": "tun95fee4d7132",
+        "odl-interface:datapath-node-identifier": 132319289050514,
+        "odl-interface:internal": true,
+        "odl-interface:monitor-enabled": true,
+        "odl-interface:monitor-interval": 10000,
+        "odl-interface:monitor-protocol": "odl-interface:tunnel-monitoring-type-bfd",
+        "odl-interface:tunnel-destination": "10.30.170.90",
+        "odl-interface:tunnel-gateway": "0.0.0.0",
+        "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-vxlan",
+        "odl-interface:tunnel-remote-ip-flow": false,
+        "odl-interface:tunnel-source": "10.30.170.17",
+        "type": "iana-if-type:tunnel"
+      },
+      {
+        "description": "VXLAN Trunk Interface",
+        "enabled": true,
+        "name": "tundb1d8b295c1",
+        "odl-interface:datapath-node-identifier": 234018835196237,
+        "odl-interface:internal": true,
+        "odl-interface:monitor-enabled": true,
+        "odl-interface:monitor-interval": 10000,
+        "odl-interface:monitor-protocol": "odl-interface:tunnel-monitoring-type-bfd",
+        "odl-interface:tunnel-destination": "10.30.170.17",
+        "odl-interface:tunnel-gateway": "0.0.0.0",
+        "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-vxlan",
+        "odl-interface:tunnel-remote-ip-flow": false,
+        "odl-interface:tunnel-source": "10.30.170.92",
+        "type": "iana-if-type:tunnel"
+      },
+      {
+        "description": "VXLAN Trunk Interface",
+        "enabled": true,
+        "name": "tun94ecbe1efd8",
+        "odl-interface:datapath-node-identifier": 132319289050514,
+        "odl-interface:internal": true,
+        "odl-interface:monitor-enabled": true,
+        "odl-interface:monitor-interval": 10000,
+        "odl-interface:monitor-protocol": "odl-interface:tunnel-monitoring-type-bfd",
+        "odl-interface:tunnel-destination": "10.30.170.92",
+        "odl-interface:tunnel-gateway": "0.0.0.0",
+        "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-vxlan",
+        "odl-interface:tunnel-remote-ip-flow": false,
+        "odl-interface:tunnel-source": "10.30.170.17",
+        "type": "iana-if-type:tunnel"
+      },
+      {
+        "description": "VXLAN Trunk Interface",
+        "enabled": true,
+        "name": "tunf68aef23130",
+        "odl-interface:datapath-node-identifier": 74851789353527,
+        "odl-interface:internal": true,
+        "odl-interface:monitor-enabled": true,
+        "odl-interface:monitor-interval": 10000,
+        "odl-interface:monitor-protocol": "odl-interface:tunnel-monitoring-type-bfd",
+        "odl-interface:tunnel-destination": "10.30.170.92",
+        "odl-interface:tunnel-gateway": "0.0.0.0",
+        "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-vxlan",
+        "odl-interface:tunnel-remote-ip-flow": false,
+        "odl-interface:tunnel-source": "10.30.170.90",
+        "type": "iana-if-type:tunnel"
+      },
+      {
+        "description": "VXLAN Trunk Interface",
+        "enabled": true,
+        "name": "tun999632b8289",
+        "odl-interface:datapath-node-identifier": 234018835196237,
+        "odl-interface:internal": true,
+        "odl-interface:monitor-enabled": true,
+        "odl-interface:monitor-interval": 10000,
+        "odl-interface:monitor-protocol": "odl-interface:tunnel-monitoring-type-bfd",
+        "odl-interface:tunnel-destination": "10.30.170.90",
+        "odl-interface:tunnel-gateway": "0.0.0.0",
+        "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-vxlan",
+        "odl-interface:tunnel-remote-ip-flow": false,
+        "odl-interface:tunnel-source": "10.30.170.92",
+        "type": "iana-if-type:tunnel"
+      },
+      {
+        "description": "VXLAN Trunk Interface",
+        "enabled": true,
+        "name": "tun03a2b920986",
+        "odl-interface:datapath-node-identifier": 74851789353527,
+        "odl-interface:internal": true,
+        "odl-interface:monitor-enabled": true,
+        "odl-interface:monitor-interval": 10000,
+        "odl-interface:monitor-protocol": "odl-interface:tunnel-monitoring-type-bfd",
+        "odl-interface:tunnel-destination": "10.30.170.17",
+        "odl-interface:tunnel-gateway": "0.0.0.0",
+        "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-vxlan",
+        "odl-interface:tunnel-remote-ip-flow": false,
+        "odl-interface:tunnel-source": "10.30.170.90",
+        "type": "iana-if-type:tunnel"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/resources/tools/odltools/mdsal/tests/resources/config_network-topology:network-topology_topology_ovsdb:1.json b/resources/tools/odltools/mdsal/tests/resources/config_network-topology:network-topology_topology_ovsdb:1.json
new file mode 100644 (file)
index 0000000..0bcf515
--- /dev/null
@@ -0,0 +1,372 @@
+{
+  "topology": [
+    {
+      "node": [
+        {
+          "node-id": "ovsdb://uuid/8eabb815-5570-42fc-9635-89c880ebc4ac/bridge/br-int",
+          "ovsdb:bridge-name": "br-int",
+          "ovsdb:bridge-other-configs": [
+            {
+              "bridge-other-config-key": "hwaddr",
+              "bridge-other-config-value": "44:13:ca:50:b2:37"
+            },
+            {
+              "bridge-other-config-key": "disable-in-band",
+              "bridge-other-config-value": "true"
+            }
+          ],
+          "ovsdb:controller-entry": [
+            {
+              "target": "tcp:10.30.170.5:6653"
+            }
+          ],
+          "ovsdb:fail-mode": "ovsdb:ovsdb-fail-mode-secure",
+          "ovsdb:managed-by": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='ovsdb://uuid/8eabb815-5570-42fc-9635-89c880ebc4ac']",
+          "ovsdb:protocol-entry": [
+            {
+              "protocol": "ovsdb:ovsdb-bridge-protocol-openflow-13"
+            }
+          ],
+          "termination-point": [
+            {
+              "ovsdb:interface-type": "ovsdb:interface-type-patch",
+              "ovsdb:name": "br-physnet1-pa",
+              "ovsdb:options": [
+                {
+                  "option": "peer",
+                  "value": "br-physnet1-int-patch"
+                }
+              ],
+              "tp-id": "br-physnet1-pa"
+            },
+            {
+              "ovsdb:interface-bfd": [
+                {
+                  "bfd-key": "forwarding_if_rx",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "enable",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "min_tx",
+                  "bfd-value": "10000"
+                }
+              ],
+              "ovsdb:interface-type": "ovsdb:interface-type-vxlan",
+              "ovsdb:name": "tun03a2b920986",
+              "ovsdb:options": [
+                {
+                  "option": "key",
+                  "value": "flow"
+                },
+                {
+                  "option": "local_ip",
+                  "value": "10.30.170.90"
+                },
+                {
+                  "option": "remote_ip",
+                  "value": "10.30.170.17"
+                }
+              ],
+              "tp-id": "tun03a2b920986"
+            },
+            {
+              "ovsdb:interface-bfd": [
+                {
+                  "bfd-key": "forwarding_if_rx",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "enable",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "min_tx",
+                  "bfd-value": "10000"
+                }
+              ],
+              "ovsdb:interface-type": "ovsdb:interface-type-vxlan",
+              "ovsdb:name": "tunf68aef23130",
+              "ovsdb:options": [
+                {
+                  "option": "key",
+                  "value": "flow"
+                },
+                {
+                  "option": "local_ip",
+                  "value": "10.30.170.90"
+                },
+                {
+                  "option": "remote_ip",
+                  "value": "10.30.170.92"
+                }
+              ],
+              "tp-id": "tunf68aef23130"
+            }
+          ]
+        },
+        {
+          "node-id": "ovsdb://uuid/52910ce2-e429-4417-b638-142a32dbe56b/bridge/br-physnet1",
+          "termination-point": [
+            {
+              "ovsdb:interface-type": "ovsdb:interface-type-patch",
+              "ovsdb:name": "br-physnet1-int-patch",
+              "ovsdb:options": [
+                {
+                  "option": "peer",
+                  "value": "br-physnet1-pa"
+                }
+              ],
+              "tp-id": "br-physnet1-int-patch"
+            }
+          ]
+        },
+        {
+          "node-id": "ovsdb://uuid/52910ce2-e429-4417-b638-142a32dbe56b/bridge/br-int",
+          "ovsdb:bridge-name": "br-int",
+          "ovsdb:bridge-other-configs": [
+            {
+              "bridge-other-config-key": "hwaddr",
+              "bridge-other-config-value": "d4:d6:c1:8a:e9:4d"
+            },
+            {
+              "bridge-other-config-key": "disable-in-band",
+              "bridge-other-config-value": "true"
+            }
+          ],
+          "ovsdb:controller-entry": [
+            {
+              "target": "tcp:10.30.170.5:6653"
+            }
+          ],
+          "ovsdb:fail-mode": "ovsdb:ovsdb-fail-mode-secure",
+          "ovsdb:managed-by": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='ovsdb://uuid/52910ce2-e429-4417-b638-142a32dbe56b']",
+          "ovsdb:protocol-entry": [
+            {
+              "protocol": "ovsdb:ovsdb-bridge-protocol-openflow-13"
+            }
+          ],
+          "termination-point": [
+            {
+              "ovsdb:interface-type": "ovsdb:interface-type-patch",
+              "ovsdb:name": "br-physnet1-pa",
+              "ovsdb:options": [
+                {
+                  "option": "peer",
+                  "value": "br-physnet1-int-patch"
+                }
+              ],
+              "tp-id": "br-physnet1-pa"
+            },
+            {
+              "ovsdb:interface-bfd": [
+                {
+                  "bfd-key": "forwarding_if_rx",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "enable",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "min_tx",
+                  "bfd-value": "10000"
+                }
+              ],
+              "ovsdb:interface-type": "ovsdb:interface-type-vxlan",
+              "ovsdb:name": "tundb1d8b295c1",
+              "ovsdb:options": [
+                {
+                  "option": "key",
+                  "value": "flow"
+                },
+                {
+                  "option": "local_ip",
+                  "value": "10.30.170.92"
+                },
+                {
+                  "option": "remote_ip",
+                  "value": "10.30.170.17"
+                }
+              ],
+              "tp-id": "tundb1d8b295c1"
+            },
+            {
+              "ovsdb:interface-bfd": [
+                {
+                  "bfd-key": "forwarding_if_rx",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "enable",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "min_tx",
+                  "bfd-value": "10000"
+                }
+              ],
+              "ovsdb:interface-type": "ovsdb:interface-type-vxlan",
+              "ovsdb:name": "tun999632b8289",
+              "ovsdb:options": [
+                {
+                  "option": "key",
+                  "value": "flow"
+                },
+                {
+                  "option": "local_ip",
+                  "value": "10.30.170.92"
+                },
+                {
+                  "option": "remote_ip",
+                  "value": "10.30.170.90"
+                }
+              ],
+              "tp-id": "tun999632b8289"
+            }
+          ]
+        },
+        {
+          "node-id": "ovsdb://uuid/719e0692-b96a-4109-b1b3-f6370546be5b/bridge/br-int",
+          "ovsdb:bridge-name": "br-int",
+          "ovsdb:bridge-other-configs": [
+            {
+              "bridge-other-config-key": "hwaddr",
+              "bridge-other-config-value": "78:57:fc:38:85:92"
+            },
+            {
+              "bridge-other-config-key": "disable-in-band",
+              "bridge-other-config-value": "true"
+            }
+          ],
+          "ovsdb:controller-entry": [
+            {
+              "target": "tcp:10.30.170.5:6653"
+            }
+          ],
+          "ovsdb:fail-mode": "ovsdb:ovsdb-fail-mode-secure",
+          "ovsdb:managed-by": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='ovsdb://uuid/719e0692-b96a-4109-b1b3-f6370546be5b']",
+          "ovsdb:protocol-entry": [
+            {
+              "protocol": "ovsdb:ovsdb-bridge-protocol-openflow-13"
+            }
+          ],
+          "termination-point": [
+            {
+              "ovsdb:interface-type": "ovsdb:interface-type-patch",
+              "ovsdb:name": "br-physnet1-pa",
+              "ovsdb:options": [
+                {
+                  "option": "peer",
+                  "value": "br-physnet1-int-patch"
+                }
+              ],
+              "tp-id": "br-physnet1-pa"
+            },
+            {
+              "ovsdb:interface-bfd": [
+                {
+                  "bfd-key": "forwarding_if_rx",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "enable",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "min_tx",
+                  "bfd-value": "10000"
+                }
+              ],
+              "ovsdb:interface-type": "ovsdb:interface-type-vxlan",
+              "ovsdb:name": "tun95fee4d7132",
+              "ovsdb:options": [
+                {
+                  "option": "key",
+                  "value": "flow"
+                },
+                {
+                  "option": "local_ip",
+                  "value": "10.30.170.17"
+                },
+                {
+                  "option": "remote_ip",
+                  "value": "10.30.170.90"
+                }
+              ],
+              "tp-id": "tun95fee4d7132"
+            },
+            {
+              "ovsdb:interface-bfd": [
+                {
+                  "bfd-key": "forwarding_if_rx",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "enable",
+                  "bfd-value": "true"
+                },
+                {
+                  "bfd-key": "min_tx",
+                  "bfd-value": "10000"
+                }
+              ],
+              "ovsdb:interface-type": "ovsdb:interface-type-vxlan",
+              "ovsdb:name": "tun94ecbe1efd8",
+              "ovsdb:options": [
+                {
+                  "option": "key",
+                  "value": "flow"
+                },
+                {
+                  "option": "local_ip",
+                  "value": "10.30.170.17"
+                },
+                {
+                  "option": "remote_ip",
+                  "value": "10.30.170.92"
+                }
+              ],
+              "tp-id": "tun94ecbe1efd8"
+            }
+          ]
+        },
+        {
+          "node-id": "ovsdb://uuid/719e0692-b96a-4109-b1b3-f6370546be5b/bridge/br-physnet1",
+          "termination-point": [
+            {
+              "ovsdb:interface-type": "ovsdb:interface-type-patch",
+              "ovsdb:name": "br-physnet1-int-patch",
+              "ovsdb:options": [
+                {
+                  "option": "peer",
+                  "value": "br-physnet1-pa"
+                }
+              ],
+              "tp-id": "br-physnet1-int-patch"
+            }
+          ]
+        },
+        {
+          "node-id": "ovsdb://uuid/8eabb815-5570-42fc-9635-89c880ebc4ac/bridge/br-physnet1",
+          "termination-point": [
+            {
+              "ovsdb:interface-type": "ovsdb:interface-type-patch",
+              "ovsdb:name": "br-physnet1-int-patch",
+              "ovsdb:options": [
+                {
+                  "option": "peer",
+                  "value": "br-physnet1-pa"
+                }
+              ],
+              "tp-id": "br-physnet1-int-patch"
+            }
+          ]
+        }
+      ],
+      "topology-id": "ovsdb:1"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/resources/tools/odltools/mdsal/tests/test_ietf_interfaces.py b/resources/tools/odltools/mdsal/tests/test_ietf_interfaces.py
new file mode 100644 (file)
index 0000000..a92d7ee
--- /dev/null
@@ -0,0 +1,22 @@
+import unittest
+from mdsal.model import Model
+from mdsal.ietf_interfaces import interfaces
+from odltools import logg
+
+ip = "127.0.0.1"
+port = "8080"
+path = "./resources"
+# path = "/tmp/robotjob/s1-t1_Create_VLAN_Network_net_1/models"
+
+
+class TestIetfInterfaces(unittest.TestCase):
+    def setUp(self):
+        logg.Logger()
+        self.interfaces = interfaces(Model.CONFIG, ip, port, path)
+
+    def test_get_interfaces_by_key(self):
+        d = self.interfaces.get_interfaces_by_key()
+        self.assertIsNotNone(d['tun95fee4d7132'])
+
+if __name__ == '__main__':
+    unittest.main()
index d086c5e69f20cd13a99377ef69977a71b8cd0b98..4e248d35b65fe4c3351002bbbc082e514247f18c 100644 (file)
@@ -1,34 +1,36 @@
 import unittest
 from mdsal import itm_state
-from mdsal.models import Model
+from mdsal.model import Model
 from mdsal.itm_state import DpnEndpoints
 from odltools import logg
 
 ip = "127.0.0.1"
 port = "8080"
+path = "./resources"
+# path = "/tmp/robotjob/s1-t1_Create_VLAN_Network_net_1/models"
 
 
 class TestItmState(unittest.TestCase):
     def setUp(self):
         logg.Logger()
-        self.dpn_endpoints = itm_state.dpn_endpoints(Model.CONFIG, ip, port)
-        self.data = self.dpn_endpoints.read_file("./resources/itm-state_dpn-endpoints.json")
+        self.dpn_endpoints = itm_state.dpn_endpoints(Model.CONFIG, ip, port, path)
+        # self.data = self.dpn_endpoints.read_file("./resources/config_itm-state:dpn-endpoints.json")
 
     def test_read_file(self):
-        print "dpn-endpoints: {}".format(self.data)
-        print "dpn-endpoints: \n{}".format(self.dpn_endpoints.pretty_format(self.data))
+        print "dpn-endpoints: {}".format(self.dpn_endpoints.data)
+        print "dpn-endpoints: \n{}".format(self.dpn_endpoints.pretty_format(self.dpn_endpoints.data))
 
     def test_get_ip_address(self):
         dpn_ids = self.dpn_endpoints.get_dpn_ids()
         dpn_id = dpn_ids[0]
         ip_address = self.dpn_endpoints.get_ip_address(dpn_id)
         print "dpn_id: {}, ip_address: {}".format(dpn_id, ip_address)
-        self.assertEqual(dpn_id, "13878168265586")
+        self.assertEqual(dpn_id, 13878168265586)
         self.assertEqual(ip_address, "10.29.13.165")
 
     def test_get_all(self):
-        print "dpn-endpoints: {}".format(self.data)
-        print "dpn-endpoints: \n{}".format(self.dpn_endpoints.pretty_format(self.data))
+        print "dpn-endpoints: {}".format(self.dpn_endpoints.data)
+        print "dpn-endpoints: \n{}".format(self.dpn_endpoints.pretty_format(self.dpn_endpoints.data))
 
         dpn_ids = self.dpn_endpoints.get_dpn_ids()
         dpn_id = dpn_ids[0]
@@ -45,7 +47,7 @@ class TestItmState(unittest.TestCase):
         self.get_info(DpnEndpoints.DPN_ID)
 
     def get_info(self, key):
-        info = self.dpn_endpoints.get_kv(key, self.data, values=[])
+        info = self.dpn_endpoints.get_kv(key, self.dpn_endpoints.data, values=[])
         print "dpn info for {}: {}".format(key, info)
         return info
 
diff --git a/resources/tools/odltools/mdsal/tests/test_network_topology.py b/resources/tools/odltools/mdsal/tests/test_network_topology.py
new file mode 100644 (file)
index 0000000..9ff0d3b
--- /dev/null
@@ -0,0 +1,26 @@
+import unittest
+from mdsal.model import Model
+from mdsal.network_topology import network_topology
+from mdsal.network_topology import NetworkTopology
+from odltools import logg
+
+ip = "127.0.0.1"
+port = "8080"
+path = "./resources"
+# path = "/tmp/robotjob/s1-t1_Create_VLAN_Network_net_1/models"
+
+
+class TestNetworkTopology(unittest.TestCase):
+    def setUp(self):
+        logg.Logger()
+        self.network_topology = network_topology(Model.CONFIG, ip, port, path, NetworkTopology.OVSDB1)
+
+    def test_get_topologies(self):
+        self.assertIsNotNone(self.network_topology.get_topologies())
+
+    def test_get_nodes_by_key(self):
+        d = self.network_topology.get_nodes_by_tid_and_key()
+        self.assertIsNotNone(d['ovsdb://uuid/8eabb815-5570-42fc-9635-89c880ebc4ac/bridge/br-int'])
+
+if __name__ == '__main__':
+    unittest.main()
index d360043965d0440361b478d5d3042063c9dd46dd..0f91e496f55ec0567afd9d1fbac7e050ab86c683 100644 (file)
@@ -6,7 +6,7 @@ from odltools import logg
 class TestRequest(unittest.TestCase):
     def setUp(self):
         logg.Logger()
-        self.filename = "./resources/itm-state_dpn-endpoints.json"
+        self.filename = "./resources/config_itm-state:dpn-endpoints.json"
 
     def test_read_file(self):
         data = request.read_file(self.filename)
index 36828b13cbff33f78a1e7d34d21b67455946d16c..f95b74f8840cd138e9bd639c9634526072d1ad11 100644 (file)
@@ -1,9 +1,22 @@
 import constants as const
-import ds_get_data as dsg
 import flow_parser as fp
 import json
 import netvirt_utils as utils
 from collections import defaultdict
+from mdsal.model import Model
+from mdsal import elan
+from mdsal import id_manager
+from mdsal import ietf_interfaces
+from mdsal import interface_service_bindings
+from mdsal import itm_state
+from mdsal import l3vpn
+from mdsal import mip
+from mdsal import network_topology
+from mdsal import neutron
+from mdsal import odl_fib
+from mdsal import odl_interface_meta
+from mdsal import odl_l3vpn
+from mdsal import opendaylight_inventory
 
 
 # Required
@@ -17,6 +30,26 @@ confNodes = {}
 operNodes = {}
 
 
+modelpath = "/tmp/robotjob/s1-t1_Create_VLAN_Network_net_1/models"
+elan_elan_instances = None
+elan_elan_interfaces = None
+id_manager_id_pools = None
+ietf_interfaces_interfaces = None
+ietf_interfaces_interfaces_state = None
+interface_service_bindings_service_bindings = None
+itm_state_tunnels_state = None
+l3vpn_vpn_interfaces = None
+mip_mac = None
+network_topology_network_topology_config = None
+network_topology_network_topology_operational = None
+neutron_neutron = None
+odl_fib_fib_entries = None
+odl_interface_meta_if_index_interface_map = None
+odl_inventory_nodes_config = None
+odl_inventory_nodes_operational = None
+odl_l3vpn_vpn_instance_to_vpn_id = None
+
+
 def by_ifname(ifname):
     ifstate = ifstates.get(ifname)
     iface = ifaces.get(ifname)
@@ -24,10 +57,10 @@ def by_ifname(ifname):
     tunnel = None
     tunState = None
     if iface and iface.get('type') == const.IFTYPE_VLAN:
-        ports = dsg.get_neutron_ports()
+        ports = neutron_neutron.get_ports_by_key()
         port = ports.get(ifname)
     elif iface and iface.get('type') == const.IFTYPE_TUNNEL:
-        tunnels = dsg.get_config_tunnels()
+        tunnels = itm_state_tunnels_state.get_tunnels_by_key()
         tunnel = tunnels.get(ifname)
         tunStates = dsg.get_tunnel_states()
         tunState = tunStates.get(ifname)
@@ -48,8 +81,8 @@ def analyze_interface(ifname=None):
         print_keys()
         exit(1)
     ifname = ifname[0]
-    ifaces = dsg.get_config_interfaces()
-    ifstates = dsg.get_interface_states()
+    ifaces = ietf_interfaces_interfaces.get_interfaces_by_key()
+    ifstates = ietf_interfaces_interfaces_state.get_interfaces_by_key()
     iface,ifstate,port,tunnel,tunState = by_ifname(ifname)
     print "InterfaceConfig: "
     json.dumps(iface, indent=2)
@@ -86,11 +119,11 @@ def analyze_neutron_port(port, iface, ifstate):
 
 def analyze_inventory(nodeId, isConfig=True, ncId=None, ifName=None):
     if isConfig:
-        nodes = dsg.get_inventory_config()
+        nodes = odl_inventory_nodes_config.get_nodes_by_key()
         print "Inventory Config:"
     else:
         print "Inventory Operational:"
-        nodes = dsg.get_inventory_oper()
+        nodes = odl_inventory_nodes_operational.get_nodes_by_key()
     node = nodes.get(nodeId)
     tables = node.get(const.NODE_TABLE)
     groups = node.get(const.NODE_GROUP)
@@ -113,7 +146,7 @@ def analyze_inventory(nodeId, isConfig=True, ncId=None, ifName=None):
 
 def get_dpn_host_mapping(oper_nodes=None):
         nodes_dict = {}
-        nodes = oper_nodes or dsg.get_inventory_oper()
+        nodes = oper_nodes or odl_inventory_nodes_operational.get_nodes_by_key()
         for node in nodes.itervalues():
             dpnid = utils.get_dpn_from_ofnodeid(node['id'])
             nodes_dict[dpnid] = node.get('flow-node-inventory:description', '')
@@ -121,7 +154,7 @@ def get_dpn_host_mapping(oper_nodes=None):
 
 
 def get_groups(ofnodes=None):
-    of_nodes = ofnodes or dsg.get_inventory_config()
+    of_nodes = ofnodes or odl_inventory_nodes_config.get_nodes_by_key()
     key ='group-id'
     group_dict = defaultdict(dict)
     for node in of_nodes.itervalues():
@@ -148,27 +181,27 @@ def get_stale_flows(modules=['ifm']):
     groups = {}
     table_list = list(set([table for module in modules for table in const.TABLE_MAP[module]]))
     ##table_list = [214, 244]
-    of_nodes = dsg.get_inventory_config()
+    of_nodes = odl_inventory_nodes_config.get_nodes_by_key()
     if 'ifm' in modules:
-        ifaces = dsg.get_config_interfaces()
-        ifstates = dsg.get_interface_states()
+        ifaces = ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifstates = ietf_interfaces_interfaces_state.get_interfaces_by_key()
     if 'l3vpn' in modules:
-        ifaces = ifaces or dsg.get_config_interfaces()
-        ifindexes = ifindexes or dsg.get_ifindexes()
-        fibentries = fibentries or dsg.get_fibentries_by_label()
-        vpnids = vpnids or dsg.get_vpnids()
-        vpninterfaces = vpninterfaces or dsg.get_vpninterfaces()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
+        fibentries = fibentries or odl_fib_fib_entries.get_vrf_entries_by_key()
+        vpnids = vpnids or odl_l3vpn_vpn_instance_to_vpn_id.get_vpn_ids_by_key()
+        vpninterfaces = vpninterfaces or l3vpn_vpn_interfaces.get_vpn_ids_by_key()
         groups = groups or get_groups(of_nodes)
     if 'acl' in modules:
-        ifaces = ifaces or dsg.get_config_interfaces()
-        ifindexes = ifindexes or dsg.get_ifindexes()
-        einsts = einsts or dsg.get_elan_instances()
-        eifaces = eifaces or dsg.get_elan_interfaces()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
+        einsts = einsts or elan_elan_instances.get_elan_instances_by_key()
+        eifaces = eifaces or elan_elan_interfaces.get_elan_interfaces()
     if 'elan' in modules:
-        ifaces = ifaces or dsg.get_config_interfaces()
-        einsts = einsts or dsg.get_elan_instances()
-        eifaces = eifaces or dsg.get_elan_interfaces()
-        ifindexes = ifindexes or dsg.get_ifindexes()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        einsts = einsts or elan_elan_instances.get_elan_instances_by_key()
+        eifaces = eifaces or elan_elan_interfaces.get_elan_interfaces()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
     stale_flows = []
     for node in of_nodes.itervalues():
         tables = [x for x in node[const.NODE_TABLE] if x['id'] in table_list]
@@ -202,8 +235,8 @@ def show_stale_bindings():
 
 
 def get_stale_bindings():
-    ifaces = dsg.get_config_interfaces()
-    bindings, orphans = dsg.get_service_bindings()
+    ifaces = ietf_interfaces_interfaces.get_interfaces_by_key()
+    bindings, orphans = interface_service_bindings_service_bindings.get_service_bindings()
     return set(bindings.keys()) - set(ifaces.keys()), bindings
 
 
@@ -229,7 +262,7 @@ def show_link_flow_binding():
 
 def show_stale_flows(sort_by='table'):
     compute_map = get_dpn_host_mapping()
-    nports = dsg.get_neutron_ports()
+    nports = neutron_neutron.get_ports_by_key()
     for flow in utils.sort(get_stale_flows(['ifm', 'acl', 'elan', 'l3vpn']), sort_by):
         host = compute_map.get(flow.get('dpnid'), flow.get('dpnid'))
         ip_list = get_ips_for_iface(nports, flow.get('ifname'))
@@ -262,37 +295,37 @@ def get_all_flows(modules=['ifm'], filter=[]):
     else:
         table_list = list(set([table for module in modules for table in const.TABLE_MAP[module]]))
     ##table_list = [214, 244]
-    of_nodes = dsg.get_inventory_config()
+    of_nodes = odl_inventory_nodes_config.get_nodes_by_key()
     if 'ifm' in modules:
-        ifaces = dsg.get_config_interfaces()
-        ifstates = dsg.get_interface_states()
+        ifaces = ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifstates = ietf_interfaces_interfaces_state.get_interfaces_by_key()
     if 'l3vpn' in modules:
-        ifaces = ifaces or dsg.get_config_interfaces()
-        ifindexes = ifindexes or dsg.get_ifindexes()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
         fibentries = fibentries or dsg.get_fibentries_by_label()
-        vpnids = vpnids or dsg.get_vpnids()
-        vpninterfaces = vpninterfaces or dsg.get_vpninterfaces()
+        vpnids = vpnids or odl_l3vpn_vpn_instance_to_vpn_id.get_vpn_ids_by_key()
+        vpninterfaces = vpninterfaces or l3vpn_vpn_interfaces.get_vpn_ids_by_key()
         groups = groups or get_groups(of_nodes)
     if 'acl' in modules:
-        ifaces = ifaces or dsg.get_config_interfaces()
-        ifindexes = ifindexes or dsg.get_ifindexes()
-        einsts = einsts or dsg.get_elan_instances()
-        eifaces = eifaces or dsg.get_elan_interfaces()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
+        einsts = einsts or elan_elan_instances.get_elan_instances_by_key()
+        eifaces = eifaces or elan_elan_interfaces.get_elan_interfaces()
     if 'elan' in modules:
-        ifaces = ifaces or dsg.get_config_interfaces()
-        einsts = einsts or dsg.get_elan_instances()
-        eifaces = eifaces or dsg.get_elan_interfaces()
-        ifindexes = ifindexes or dsg.get_ifindexes()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        einsts = einsts or elan_elan_instances.get_elan_instances_by_key()
+        eifaces = eifaces or elan_elan_interfaces.get_elan_interfaces()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
     if 'all' in modules:
         groups = groups or get_groups(of_nodes)
-        ifaces = ifaces or dsg.get_config_interfaces()
-        ifstates = ifstates or dsg.get_interface_states()
-        ifindexes = ifindexes or dsg.get_ifindexes()
+        ifaces = ifaces or ietf_interfaces_interfaces.get_interfaces_by_key()
+        ifstates = ifstates or ietf_interfaces_interfaces_state.get_interfaces_by_key()
+        ifindexes = ifindexes or odl_interface_meta_if_index_interface_map.get_if_index_interfaces_by_key()
         fibentries = fibentries or dsg.get_fibentries_by_label()
-        vpnids = vpnids or dsg.get_vpnids()
-        vpninterfaces = vpninterfaces or dsg.get_vpninterfaces()
-        einsts = einsts or dsg.get_elan_instances()
-        eifaces = eifaces or dsg.get_elan_interfaces()
+        vpnids = vpnids or odl_l3vpn_vpn_instance_to_vpn_id.get_vpn_ids_by_key()
+        vpninterfaces = vpninterfaces or l3vpn_vpn_interfaces.get_vpn_ids_by_key()
+        einsts = einsts or elan_elan_instances.get_elan_instances_by_key()
+        eifaces = eifaces or elan_elan_interfaces.get_elan_interfaces()
     flows = []
     for node in of_nodes.itervalues():
         tables = [x for x in node[const.NODE_TABLE] if x['id'] in table_list]
@@ -313,7 +346,7 @@ def get_all_flows(modules=['ifm'], filter=[]):
 
 def show_flows(modules=['ifm'], sort_by='table', filter_by=[]):
     compute_map = get_dpn_host_mapping()
-    nports = dsg.get_neutron_ports()
+    nports = neutron_neutron.get_ports_by_key()
     for flow in utils.sort(get_all_flows(modules, filter_by), sort_by):
         host = compute_map.get(flow.get('dpnid'), flow.get('dpnid'))
         ip_list = get_ips_for_iface(nports, flow.get('ifname'))
@@ -350,8 +383,8 @@ def get_key_for_dup_detect(flow):
 
 
 def show_dup_flows():
-    mmac = dsg.get_mip_mac()
-    einsts = dsg.get_elan_instances()
+    mmac = mip_mac.get_entries_by_key()
+    einsts = elan_elan_instances.get_elan_instances_by_key()
     flows = utils.sort(get_all_flows(['elan']), 'table')
     matches = defaultdict(list)
     compute_map = get_dpn_host_mapping()
@@ -377,7 +410,7 @@ def show_dup_flows():
 
 
 def show_learned_mac_flows():
-    nports = dsg.get_neutron_ports(key_field='mac-address')
+    nports = neutron_neutron.get_ports_by_key(key_field='mac-address')
     flows = utils.sort(get_all_flows(['elan']), 'table')
     compute_map = get_dpn_host_mapping()
     for flow_info in flows:
@@ -397,13 +430,13 @@ def show_learned_mac_flows():
 
 
 def show_elan_instances():
-    insts = dsg.get_elan_instances()
+    insts = elan_elan_instances.get_elan_instances_by_key()
     json.dumps(insts)
 
 
 def get_duplicate_ids():
     duplicate_ids= {}
-    for pool in dsg.get_idpools().itervalues():
+    for pool in id_manager_id_pools.get_id_pools_by_key().itervalues():
         id_values = {}
         for id_entry in pool.get('id-entries', []):
             id_info = {}
@@ -424,7 +457,7 @@ def get_duplicate_ids():
 
 
 def show_idpools():
-    ports = dsg.get_neutron_ports()
+    ports = neutron_neutron.get_ports_by_key()
     iface_ids = []
     for k,v in get_duplicate_ids().iteritems():
         result = "Id:{},Keys:{}".format(k, json.dumps(v.get('id-keys')))
@@ -478,7 +511,7 @@ def get_data_path(res_type, data):
 
 # Sample method that shows how to use
 def show_all_tables():
-    of_nodes = dsg.get_inventory_config()
+    of_nodes = odl_inventory_nodes_config.get_nodes_by_key()
     tables = set()
     for node in of_nodes.itervalues():
         for table in node[const.NODE_TABLE]:
@@ -488,7 +521,7 @@ def show_all_tables():
 
 
 def show_all_groups():
-    of_nodes = dsg.get_inventory_config()
+    of_nodes = odl_inventory_nodes_config.get_nodes_by_key()
     groups = get_groups(of_nodes)
     for dpn in groups:
         for group_key in groups[dpn]:
@@ -496,11 +529,11 @@ def show_all_groups():
 
 
 def analyze_trunks():
-    nports = dsg.get_neutron_ports()
-    ntrunks = dsg.get_neutron_trunks()
-    vpninterfaces = dsg.get_vpninterfaces()
-    ifaces = dsg.get_config_interfaces()
-    ifstates = dsg.get_interface_states()
+    nports = neutron_neutron.get_ports_by_key()
+    ntrunks = neutron_neutron.get_trunks_by_key()
+    vpninterfaces = l3vpn_vpn_interfaces.get_vpn_ids_by_key()
+    ifaces = ietf_interfaces_interfaces.get_interfaces_by_key()
+    ifstates = ietf_interfaces_interfaces_state.get_interfaces_by_key()
     subport_dict = {}
     for v in ntrunks.itervalues():
         nport = nports.get(v.get('port-id'))
@@ -559,7 +592,44 @@ def get_all_dumps():
 
 
 def main(args=None):
+    global elan_elan_instances
+    global elan_elan_interfaces
+    global id_manager_id_pools
+    global ietf_interfaces_interfaces
+    global ietf_interfaces_interfaces_state
+    global interface_service_bindings_service_bindings
+    global itm_state_tunnels_state
+    global l3vpn_vpn_interfaces
+    global mip_mac
+    global network_topology_network_topology_config
+    global network_topology_network_topology_operational
+    global neutron_neutron
+    global odl_fib_fib_entries
+    global odl_interface_meta_if_index_interface_map
+    global odl_inventory_nodes_config
+    global odl_inventory_nodes_operational
+    global odl_l3vpn_vpn_instance_to_vpn_id
     options, args = utils.parse_args()
+
+    elan_elan_instances = elan.elan_instances(Model.CONFIG, modelpath)
+    elan_elan_interfaces = elan.elan_interfaces(Model.CONFIG, modelpath)
+    id_manager_id_pools = id_manager.id_pools(Model.CONFIG, modelpath)
+    ietf_interfaces_interfaces = ietf_interfaces.interfaces(Model.CONFIG, modelpath)
+    ietf_interfaces_interfaces_state = ietf_interfaces.interfaces_state(Model.OPERATIONAL, modelpath)
+    interface_service_bindings_service_bindings = interface_service_bindings.service_bindings(Model.CONFIG, modelpath)
+    itm_state_tunnels_state = itm_state.tunnels_state(Model.OPERATIONAL, modelpath)
+    l3vpn_vpn_interfaces = l3vpn.vpn_instance_to_vpn_id(Model.CONFIG, modelpath)
+    mip_mac = mip.mac(Model.CONFIG, modelpath)
+    neutron_neutron = neutron.neutron(Model.CONFIG, modelpath)
+    network_topology_network_topology_config = network_topology.network_topology(Model.CONFIG, modelpath)
+    network_topology_network_topology_operational = network_topology.network_topology(Model.CONFIG, modelpath)
+    neutron_neutron = neutron.neutron(Model.CONFIG, modelpath)
+    odl_fib_fib_entries = odl_fib.fib_entries(Model.CONFIG, modelpath)
+    odl_interface_meta_if_index_interface_map = odl_interface_meta.if_indexes_interface_map(Model.OPERATIONAL, modelpath)
+    odl_inventory_nodes_config = opendaylight_inventory.nodes(Model.CONFIG, modelpath)
+    odl_inventory_nodes_operational = opendaylight_inventory.nodes(Model.OPERATIONAL, modelpath)
+    odl_l3vpn_vpn_instance_to_vpn_id = odl_l3vpn.vpn_instance_to_vpn_id(Model.CONFIG, modelpath)
+
     if options.callMethod:
         if args[1:]:
             eval(options.callMethod)(args[1:])
@@ -567,7 +637,7 @@ def main(args=None):
         else:
             eval(options.callMethod)()
             return
-    #print json.dumps(dsg.get_vpninterfaces())
+    #print json.dumps(l3vpn_vpn_interfaces.get_vpn_ids_by_key())
     #show_all_tables()
     #analyze_inventory('openflow:165862438671169',ifName='tunf94333cc491')
     #show_stale_flows()
diff --git a/resources/tools/odltools/netvirt/ds_get_data.py b/resources/tools/odltools/netvirt/ds_get_data.py
deleted file mode 100644 (file)
index 306e7d3..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-import collections
-import json
-import netvirt_utils as utils
-import constants as const
-
-
-def get_ds_data(name, file_name=None, ds_type=None):
-    res = const.DSMAP[name]
-    filename = '{}/{}'.format(utils.get_temp_path(), res[const.DSM_FILE])
-    dstype = ds_type or res[const.DSM_DSTYPE]
-    path = res[const.DSM_PATH]
-    root1 = res[const.DSM_ROOT1]
-    root2 = res[const.DSM_ROOT2]
-    data = {}
-    try:
-        with open(filename) as data_file:
-            data = json.load(data_file)[root1][root2]
-    except IOError:
-        url = utils.create_url(dstype, path)
-        result = utils.grabJson(url)
-        if result:
-            data = result[root1][root2]
-    return data
-
-
-def get_all_dumps():
-    for res in const.DSMAP.itervalues():
-        filename = '{}/{}'.format(utils.get_temp_path(), res[const.DSM_FILE])
-        dstype = res[const.DSM_DSTYPE]
-        path = res[const.DSM_PATH]
-        root1 = res[const.DSM_ROOT1]
-        root2 = res[const.DSM_ROOT2]
-        data = {}
-        url = utils.create_url(dstype, path)
-        result = utils.grabJson(url)
-        with open(filename, 'w+') as data_file:
-            json.dump(result, data_file)
-
-
-def get_config_interfaces(file_name=None):
-    # Returns dict of ifaces, key is iface name
-    if_dict = {}
-    ifaces = get_ds_data('ifconfig',file_name)
-    for iface in ifaces:
-        if_dict[iface['name']] = iface
-    return if_dict
-
-
-def get_itm_config_interfaces(file_name=None):
-    tun_dict = {}
-    tunifaces = get_ds_data('itmconfig',file_name)
-    for sourcedpn in tunifaces:
-        for remotedpn in sourcedpn['remote-dpns']:
-            tun_dict[remotedpn['tunnel-name']] = remotedpn
-    return tun_dict
-
-
-def get_neutron_ports(file_name=None, key_field='uuid'):
-    port_dict = {}
-    ports = get_ds_data('neutronports',file_name)
-    for port in ports:
-        port_dict[port[key_field]] = port
-    return port_dict
-
-
-def get_neutron_trunks(file_name=None):
-    trunk_dict = {}
-    trunks = get_ds_data('neutrontrunks',file_name)
-    for trunk in trunks:
-        trunk_dict[trunk['uuid']] = trunk
-    return trunk_dict
-
-
-def get_interface_states(file_name=None):
-    ifs_dict = {}
-    ifstates = get_ds_data('ifstate',file_name)
-    for ifstate in ifstates:
-        ifs_dict[ifstate['name']] = ifstate
-    return ifs_dict
-
-
-def get_config_tunnels(file_name='tunnel-config.log'):
-    tun_dict = {}
-    tunnels = {}
-    try:
-        with open(file_name) as tunconfig_file:
-            tunnels = json.load(tunconfig_file)['tunnel-list']['internal-tunnel']
-    except Exception:
-        pass
-    for tunnel in tunnels:
-        for tun_name in tunnel['tunnel-interface-name']:
-            tun_dict[tun_name] = tunnel
-    return tun_dict
-
-
-def get_tunnel_states(file_name=None):
-    tun_dict = {}
-    tunnels = get_ds_data('tunstate',file_name)
-    for tunnel in tunnels:
-        tun_dict[tunnel['tunnel-interface-name']] = tunnel
-    return tun_dict
-
-
-def get_topology_nodes(file_name, type = 'ovsdb:1', dsType = 'config'):
-    nodes_dict = {}
-    topologies = {}
-    nodes = {}
-    try:
-        with open(file_name) as topology_file:
-            topologies = json.load(topology_file)['topology']
-            nodes = [topology['node'] for topology in topologies if topology['topology-id'] == type][0]
-    except IOError:
-        url = utils.create_url(dsType, "network-topology:network-topology/{}".format(type))
-        result = utils.grabJson(url)
-        if result:
-            nodes = result['node']
-    for node in nodes:
-        nodes_dict[node['node-id']] = node
-    return nodes_dict
-
-
-def get_topology_config(file_name='topology-config.log', type = 'ovsdb:1'):
-    return get_topology_nodes(file_name)
-
-
-def get_topology_oper(file_name='topology-oper.log', type = 'ovsdb:1', dsType = 'operational'):
-    return get_topology_nodes(file_name, type)
-
-
-def get_inventory_nodes(file_name, dsType = 'config'):
-    nodes_dict = {}
-    nodes = get_ds_data('inventory', file_name, dsType)
-    for node in nodes:
-        nodes_dict[node['id']] = node
-    return nodes_dict
-
-
-
-def get_inventory_config(file_name=None):
-    return get_inventory_nodes(file_name)
-
-
-def get_inventory_oper(file_name='inventory-oper.log'):
-    return get_inventory_nodes(file_name, 'operational')
-
-
-def get_service_bindings(file_name=None):
-    sb_dict = collections.defaultdict(dict)
-    orphans_dict = collections.defaultdict(dict)
-    sb_infos = get_ds_data('bindings')
-    for sb_info in sb_infos:
-        service_mode = sb_info['service-mode'][len('interface-service-bindings:'):]
-        if sb_info.get('bound-services'):
-            sb_dict[sb_info['interface-name']][service_mode] =  sb_info
-        else:
-            orphans_dict[sb_info['interface-name']][service_mode] =  sb_info
-    return dict(sb_dict), dict(orphans_dict)
-
-
-def get_elan_instances(file_name=None):
-    einstances_dict = {}
-    einstances = get_ds_data('elaninstances')
-    for einstance in einstances:
-        einstances_dict[einstance['elan-instance-name']] = einstance
-    return einstances_dict
-
-
-def get_elan_interfaces(file_name=None):
-    eifaces_dict = {}
-    eifaces = get_ds_data('elaninterfaces')
-    for eiface in eifaces:
-        eifaces_dict[eiface['name']] = eiface
-    return eifaces_dict
-
-
-def get_ifindexes(file_name=None):
-    ifindexes_dict = {}
-    ifindexes = get_ds_data('ifindexes')
-    for ifindex in ifindexes:
-        ifindexes_dict[ifindex['if-index']] = ifindex
-    return ifindexes_dict
-
-
-def get_fibentries_by_label(file_name=None):
-    fibs_dict = {}
-    fibs = get_ds_data('fibentries')
-    for vrftable in fibs:
-        for vrfEntry in vrftable.get('vrfentry', []):
-            if vrfEntry.get('label'):
-                vrfEntry['rd'] = vrftable['routeDistinguisher']
-                fibs_dict[vrfEntry['label']] = vrfEntry
-    return fibs_dict
-
-
-def get_vpnids(filename=None):
-    vpnids_dict = {}
-    vpninstances = get_ds_data('vpninstance-to-vpnid')
-    for vpninstance in vpninstances:
-        vpnids_dict[vpninstance['vpn-id']] = vpninstance
-    return vpnids_dict
-
-
-def get_vpninterfaces(filename=None):
-    vpninterfaces_dict = {}
-    vpninterfaces = get_ds_data('vpninterfaces')
-    for vpninterface in vpninterfaces:
-        vpninterfaces_dict[vpninterface['name']] = vpninterface
-    return vpninterfaces_dict
-
-
-def get_idpools(filename=None):
-    idpools_dict = {}
-    idpools = get_ds_data('idpools')
-    for idpool in idpools:
-        idpools_dict[idpool['pool-name']] = idpool
-    return idpools_dict
-
-
-def get_mip_mac(filename='mip-mac.log'):
-    mmac_dict = collections.defaultdict(dict)
-    try:
-        with open(filename) as data_file:
-            data = json.load(data_file)
-    except IOError:
-        data = []
-    for entry in data:
-        entry['mac'] = entry['mac'].lower()
-        mmac_dict[entry.get('mac')][entry.get('network-id')] = entry
-    return mmac_dict
index 030ace3d32c3f1863795d5acced187b6bcef46d5..497c283f93fe605fbcc2b0dd6b149abd6b75e1ec 100644 (file)
@@ -12,14 +12,13 @@ def read_file(filename):
     lines = []
     with open(filename, 'r') as fp:
         for line in fp:
-            # strip leading spaces; by default every flow line has a leading space: " cookie=..."
+            # strip leading spaces. by default every flow line has a leading space: " cookie=..."
             lines.append(line.lstrip())
-    logger.info("read_file: File: %s: processed %d lines", filename, len(lines))
-    # logger.debug("read_file: lines:\n%s", "".join(lines))
+    logger.debug("read_file: File: %s: processed %d lines", filename, len(lines))
     return lines
 
 
 def write_file(filename, lines):
     with open(filename, 'w') as fp:
         fp.writelines(lines)
-    logger.info("write_file: File: %s: wrote %d lines", filename, len(lines))
+    logger.debug("write_file: File: %s: wrote %d lines", filename, len(lines))