/libvirt/driver.py
def init_host(self, host):
libvirt.registerErrorHandler(libvirt_error_handler, None)
libvirt.virEventRegisterDefaultImpl()
if not self.has_min_version(MIN_LIBVIRT_VERSION):
major = MIN_LIBVIRT_VERSION[0]
minor = MIN_LIBVIRT_VERSION[1]
micro = MIN_LIBVIRT_VERSION[2]
LOG.error(_('Nova requires libvirt version '
'%(major)i.%(minor)i.%(micro)i or greater.'),
{'major': major, 'minor': minor, 'micro': micro})
self._init_ovs_bridge()
self._init_events()
def _init_ovs_bridge(self):
try:
instance_names = self.list_instances()
except:
LOG.exception(_("Get libvirt instance list failed!"))
all_used_interfaces = []
interfaces = []
all_exist_qbrs = []
for name in instance_names:
try:
domain = self._lookup_by_name(name)
xml = domain.XMLDesc(0)
interfaces = self.get_interfaces(xml)
except:
LOG.exception(_("Get libvirt instance' interfaces failed!"))
all_used_interfaces += interfaces
try:
all_exist_qbrs = self.vif_driver.get_ovs_bridges()
except:
LOG.exception(_("Get ovs bridges failed!"))
all_exist_qbrs = [qbr[3:] for qbr in all_exist_qbrs]
all_used_interfaces = [interface[3:] for interface in all_used_interfaces]
redundancy_qbr = [val for val in all_exist_qbrs if val not in all_used_interfaces]
LOG.info(_("The qbr list %s will be deleted",redundancy_qbr))
try:
self.vif_driver.delete_ovs_bridges(redundancy_qbr)
except:
LOG.exception(_("Delete ovs redundancy bridge failed!"))
/libvirt/vif.py
def get_ovs_bridges(self):
cmd = 'ovs-vsctl show | grep qbr | grep -v Port | grep -v Interface | sed \'s/"/ /g\' | awk \'{print $2}\''
out, err = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE).communicate()
return out.splitlines()
def delete_ovs_bridges(self,vifs):
for vif in vifs:
br_name = 'qbr' + vif
utils.execute('ovs-vsctl','--if-exists', 'del-br', br_name, run_as_root=True)
qvi_port = 'qvi' + vif
utils.execute('ovs-vsctl','--if-exists', 'del-port', qvi_port, run_as_root=True)
qvn_port = 'qvn' + vif
utils.execute('ovs-vsctl','--if-exists', 'del-port', qvn_port, run_as_root=True)
qvo_port = 'qvo' + vif
utils.execute('ovs-vsctl','--if-exists', 'del-port', qvo_port, run_as_root=True)