compute服务重启时清除多余的ovs桥

/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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值