コード例 #1
0
def action(networkid):
    from CloudscalerLibcloud.utils.network import Network
    import libvirt

    network = Network()
    try:
        con = network.libvirtutil.connection
        bridges = []
        networkidHex = "%04x" % int(networkid)
        name = "routeros_%s" % networkidHex

        print("CLEANUP: %s/%s" % (networkid, networkidHex))
        dom = None
        try:
            dom = con.lookupByName(name)

            network.cleanup_external(dom)
            network.cleanup_gwmgmt(dom)
            bridges = list(network.libvirtutil._get_domain_bridges(dom))
            dom.destroy()
        except libvirt.libvirtError:
            pass
        if dom is not None:
            try:
                dom.undefine()
            except libvirt.libvirtError:
                pass
        network.libvirtutil.cleanupNetwork(networkid, bridges)
    finally:
        network.close()
    destinationfile = "/var/lib/libvirt/images/routeros/{:04x}/routeros.qcow2".format(
        networkid)
    if j.system.fs.exists(destinationfile):
        j.system.fs.remove(destinationfile)
コード例 #2
0
def cleanup(name, networkid):
    import libvirt
    from CloudscalerLibcloud.utils.network import Network

    network = Network()
    con = network.libvirtutil.connection
    try:
        dom = con.lookupByName(name)
        network.cleanup_external(dom)
        network.cleanup_gwmgmt(dom)
        if dom.isActive():
            dom.destroy()
        dom.undefine()
    except libvirt.libvirtError:
        pass

    try:
        network.libvirt.cleanupNetwork(networkid)
    except:
        network.close()

    destinationfile = "/var/lib/libvirt/images/routeros/{:04x}/routeros.qcow2".format(
        networkid)
    if j.system.fs.exists(destinationfile):
        j.system.fs.remove(destinationfile)
コード例 #3
0
def action(fwobject):
    import os
    import libvirt
    from CloudscalerLibcloud.utils.network import Network, NetworkTool
    internalip = fwobject['host']
    networkid = fwobject['id']
    vlan = fwobject['vlan']
    netinfo = [{
        'type': 'vlan',
        'id': vlan
    }, {
        'type': 'vxlan',
        'id': networkid
    }]

    def protect_interfaces(network, domain):
        for publicip in fwobject['pubips']:
            network.protect_external(domain, publicip)
        network.protect_gwmgmt(domain, internalip)

    network = Network()
    con = network.libvirtutil.connection
    try:
        networkidHex = '%04x' % int(networkid)
        name = 'routeros_%s' % networkidHex
        try:
            domain = con.lookupByName(name)
            if domain.state()[0] == libvirt.VIR_DOMAIN_RUNNING:
                return True
            else:
                with NetworkTool(netinfo, network.libvirtutil):
                    domain.create()
                    protect_interfaces(network, domain)
                    return True
        except:
            bridgename = j.system.ovsnetconfig.getVlanBridge(vlan)
            import jinja2
            networkidHex = '%04x' % int(networkid)
            imagedir = j.system.fs.joinPaths(j.dirs.baseDir,
                                             'apps/routeros/template/')
            xmltemplate = jinja2.Template(
                j.system.fs.fileGetContents(
                    j.system.fs.joinPaths(imagedir, 'routeros-template.xml')))

            destination = '/var/lib/libvirt/images/routeros/%s' % networkidHex
            destinationfile = os.path.join(destination, 'routeros.qcow2')
            xmlsource = xmltemplate.render(networkid=networkidHex,
                                           destinationfile=destinationfile,
                                           publicbridge=bridgename)

            with NetworkTool(netinfo, network.libvirtutil):
                dom = con.defineXML(xmlsource)
                dom.create()
            protect_interfaces(network, dom)
            return True
    finally:
        network.close()
    return True