예제 #1
0
	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()
예제 #2
0
파일: emulated.py 프로젝트: m3z/ToMaTo
 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())
예제 #3
0
파일: vpn.py 프로젝트: m3z/ToMaTo
	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()
예제 #4
0
파일: openvz.py 프로젝트: m3z/ToMaTo
	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))
예제 #5
0
파일: common.py 프로젝트: m3z/ToMaTo
	def _assignVmid(self):
		if not self.getVmid():
			assert self.host
			self.vmid = resources.take(self.host, "vmid", self, self.VMID_SLOT)
			self.save()
예제 #6
0
파일: common.py 프로젝트: m3z/ToMaTo
	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()
예제 #7
0
파일: emulated.py 프로젝트: m3z/ToMaTo
 def _assignIfb(self):
     if not self.hasIfbId():
         self.ifb_id = resources.take(self.getHost(), "ifb", self, self.IFB_ID_SLOT)
         self.save()
예제 #8
0
파일: vpn.py 프로젝트: m3z/ToMaTo
	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()
예제 #9
0
파일: vpn.py 프로젝트: m3z/ToMaTo
	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()