def configure(self, properties): if "template" in properties: fault.check(self.state == State.CREATED, "Cannot change template of prepared device: %s" % self.name) Device.configure(self, properties) if "template" in properties: self.setTemplate(properties["template"]) self._assignTemplate() self.save()
def configure(self, properties): if "template" in properties: fault.check(self.state != State.STARTED, "Cannot change template of running device: %s" % self.name) Device.configure(self, properties) if "template" in properties: self.setTemplate(properties["template"]) if self.state == State.PREPARED: qm.useTemplate(self.host, self.getVmid(), self.getTemplate()) self.save()
def configure(self, properties): if "template" in properties: fault.check(self.state == State.CREATED, "Cannot change template of prepared device: %s" % self.name) if "args" in properties: fault.check(self.state != State.STARTED, "Cannot change arguments of running device: %s" % self.name) Device.configure(self, properties) if "template" in properties: self.setTemplate(properties["template"]) self._assignTemplate() if "args" in properties: self.setArgs(properties["args"]) self._assignTemplate() self.save()
def interfacesAdd(self, name, properties): fault.check(self.state != State.STARTED, "Repy does not support adding interfaces to running VMs: %s" % self.name) import re fault.check(re.match("eth(\d+)", name), "Invalid interface name: %s" % name) try: fault.check(not self.interfaceSetGet(name), "Duplicate interface name: %s" % name) except Interface.DoesNotExist: #pylint: disable-msg=W0702 pass iface = Interface() iface.name = name iface.device = self iface.init() iface.save() Device.interfaceSetAdd(self, iface)
def getStopTasks(self): taskset = Device.getStopTasks(self) stop_vnc = tasks.Task("stop-vnc", self._stopVnc, reverseFn=self._fallbackStop) stop_vm = tasks.Task("stop-vm", self._stopVm, reverseFn=self._fallbackStop) unassign_vnc_port = tasks.Task("unassign-vnc-port", self._unassignVncPort, reverseFn=self._fallbackStop, after=stop_vnc) taskset.add([stop_vnc, stop_vm, unassign_vnc_port]) return self._adaptTaskset(taskset)
def getDestroyTasks(self): taskset = Device.getDestroyTasks(self) destroy_vm = tasks.Task("destroy-vm", self._destroyVm, reverseFn=self._fallbackDestroy) unassign_vmid = tasks.Task("unassign-vmid", self._unassignVmid, after=destroy_vm, reverseFn=self._fallbackDestroy) unassign_host = tasks.Task("unassign-host", self._unassignHost, after=unassign_vmid, reverseFn=self._fallbackDestroy) taskset.add([destroy_vm, unassign_host, unassign_vmid]) return self._adaptTaskset(taskset)
def toDict(self, auth): res = Device.toDict(self, auth) res["attrs"].update(vmid=self.getVmid(), vnc_port=self.getVncPort(), template=self.getTemplate(), gateway4=self.getAttribute("gateway4"), gateway6=self.getAttribute("gateway6")) if auth: res["attrs"].update(root_password=self.getRootPassword(), vnc_password = self.vncPassword()) return res
def interfacesAdd(self, name, properties): #@UnusedVariable, pylint: disable-msg=W0613 fault.check(self.state != State.STARTED, "Changes of running KVMs are not supported") fault.check(re.match("eth(\d+)", name), "Invalid interface name: %s" % name) iface = Interface() try: if self.interfaceSetGet(name): raise fault.new("Duplicate interface name: %s" % name) except Interface.DoesNotExist: #pylint: disable-msg=W0702 pass iface.name = name iface.device = self iface.init() if self.state == State.PREPARED: qm.addInterface(self.host, self.getVmid(), iface.name) iface.save() Device.interfaceSetAdd(self, iface)
def interfacesAdd(self, name, properties): fault.check(self.state != State.STARTED, "OpenVZ does not support adding interfaces to running VMs: %s" % self.name) import re fault.check(re.match("eth(\d+)", name), "Invalid interface name: %s" % name) try: fault.check(not self.interfaceSetGet(name), "Duplicate interface name: %s" % name) except Interface.DoesNotExist: #pylint: disable-msg=W0702 pass iface = ConfiguredInterface() iface.name = name iface.device = self iface.init() if self.state == State.PREPARED or self.state == State.STARTED: vzctl.addInterface(self.host, self.getVmid(), iface.name) iface.configure(properties) iface.save() Device.interfaceSetAdd(self, iface)
def getStartTasks(self): taskset = Device.getStartTasks(self) start_vm = tasks.Task("start-vm", self._startVm, reverseFn=self._fallbackStop) for iface in self.interfaceSetAll(): taskset.add(tasks.Task("start-interface-%s" % iface, self._startIface, args=(iface,), reverseFn=self._fallbackStop, after=start_vm)) assign_vnc_port = tasks.Task("assign-vnc-port", self._assignVncPort, reverseFn=self._fallbackStop) start_vnc = tasks.Task("start-vnc", self._startVnc, reverseFn=self._fallbackStop, after=[start_vm, assign_vnc_port]) taskset.add([start_vm, assign_vnc_port, start_vnc]) return self._adaptTaskset(taskset)
def getPrepareTasks(self): taskset = Device.getPrepareTasks(self) assign_template = tasks.Task("assign-template", self._assignTemplate, reverseFn=self._fallbackDestroy) assign_host = tasks.Task("assign-host", self._assignHost, reverseFn=self._fallbackDestroy) assign_vmid = tasks.Task("assign-vmid", self._assignVmid, reverseFn=self._fallbackDestroy, after=assign_host) create_vm = tasks.Task("create-vm", self._createVm, reverseFn=self._fallbackDestroy, after=assign_vmid) configure_vm = tasks.Task("configure-vm", self._configureVm, reverseFn=self._fallbackDestroy, after=create_vm) create_interfaces = tasks.Task("create-interfaces", self._createInterfaces, reverseFn=self._fallbackDestroy, after=configure_vm) taskset.add([assign_template, assign_host, assign_vmid, create_vm, configure_vm, create_interfaces]) return self._adaptTaskset(taskset)
def getCapabilities(self, user): capabilities = Device.getCapabilities(self, user) isUser = self.topology.checkAccess(Permission.ROLE_USER, user) capabilities["configure"].update({ "template": self.state == State.CREATED, "args": self.state != State.STARTED, }) capabilities.update(other={ "console": isUser and self.getVncPort() and self.state == State.STARTED }) return capabilities
def getIdUsage(self, host): ids = Device.getIdUsage(self, host) if self.vnc_port and self.host == host: ids["port"] = ids.get("port", set()) | set((self.vnc_port,)) if self.vmid and self.host == host: ids["vmid"] = ids.get("vmid", set()) | set((self.vmid,)) if self.hasAttribute("migration"): migration = self.getAttribute("migration") if host.name in migration: ids["vmid"] |= set((migration[host.name],)) return ids
def getPrepareTasks(self): taskset = Device.getPrepareTasks(self) assign_template = tasks.Task("assign-template", self._assignTemplate) assign_host = tasks.Task("assign-host", self._assignHost) assign_vmid = tasks.Task("assign-vmid", self._assignVmid, after=assign_host) create_vm = tasks.Task("create-vm", self._createVm, reverseFn=self._fallbackDestroy, after=assign_vmid) use_template = tasks.Task("use-template", self._useTemplate, reverseFn=self._fallbackDestroy, after=create_vm) configure_vm = tasks.Task("configure-vm", self._configureVm, reverseFn=self._fallbackDestroy, after=create_vm) for iface in self.interfaceSetAll(): taskset.add(tasks.Task("create-interface-%s" % iface.name, self._createIface, args=(iface,), reverseFn=self._fallbackDestroy, after=create_vm)) taskset.add([assign_template, assign_host, assign_vmid, create_vm, use_template, configure_vm]) return self._adaptTaskset(taskset)
def configure(self, properties): if "template" in properties: fault.check(self.state == State.CREATED, "Cannot change template of prepared device: %s" % self.name) Device.configure(self, properties) if "root_password" in properties: self.setRootPassword(properties["root_password"]) if self.state == State.PREPARED or self.state == State.STARTED: vzctl.setUserPassword(self.host, self.getVmid(), self.getRootPassword(), username="******") if "gateway4" in properties: self.setAttribute("gateway4", properties["gateway4"]) if self.state == State.STARTED: self._configureRoutes() if "gateway6" in properties: self.setAttribute("gateway6", properties["gateway6"]) if self.state == State.STARTED: self._configureRoutes() if "template" in properties: self.setTemplate(properties["template"]) self._assignTemplate() fault.check(self.getTemplate(), "Template not found: %s" % properties["template"]) self.save()
def getStartTasks(self): taskset = Device.getStartTasks(self) create_bridges = tasks.Task("create-bridges", self._createBridges, reverseFn=self._fallbackStop) start_vm = tasks.Task("start-vm", self._startVm, reverseFn=self._fallbackStop, after=create_bridges) check_interfaces_exist = tasks.Task("check-interfaces-exist", self._checkInterfacesExist, reverseFn=self._fallbackStop, after=start_vm) for iface in self.interfaceSetAll(): ts = iface.upcast().getStartTasks() ts.prefix(iface).after(check_interfaces_exist) taskset.add(ts) configure_routes = tasks.Task("configure-routes", self._configureRoutes, reverseFn=self._fallbackStop, after=start_vm) assign_vnc_port = tasks.Task("assign-vnc-port", self._assignVncPort, reverseFn=self._fallbackStop) start_vnc = tasks.Task("start-vnc", self._startVnc, reverseFn=self._fallbackStop, after=[start_vm, assign_vnc_port]) taskset.add([create_bridges, start_vm, check_interfaces_exist, configure_routes, assign_vnc_port, start_vnc]) return self._adaptTaskset(taskset)
def configure(self, properties): #FIXME: default route does not work if "template" in properties: fault.check(self.state == State.CREATED, "Cannot change template of prepared device: %s" % self.name) Device.configure(self, properties) if "root_password" in properties: self.setRootPassword(properties["root_password"]) if self.state == State.PREPARED or self.state == State.STARTED: vzctl.setUserPassword(self.host, self.getVmid(), self.getRootPassword(), username="******") if "gateway4" in properties: self.setAttribute("gateway4", properties["gateway4"]) if self.getAttribute("gateway4") and self.state == State.STARTED: #Note: usage of self as host is intentional ifaceutil.setDefaultRoute(self, self.getAttribute("gateway4")) if "gateway6" in properties: self.setAttribute("gateway6", properties["gateway6"]) if self.getAttribute("gateway6") and self.state == State.STARTED: #Note: usage of self as host is intentional ifaceutil.setDefaultRoute(self, self.getAttribute("gateway6")) if "template" in properties: self.setTemplate(properties["template"]) self._assignTemplate() fault.check(self.getTemplate(), "Template not found: %s" % properties["template"]) self.save()
def getCapabilities(self, user): capabilities = Device.getCapabilities(self, user) isUser = self.topology.checkAccess(Permission.ROLE_USER, user) capabilities["configure"].update({ "template": self.state == State.CREATED, "root_password": True, "gateway4": True, "gateway6": True, }) capabilities["action"].update({ "execute": isUser and self.state == State.STARTED, }) capabilities.update(other={ "console": isUser and self.getVncPort() and self.state == State.STARTED }) return capabilities
def _runAction(self, action, attrs, direct): if action == "execute": return self.execute(attrs["cmd"]) else: return Device._runAction(self, action, attrs, direct)
def toDict(self, auth): res = Device.toDict(self, auth) res["attrs"].update(template=self.getConfiguredTemplate()) if auth: res["attrs"].update(vnc_password=self.vncPassword(), vnc_port=self.getVncPort()) return res
def _runAction(self, action, attrs, direct): if action == "send_keys": return self.sendKeys(attrs["keycodes"]) else: return Device._runAction(self, action, attrs, direct)
"execute": isUser and self.state == State.STARTED, }) capabilities.update(other={ "console": isUser and self.getVncPort() and self.state == State.STARTED }) return capabilities def _runAction(self, action, attrs, direct): if action == "execute": fault.check("cmd" in attrs, "Command not given") try: return self.execute(attrs["cmd"]) except exceptions.CommandError, exc: raise fault.new(str(exc), fault.USER_ERROR) else: return Device._runAction(self, action, attrs, direct) def _startVnc(self): if not self.getVncPort(): self._assignVncPort() if self._vncRunning(): return vzctl.startVnc(self.host, self.getVmid(), self.getVncPort(), self.vncPassword()) def _profileChanged(self): vzctl.setProfile(self.host, self.getVmid(), **self.getProfile().attrs) def _configureRoutes(self): #Note: usage of self as host is intentional ifaceutil.deleteDefaultRoute(self) if self.hasAttribute("gateway4"):
def getStartTasks(self): taskset = Device.getStartTasks(self) taskset.add(tasks.Task("start", self._startDev)) return taskset
def getStopTasks(self): taskset = Device.getStopTasks(self) taskset.add(tasks.Task("stop", self._stopDev)) return taskset
def getPrepareTasks(self): taskset = Device.getPrepareTasks(self) taskset.add(tasks.Task("prepare", self._prepareDev)) return taskset
def toDict(self, auth): res = Device.toDict(self, auth) res["attrs"].update(vnc_port=self.getVncPort(), template=self.getTemplate(), args=self.getArgs()) if auth: res["attrs"].update(vnc_password = self.vncPassword()) return res
def getIdUsage(self, host): ids = Device.getIdUsage(self, host) if self.vnc_port and self.host == host: ids["port"] = ids.get("port", set()) | set((self.vnc_port,)) return ids
def getDestroyTasks(self): taskset = Device.getDestroyTasks(self) taskset.add(tasks.Task("destroy", self._destroyDev)) return taskset