def _startDev(self): host = self.host vmid = self.id state = repy.getState(host, vmid) if not self.getVncPort(): self.host.takeId("port", self.setVncPort) if state == State.CREATED: self._prepareDev() state = repy.getState(host, vmid) for iface in self.interfaceSetAll(): bridge = self.getBridge(iface) assert bridge, "Interface has no bridge %s" % iface ifaceutil.bridgeCreate(self.host, bridge) ifaceutil.ifup(self.host, bridge) try: if state == State.PREPARED: ifaces = [iface.name for iface in self.interfaceSetAll()] repy.start(host, vmid, ifaces, self.getArgs()) for iface in self.interfaceSetAll(): repy.waitForInterface(self.host, self.id, iface.name) ifaceutil.ifup(self.host, self.interfaceDevice(iface)) self.connectToBridge(iface, self.getBridge(iface)) self._startVnc() self.state = State.STARTED self.save() except: try: repy.stop(host, vmid) except: pass raise
def _createBridges(self): for iface in self.interfaceSetAll(): if iface.isConnected(): bridge = self.getBridge(iface) assert bridge, "Interface has no bridge %s" % iface ifaceutil.bridgeCreate(self.host, bridge) ifaceutil.ifup(self.host, bridge)
def _startDev(self): host = self.host vmid = self.getVmid() state = vzctl.getState(host, vmid) if state == State.CREATED: self._prepareDev() state = vzctl.getState(host, vmid) for iface in self.interfaceSetAll(): bridge = self.getBridge(iface) assert bridge, "Interface has no bridge %s" % iface ifaceutil.bridgeCreate(self.host, bridge) ifaceutil.ifup(self.host, bridge) try: if state == State.PREPARED: vzctl.start(host, vmid) for iface in self.interfaceSetAll(): assert util.waitFor(lambda: ifaceutil.interfaceExists(host, self.interfaceDevice(iface))) self.connectToBridge(iface, self.getBridge(iface)) iface.upcast()._configureNetwork() self._startVnc() self.state = State.STARTED self.save() except: try: vzctl.stop(host, vmid) except: pass raise
def _startDev(self): host = self.host vmid = self.vmid state = qm.getState(host, vmid) if not self.getVncPort(): self.host.takeId("port", self.setVncPort) if state == State.CREATED: self._prepareDev() state = qm.getState(host, vmid) for iface in self.interfaceSetAll(): iface_id = int(re.match("eth(\d+)", iface.name).group(1)) # qm automatically connects ethN to vmbrN # if this bridge does not exist, kvm start fails ifaceutil.bridgeCreate(host, "vmbr%d" % iface_id) try: if state == State.PREPARED: qm.start(host, vmid) for iface in self.interfaceSetAll(): qm.waitForInterface(host, vmid, iface.name) self.connectToBridge(iface, self.getBridge(iface)) self._startVnc() self.state = State.STARTED self.save() except: try: qm.stop(host, vmid) except: pass raise
def getBridge(self, connection, create=True): bridge_id = connection.getBridgeId() assert bridge_id name = "gbr_%d" % bridge_id if create: host = connection.getHost() ifaceutil.bridgeCreate(host, name) return name
def connectToBridge(self): dev = self.device.upcast() bridge = dev.getBridge(self) if self.isConnected(): if not ifaceutil.bridgeExists(dev.host, bridge): ifaceutil.bridgeCreate(dev.host, bridge) ifaceutil.bridgeConnect(dev.host, bridge, self.interfaceName()) ifaceutil.ifup(dev.host, self.interfaceName())
def getBridge(self, connection, assign=True, create=True): assert connection.getHost(), "Interface is not prepared: %s" % connection.interface for enb in self.used_network.externalnetworkbridge_set.all(): if enb.host == connection.getHost(): if create: ifaceutil.bridgeCreate(enb.host, enb.bridge) return enb.bridge assert False, "No external network bridge %s(%s) on host %s" % (self.getNetworkType(), self.getNetworkGroup(), connection.interface.device.host)
def _startVm(self): for iface in self.interfaceSetAll(): iface_id = int(re.match("eth(\d+)", iface.name).group(1)) # qm automatically connects ethN to vmbrN # if this bridge does not exist, kvm start fails if not ifaceutil.interfaceExists(self.host, "vmbr%d" % iface_id): ifaceutil.bridgeCreate(self.host, "vmbr%d" % iface_id) qm.start(self.host, self.getVmid()) for iface in self.interfaceSetAll(): qm.waitForInterface(self.host, self.getVmid(), iface.name)
def connectToBridge(self, iface, bridge): ifaceutil.bridgeCreate(self.host, bridge) ifaceutil.bridgeConnect(self.host, bridge, self.interfaceDevice(iface)) ifaceutil.ifup(self.host, bridge)