[DATABASE]
-name = ovs_quantum
-user = root
-pass = nova
-host = 127.0.0.1
-port = 3306
+# This line MUST be changed to actually run the plugin.
+# Example: sql_connection = mysql://root:nova@127.0.0.1:3336/ovs_quantum
+sql_connection = sqlite://
[OVS]
integration-bridge = br-int
# -- Database config.
-The Open vSwitch quantum service requires access to a mysql database in order
-to store configuration and mappings that will be used by the agent. Here is
-how to set up the database on the host that you will be running the quantum
-service on.
+The Open vSwitch quantum service requires access to a mysql database or any
+other database engine supported by sqlalchemy in order to store configuration
+and mappings that will be used by the agent.
+
+A new database, "ovs_quantum", should be created, and servers running the
+ovs quantum agent must be able to communicate with the host running the
+quantum service.
+
+Here is how to set up the database using MySQL on the host that you will be
+running the quantum service on.
MySQL should be installed on the host, and all plugins and clients
must be configured with access to the database.
will be included in the agent distribution tarball (see below) and
the agent will use the credentials here to access the database.
+ The credentials must be specified using sqlalchemy url as
+ sql_connection = mysql://user:pass@127.0.0.1/ovs_quantum
+
# -- XenServer Agent configuration
- Create the agent distribution tarball
import ConfigParser
import logging as LOG
-import MySQLdb
-import os
import sys
import time
import signal
from optparse import OptionParser
from subprocess import *
+from sqlalchemy.ext.sqlsoup import SqlSoup
+
# A class to represent a VIF (i.e., a port that has 'iface-id' and 'vif-mac'
# attributes set).
# switch all traffic using L2 learning
self.int_br.add_flow(priority=1, actions="normal")
- def daemon_loop(self, conn):
+ def daemon_loop(self, db):
self.local_vlan_map = {}
old_local_bindings = {}
old_vif_ports = {}
while True:
- cursor = conn.cursor()
- cursor.execute("SELECT * FROM ports where state = 'ACTIVE'")
- rows = cursor.fetchall()
- cursor.close()
+
all_bindings = {}
- for r in rows:
- all_bindings[r[2]] = r[1]
+ try:
+ ports = db.ports.all()
+ except:
+ ports = []
+ for port in ports:
+ all_bindings[port.interface_id] = port.network_id
- cursor = conn.cursor()
- cursor.execute("SELECT * FROM vlan_bindings")
- rows = cursor.fetchall()
- cursor.close()
vlan_bindings = {}
- for r in rows:
- vlan_bindings[r[1]] = r[0]
+ try:
+ vlan_binds = db.vlan_bindings.all()
+ except:
+ vlan_binds = []
+ for bind in vlan_binds:
+ vlan_bindings[bind.network_id] = bind.vlan_id
new_vif_ports = {}
new_local_bindings = {}
integ_br = config.get("OVS", "integration-bridge")
- db_name = config.get("DATABASE", "name")
- db_user = config.get("DATABASE", "user")
- db_pass = config.get("DATABASE", "pass")
- db_host = config.get("DATABASE", "host")
- conn = None
- try:
- LOG.info("Connecting to database \"%s\" on %s" % (db_name, db_host))
- conn = MySQLdb.connect(host=db_host, user=db_user,
- passwd=db_pass, db=db_name)
- plugin = OVSQuantumAgent(integ_br)
- plugin.daemon_loop(conn)
- finally:
- if conn:
- conn.close()
+ options = {"sql_connection": config.get("DATABASE", "sql_connection")}
+ db = SqlSoup(options["sql_connection"])
+
+ LOG.info("Connecting to database \"%s\" on %s" %
+ (db.engine.url.database, db.engine.url.host))
+ plugin = OVSQuantumAgent(integ_br)
+ plugin.daemon_loop(db)
sys.exit(0)
exit 1
fi
-# Make sure we have mysql-python
-rpm -qa | grep MySQL-python >/dev/null 2>&1
+# Make sure we have sqlalchemy-python
+rpm -qa | grep sqlalchemy-python >/dev/null 2>&1
if [ $? -ne 0 ]; then
- echo "MySQL-python not found"
- echo "Please enable the centos repositories and install mysql-python:"
- echo "yum --enablerepo=base -y install MySQL-python"
+ echo "sqlalchemy-python not found"
+ echo "Please enable the centos repositories and install sqlalchemy-python:"
+ echo "yum --enablerepo=base -y install sqlalchemy-python"
exit 1
fi
config.read(configfile)
LOG.debug("Config: %s" % config)
- DB_NAME = config.get("DATABASE", "name")
- DB_USER = config.get("DATABASE", "user")
- DB_PASS = config.get("DATABASE", "pass")
- DB_HOST = config.get("DATABASE", "host")
- options = {"sql_connection": "mysql://%s:%s@%s/%s" % (DB_USER,
- DB_PASS, DB_HOST, DB_NAME)}
+ options = {"sql_connection": config.get("DATABASE", "sql_connection")}
db.configure_db(options)
self.vmap = VlanMap()
-mysql-python
+SQLAlchemy
\ No newline at end of file