aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdebian/ovs-monitor-ipsec52
-rw-r--r--python/ovs/db/idl.py21
-rw-r--r--tests/test-ovsdb.py5
-rwxr-xr-xxenserver/usr_share_openvswitch_scripts_ovs-xapi-sync35
4 files changed, 27 insertions, 86 deletions
diff --git a/debian/ovs-monitor-ipsec b/debian/ovs-monitor-ipsec
index e89e7092..87a14911 100755
--- a/debian/ovs-monitor-ipsec
+++ b/debian/ovs-monitor-ipsec
@@ -352,49 +352,6 @@ class IPsec:
self.entries.remove(remote_ip)
-def keep_table_columns(schema, table_name, column_types):
- table = schema.tables.get(table_name)
- if not table:
- raise error.Error("schema has no %s table" % table_name)
-
- new_columns = {}
- for column_name, column_type in column_types.iteritems():
- column = table.columns.get(column_name)
- if not column:
- raise error.Error("%s table schema lacks %s column"
- % (table_name, column_name))
- if column.type != column_type:
- raise error.Error("%s column in %s table has type \"%s\", "
- "expected type \"%s\""
- % (column_name, table_name,
- column.type.toEnglish(),
- column_type.toEnglish()))
- new_columns[column_name] = column
- table.columns = new_columns
- return table
-
-
-def prune_schema(schema):
- string_type = types.Type(types.BaseType(types.StringType))
- optional_ssl_type = types.Type(types.BaseType(types.UuidType,
- ref_table_name='SSL'), None, 0, 1)
- string_map_type = types.Type(types.BaseType(types.StringType),
- types.BaseType(types.StringType),
- 0, sys.maxint)
-
- new_tables = {}
- new_tables["Interface"] = keep_table_columns(
- schema, "Interface", {"name": string_type,
- "type": string_type,
- "options": string_map_type})
- new_tables["Open_vSwitch"] = keep_table_columns(
- schema, "Open_vSwitch", {"ssl": optional_ssl_type})
- new_tables["SSL"] = keep_table_columns(
- schema, "SSL", {"certificate": string_type,
- "private_key": string_type})
- schema.tables = new_tables
-
-
def update_ipsec(ipsec, interfaces, new_interfaces):
for name, vals in interfaces.iteritems():
if name not in new_interfaces:
@@ -448,10 +405,11 @@ def main():
root_prefix = args.root_prefix
remote = args.database
- schema_file = "%s/vswitch.ovsschema" % ovs.dirs.PKGDATADIR
- schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schema_file))
- prune_schema(schema)
- idl = ovs.db.idl.Idl(remote, schema)
+ schema_helper = ovs.db.idl.SchemaHelper()
+ schema_helper.register_columns("Interface", ["name", "type", "options"])
+ schema_helper.register_columns("Open_vSwitch", ["ssl"])
+ schema_helper.register_columns("SSL", ["certificate", "private_key"])
+ idl = ovs.db.idl.Idl(remote, schema_helper)
ovs.daemon.daemonize()
diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py
index b33d9f8d..56391201 100644
--- a/python/ovs/db/idl.py
+++ b/python/ovs/db/idl.py
@@ -93,8 +93,8 @@ class Idl:
The IDL uses and modifies 'schema' directly."""
- if isinstance(schema, SchemaHelper):
- schema = schema.get_idl_schema()
+ assert isinstance(schema, SchemaHelper)
+ schema = schema.get_idl_schema()
self.tables = schema.tables
self._db = schema
@@ -1100,6 +1100,7 @@ class SchemaHelper(object):
self.schema_location = location
self._tables = {}
+ self._all = False
def register_columns(self, table, columns):
"""Registers interest in the given 'columns' of 'table'. Future calls
@@ -1117,6 +1118,10 @@ class SchemaHelper(object):
columns = set(columns) | self._tables.get(table, set())
self._tables[table] = columns
+ def register_all(self):
+ """Registers interest in every column of every table."""
+ self._all = True
+
def get_idl_schema(self):
"""Gets a schema appropriate for the creation of an 'ovs.db.id.IDL'
object based on columns registered using the register_columns()
@@ -1124,12 +1129,14 @@ class SchemaHelper(object):
schema = ovs.db.schema.DbSchema.from_json(
ovs.json.from_file(self.schema_location))
- schema_tables = {}
- for table, columns in self._tables.iteritems():
- schema_tables[table] = (
- self._keep_table_columns(schema, table, columns))
- schema.tables = schema_tables
+ if not self._all:
+ schema_tables = {}
+ for table, columns in self._tables.iteritems():
+ schema_tables[table] = (
+ self._keep_table_columns(schema, table, columns))
+
+ schema.tables = schema_tables
return schema
def _keep_table_columns(self, schema, table_name, columns):
diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py
index 5f3cb995..b0e42a35 100644
--- a/tests/test-ovsdb.py
+++ b/tests/test-ovsdb.py
@@ -320,8 +320,9 @@ def idl_set(idl, commands, step):
def do_idl(schema_file, remote, *commands):
- schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schema_file))
- idl = ovs.db.idl.Idl(remote, schema)
+ schema_helper = ovs.db.idl.SchemaHelper(schema_file)
+ schema_helper.register_all()
+ idl = ovs.db.idl.Idl(remote, schema_helper)
if commands:
error, stream = ovs.stream.Stream.open_block(
diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
index eea319a8..7c78251e 100755
--- a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
+++ b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
@@ -205,32 +205,6 @@ def update_in_band_mgmt(row):
row.other_config = other_config
-def keep_table_columns(schema, table_name, columns):
- table = schema.tables.get(table_name)
- if not table:
- raise error.Error("schema has no %s table" % table_name)
-
- new_columns = {}
- for column_name in columns:
- column = table.columns.get(column_name)
- if not column:
- raise error.Error("%s table schema lacks %s column"
- % (table_name, column_name))
- new_columns[column_name] = column
- table.columns = new_columns
- return table
-
-
-def prune_schema(schema):
- new_tables = {}
- new_tables["Bridge"] = keep_table_columns(
- schema, "Bridge", ("name", "external_ids", "other_config",
- "fail_mode"))
- new_tables["Interface"] = keep_table_columns(
- schema, "Interface", ("name", "external_ids"))
- schema.tables = new_tables
-
-
def main():
global flush_cache
@@ -248,10 +222,11 @@ def main():
ovs.daemon.handle_args(args)
remote = args.database
- schema_file = "%s/vswitch.ovsschema" % ovs.dirs.PKGDATADIR
- schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schema_file))
- prune_schema(schema)
- idl = ovs.db.idl.Idl(remote, schema)
+ schema_helper = ovs.db.idl.SchemaHelper()
+ schema_helper.register_columns("Bridge", ["name", "external_ids",
+ "other_config", "fail_mode"])
+ schema_helper.register_columns("Interface", ["name", "external_ids"])
+ idl = ovs.db.idl.Idl(remote, schema_helper)
ovs.daemon.daemonize()