def forwards(self, orm): for host in hosts.getAll(): for type in resources.TYPES: resources.createPool(host, type, host.getAttribute("%s_start" % type), host.getAttribute("%s_count" % type)) host.deleteAttribute("%s_start" % type) host.deleteAttribute("%s_count" % type) for obj in m.EmulatedConnection.objects.all(): if obj.getAttribute("capture_port"): host = obj.interface.device.host obj.live_capture_port = resources.take(host, "port", obj, obj.LIVE_CAPTURE_PORT_SLOT, obj.getAttribute("capture_port")) obj.deleteAttribute("capture_port") if not obj.getAttribute("ifb_id") is None: host = obj.interface.device.host obj.ifb_id = resources.take(host, "ifb", obj, obj.IFB_ID_SLOT, obj.getAttribute("ifb_id")) obj.deleteAttribute("ifb_id") obj.save() for obj in orm.TincConnector.objects.all(): if obj.getAttribute("external_access_port"): port = obj.getAttribute("external_access_port") obj.deleteAttribute("external_access_port") cname = obj.getAttribute("external_access_con") obj.deleteAttribute("external_access_con") con = obj.topology.interfacesGet(cname).connection host = con.interface.device.host obj.external_access_port = resources.take(host, "port", obj, obj.EXTERNAL_ACCESS_PORT_SLOT, port) obj.save() for obj in orm.TincConnection.objects.all(): host = obj.interface.device.host if obj.tinc_port and host: pool = orm.ResourcePool.objects.get(host=host, type="port") obj.tinc_port_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="c", owner_id=obj.id, slot="tinc", num=obj.tinc_port) if obj.bridge_id and host: pool = orm.ResourcePool.objects.get(host=host, type="bridge") obj.bridge_id_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="c", owner_id=obj.id, slot="b", num=obj.bridge_id) obj.save() for obj in orm.KVMDevice.objects.all(): if obj.vmid and obj.host: pool = orm.ResourcePool.objects.get(host=obj.host, type="vmid") obj.vmid_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="D", owner_id=obj.id, slot="vmid", num=obj.vmid) if obj.vnc_port and obj.host: pool = orm.ResourcePool.objects.get(host=obj.host, type="port") obj.vnc_port_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="D", owner_id=obj.id, slot="vnc", num=obj.vnc_port) obj.save() for obj in orm.OpenVZDevice.objects.all(): if obj.vmid and obj.host: pool = orm.ResourcePool.objects.get(host=obj.host, type="vmid") obj.vmid_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="D", owner_id=obj.id, slot="vmid", num=obj.vmid) if obj.vnc_port and obj.host: pool = orm.ResourcePool.objects.get(host=obj.host, type="port") obj.vnc_port_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="D", owner_id=obj.id, slot="vnc", num=obj.vnc_port) obj.save() for obj in orm.ProgDevice.objects.all(): if obj.vnc_port and obj.host: pool = orm.ResourcePool.objects.get(host=obj.host, type="port") obj.vnc_port_ref = orm.ResourceEntry.objects.create(pool=pool, owner_type="D", owner_id=obj.id, slot="vnc", num=obj.vnc_port) obj.save()
def _startCaptureViaNet(self): host = self.interface.device.host if not self.getLiveCapturePort(): self.live_capture_port = resources.take(host, "port", self, self.LIVE_CAPTURE_PORT_SLOT) self.save() port = self.getLiveCapturePort() tcpdump.startCaptureViaNet(host, self._captureName(), port, self.getBridge(), self.getCaptureFilter())
def _assignVtunData(self): host = None for con in self.connectionSetAll(): if con.interface.device.host: host = con.interface.device.host break fault.check(host, "Failed to assign a host for external access") if not self.getExternalAccessPort(): self.external_access_port = resources.take(host, "port", self, self.EXTERNAL_ACCESS_PORT_SLOT) self.save()
def migrateRun(self, host=None): if self.state == State.CREATED: self._unassignHost() self._unassignVmid() return task = tasks.get_current_task() #save src data src_host = self.host src_vmid = resources.get(self, self.VMID_SLOT) #assign new host and vmid self.host = None if host: self.host = host else: self._assignHost() dst_host = self.host dst_vmid = resources.take(dst_host, "vmid", self, "migration") #reassign host and vmid self.host = src_host #destroy all connectors and save their state constates={} for iface in self.interfaceSetAll(): if iface.isConnected(): con = iface.connection.connector.upcast() if con.name in constates: continue constates[con.name] = con.state if con.state == State.STARTED: con.stop(True, noProcess=True) if con.state == State.PREPARED: con.destroy(True, noProcess=True) tasks.set_current_task(task) #actually migrate the vm if self.state == State.STARTED: self._stopVnc() try: self.state = State.PREPARED for iface in self.interfaceSetAll(): if iface.isConnected(): con = iface.connection.upcast() con.destroyBridge() finally: self.state = State.STARTED ifaces = map(lambda x: x.name, self.interfaceSetAll()) try: vzctl.migrate(src_host, src_vmid.num, dst_host, dst_vmid.num, self.getTemplate(), ifaces) except: # reverted to SRC host if self.state == State.STARTED: self._startVnc() raise #switch host and vmid self.host = dst_host self.vmid = dst_vmid self.save() resources.give(self, self.VMID_SLOT) self.vmid.slot = self.VMID_SLOT self.vmid.save() self.save() self._configureVm() if self.state == State.STARTED: self._startVnc() #redeploy all connectors for iface in self.interfaceSetAll(): if iface.isConnected(): con = iface.connection.connector.upcast() if not con.name in constates: continue state = constates[con.name] del constates[con.name] if state == State.PREPARED or state == State.STARTED: con.prepare(True, noProcess=True) if state == State.STARTED: con.start(True, noProcess=True) if self.state == State.STARTED: self.connectToBridge(iface, self.getBridge(iface))
def _assignVmid(self): if not self.getVmid(): assert self.host self.vmid = resources.take(self.host, "vmid", self, self.VMID_SLOT) self.save()
def _assignVncPort(self): if not self.getVncPort(): assert self.host self.vnc_port = resources.take(self.host, "port", self, self.VNC_PORT_SLOT) self.save()
def _assignIfb(self): if not self.hasIfbId(): self.ifb_id = resources.take(self.getHost(), "ifb", self, self.IFB_ID_SLOT) self.save()
def _assignBridgeId(self): if not self.getBridgeId(): host = self.getHost() assert host self.bridge_id = resources.take(host, "bridge", self, self.BRIDGE_ID_SLOT) self.save()
def _assignTincPort(self): if not self.getTincPort(): host = self.getHost() assert host self.tinc_port = resources.take(host, "port", self, self.TINC_PORT_SLOT) self.save()