Sea change in how admin code calls the database layer
Add IPC to VLANd
All read-only admin DB query calls are now routed to the core VLANd
process via IPC, and responses come back from there. Part-way to
removing direct DB calls from admin.py, next is the DB calls that make
changes. They're more involved.
Change-Id: I6a993cd4c7b4e85c2a489ac96f9f0f58f087ca1d
diff --git a/util.py b/util.py
new file mode 100644
index 0000000..aee115f
--- /dev/null
+++ b/util.py
@@ -0,0 +1,67 @@
+import logging
+import os
+from db.db import VlanDB
+from errors import CriticalError, InputError, ConfigError, SocketError
+
+class VlanUtil:
+ """VLANd utility functions"""
+
+ def get_switch_driver(self, switch, config):
+ logging.debug("Trying to find a driver for %s" % switch)
+ driver = config.switches[switch].driver
+ logging.debug("Driver: %s" % driver)
+ module = __import__("drivers.%s" % driver, fromlist=[driver])
+ class_ = getattr(module, driver)
+ return class_(switch)
+
+ # Simple helper wrapper for all the read-only queries
+ def perform_query(self, db, command, data):
+ print command
+ print data
+ ret = {}
+ try:
+ if command == 'status':
+ # data ignored
+ ret['running'] = 'ok'
+ elif command == 'db.all_switches':
+ ret = db.all_switches()
+ elif command == 'db.all_ports':
+ ret = db.all_ports()
+ elif command == 'db.all_vlans':
+ ret = db.all_vlans()
+ elif command == 'db.get_switch_by_id':
+ ret = db.get_switch_by_id(data['switch_id'])
+ elif command == 'db.get_switch_id_by_name':
+ ret = db.get_switch_id_by_name(data['name'])
+ elif command == 'db.get_switch_name_by_id':
+ ret = db.get_switch_name_by_id(data['switch_id'])
+ elif command == 'db.get_port_by_id':
+ ret = db.get_port_by_id(data['port_id'])
+ elif command == 'db.get_ports_by_switch':
+ ret = db.get_ports_by_switch(data['switch_id'])
+ elif command == 'db.get_port_by_switch_and_name':
+ ret = db.get_port_by_switch_and_name(data['switch_id'], data['name'])
+ elif command == 'db.get_current_vlan_id_by_port':
+ ret = db.get_current_vlan_id_by_port(data['port_id'])
+ elif command == 'db.get_base_vlan_id_by_port':
+ ret = db.get_base_vlan_id_by_port(data['port_id'])
+ elif command == 'db.get_ports_by_current_vlan':
+ ret = db.get_ports_by_current_vlan(data['vlan_id'])
+ elif command == 'db.get_ports_by_base_vlan':
+ ret = db.get_ports_by_base_vlan(data['vlan_id'])
+ elif command == 'db.get_vlan_by_id':
+ ret = db.get_vlan_by_id(data['vlan_id'])
+ elif command == 'db.get_vlan_id_by_name':
+ ret = db.get_vlan_id_by_name(data['name'])
+ elif command == 'db.get_vlan_id_by_tag':
+ ret = db.get_vlan_id_by_name(data['tag'])
+ elif command == 'db.get_vlan_name_by_id':
+ ret = db.get_vlan_name_by_id(data['vlan_id'])
+ else:
+ raise InputError("Unknown query command \"%s\"" % command)
+
+ except:
+ raise InputError("Invalid input in query")
+
+ return ret
+