%(command-name)s --session <SESSION-REF> --pif <PIF-REF> [up|down|rewrite]
%(command-name)s --force <BRIDGE> [up|down|rewrite <CONFIG>]
%(command-name)s --force all down
+ %(command-name)s init-dbcache
where,
<CONFIG> = --device=<INTERFACE> --mode=dhcp
# 3. A network may have an associated bridge, allowing vifs to be attached
# 4. A network may be bridgeless (there's no point having a bridge over a storage pif)
-# XXX: --force-interface=all down
-
-# XXX: --force-interface rewrite
-
-# XXX: Sometimes this leaves "orphaned" datapaths, e.g. a datapath whose
-# only port is the local port. Should delete those.
-
-# XXX: This can leave crud in ovs-vswitchd.conf in this scenario:
-# - Create bond in XenCenter.
-# - Create VLAN on bond in XenCenter.
-# - Attempt to delete bond in XenCenter (this will fail because there
-# is a VLAN on the bond, although the error may not be reported
-# until the next step)
-# - Delete VLAN in XenCenter.
-# - Delete bond in XenCenter.
-# At this point there will still be some configuration data for the bond
-# or the VLAN in ovs-vswitchd.conf.
-
import XenAPI
import os, sys, getopt, time, signal
import syslog
'MAC': (str_to_xml,str_from_xml),
'other_config': (lambda x, p, t, v: otherconfig_to_xml(x, p, v, PIF_OTHERCONFIG_ATTRS),
lambda n: otherconfig_from_xml(n, PIF_OTHERCONFIG_ATTRS)),
+
+ # Special case: We write the current value
+ # PIF.currently-attached to the cache but since it will
+ # not be valid when we come to use the cache later
+ # (i.e. after a reboot) we always read it as False.
+ 'currently_attached': (bool_to_xml, lambda n: False),
}
PIF_OTHERCONFIG_ATTRS = [ 'domain', 'peerdns', 'defaultroute', 'mtu', 'static-routes' ] + \
rec = session.xenapi.network.get_record(n)
self.__networks[n] = {}
for f in NETWORK_ATTRS:
- self.__networks[n][f] = rec[f]
+ if f == "PIFs":
+ # drop PIFs on other hosts
+ self.__networks[n][f] = [p for p in rec[f] if self.__pif_on_host(p)]
+ else:
+ self.__networks[n][f] = rec[f]
self.__networks[n]['other_config'] = {}
for f in NETWORK_OTHERCONFIG_ATTRS:
if not rec['other_config'].has_key(f): continue
run_ethtool(device, oc)
def modify_config(commands):
- run_command(['/root/vswitch/bin/ovs-cfg-mod', '-vANY:console:emer',
+ run_command(['/usr/bin/ovs-cfg-mod', '-vANY:console:emer',
'-F', '/etc/ovs-vswitchd.conf']
+ commands + ['-c'])
run_command(['/sbin/service', 'vswitch', 'reload'])
# - The networks corresponding to any VLANs attached to the
# datapath's PIF.
network_uuids = []
- for nwpif in db.get_pifs_by_device({'device': pifrec['device']}):
+ for nwpif in db.get_pifs_by_device(pifrec['device']):
net = db.get_pif_record(nwpif)['network']
network_uuids += [db.get_network_record(net)['uuid']]
if len(force_rewrite_config) and not (force_interface and action == "rewrite"):
raise Usage("\"--force rewrite\" needed for --device, --mode, --ip, --netmask, and --gateway")
+ if action == "init-dbcache" and arglist:
+ raise Usage("\"init-dbcache\" action does not accept any options")
+
global db
if force_interface:
log("Force interface %s %s" % (force_interface, action))
action_down(pif)
else:
raise Usage("Unknown action %s" % action)
+ elif action == "init-dbcache":
+ DatabaseCache().save(dbcache_file)
else:
db = DatabaseCache(session_ref=session)
raise Usage("Unknown action %s" % action)
# Save cache.
- pifrec = db.get_pif_record(pif)
db.save(dbcache_file)
except Usage, err: