git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ovs-xapi-sync: Add unixctl support.
[sliver-openvswitch.git]
/
xenserver
/
usr_share_openvswitch_scripts_ovs-xapi-sync
diff --git
a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
index
0ffccc2
..
8f5885a
100755
(executable)
--- a/
xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
+++ b/
xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
@@
-35,11
+35,18
@@
from ovs.db import error
from ovs.db import types
import ovs.daemon
import ovs.db.idl
from ovs.db import types
import ovs.daemon
import ovs.db.idl
+import ovs.unixctl
-root_prefix = '' # Prefix for absolute file names, for testing.
vlog = ovs.vlog.Vlog("ovs-xapi-sync")
session = None
force_run = False
vlog = ovs.vlog.Vlog("ovs-xapi-sync")
session = None
force_run = False
+exiting = False
+
+
+def unixctl_exit(conn, unused_argv, unused_aux):
+ global exiting
+ exiting = True
+ conn.reply(None)
# Set up a session to interact with XAPI.
# Set up a session to interact with XAPI.
@@
-193,14
+200,6
@@
def update_in_band_mgmt(row):
row.other_config = other_config
row.other_config = other_config
-def update_bridge_id(row):
- id_ = get_bridge_id(row.name, row.external_ids.get("xs-network-uuids"))
- if not id_:
- return
-
- set_external_id(row, "bridge-id", id_.split(";")[0])
-
-
def keep_table_columns(schema, table_name, columns):
table = schema.tables.get(table_name)
if not table:
def keep_table_columns(schema, table_name, columns):
table = schema.tables.get(table_name)
if not table:
@@
-239,7
+238,7
@@
def main():
parser = argparse.ArgumentParser()
parser.add_argument("database", metavar="DATABASE",
help="A socket on which ovsdb-server is listening.")
parser = argparse.ArgumentParser()
parser.add_argument("database", metavar="DATABASE",
help="A socket on which ovsdb-server is listening.")
- parser.add_argument("--root-prefix", metavar="DIR",
+ parser.add_argument("--root-prefix", metavar="DIR",
default='',
help="Use DIR as alternate root directory"
" (for testing).")
help="Use DIR as alternate root directory"
" (for testing).")
@@
-249,10
+248,6
@@
def main():
ovs.vlog.handle_args(args)
ovs.daemon.handle_args(args)
ovs.vlog.handle_args(args)
ovs.daemon.handle_args(args)
- global root_prefix
- if args.root_prefix:
- 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))
remote = args.database
schema_file = "%s/vswitch.ovsschema" % ovs.dirs.PKGDATADIR
schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schema_file))
@@
-261,22
+256,32
@@
def main():
ovs.daemon.daemonize()
ovs.daemon.daemonize()
+ ovs.unixctl.command_register("exit", "", 0, 0, unixctl_exit, None)
+ error, unixctl_server = ovs.unixctl.UnixctlServer.create(None)
+ if error:
+ ovs.util.ovs_fatal(error, "could not create unixctl server", vlog)
+
# This daemon is usually started before XAPI, but to complete our
# tasks, we need it. Wait here until it's up.
# This daemon is usually started before XAPI, but to complete our
# tasks, we need it. Wait here until it's up.
- cookie_file = root_prefix + "/var/run/xapi_init_complete.cookie"
+ cookie_file =
args.
root_prefix + "/var/run/xapi_init_complete.cookie"
while not os.path.exists(cookie_file):
time.sleep(1)
signal.signal(signal.SIGHUP, handler)
while not os.path.exists(cookie_file):
time.sleep(1)
signal.signal(signal.SIGHUP, handler)
- bridges = {} # Map from bridge name to
xs_network_uuids
+ bridges = {} # Map from bridge name to
nicira-bridge-id
iface_ids = {} # Map from xs-vif-uuid to iface-id
vm_ids = {} # Map from xs-vm-uuid to vm-id
seqno = idl.change_seqno # Sequence number when we last processed the db
while True:
iface_ids = {} # Map from xs-vif-uuid to iface-id
vm_ids = {} # Map from xs-vm-uuid to vm-id
seqno = idl.change_seqno # Sequence number when we last processed the db
while True:
+ unixctl_server.run()
+ if exiting:
+ break;
+
idl.run()
if not force_run and seqno == idl.change_seqno:
poller = ovs.poller.Poller()
idl.run()
if not force_run and seqno == idl.change_seqno:
poller = ovs.poller.Poller()
+ unixctl_server.wait(poller)
idl.wait(poller)
poller.block()
continue
idl.wait(poller)
poller.block()
continue
@@
-293,15
+298,22
@@
def main():
new_bridges = {}
for row in idl.tables["Bridge"].rows.itervalues():
new_bridges = {}
for row in idl.tables["Bridge"].rows.itervalues():
- old_xnu = bridges.get(row.name)
- new_xnu = row.external_ids.get("xs-network-uuids", "")
-
if old_xnu is Non
e:
+ if row.name in bridges:
+ nbd = bridges[row.name]
+
els
e:
# New bridge.
update_fail_mode(row)
update_in_band_mgmt(row)
# New bridge.
update_fail_mode(row)
update_in_band_mgmt(row)
+ nbd = get_bridge_id(row.name)
- update_bridge_id(row)
- new_bridges[row.name] = new_xnu
+ bridge_id = nbd
+ if bridge_id is None:
+ bridge_id = row.external_ids.get("xs-network-uuids")
+
+ if bridge_id is not None:
+ set_external_id(row, "bridge-id", bridge_id.split(";")[0])
+
+ new_bridges[row.name] = nbd
bridges = new_bridges
iface_by_name = {}
bridges = new_bridges
iface_by_name = {}
@@
-374,6
+386,9
@@
def main():
txn.commit_block()
txn.commit_block()
+ unixctl_server.close()
+ idl.close()
+
if __name__ == '__main__':
try:
if __name__ == '__main__':
try: