def __init__(self, screen, title, settings): self.settings = settings self.memory = FloatField("memory", float(settings["memory"]) / 1024) self.swap = FloatField("swap", float(settings["swap"]) / 1024) self.vcpu = IntegerField("vcpu", settings["vcpu"]) self.bootorder = IntegerField("bootorder", settings.get("bootorder"), required=False) self.disk = FloatField("diskspace", float(settings["diskspace"]["/"]) / 1024) self.ioprio = RadioBarField("ioprio", screen, [('Low ', 0, settings["ioprio"] == 0), ('Default', 4, settings["ioprio"] == 4), ('High ', 7, settings["ioprio"] == 7)]) self.bind_mounts = BindMountsField("bind_mounts", settings["bind_mounts"], required=False) self.vcpulimit = IntegerField("vcpulimit", settings["vcpulimit"], min_value=0, max_value=100) self.onboot = CheckboxField("onboot", settings.get("onboot", 0), display_name="Start on boot") self.ctid = IntegerField('ctid', settings['ctid'], display_name='VEID', required=False) self.hostname = StringField("hostname", settings.get("name", "")) Form.__init__(self, screen, title, [ self.memory, self.vcpu, self.disk, self.ioprio, self.hostname, self.bind_mounts, self.swap, self.onboot, self.bootorder, self.vcpulimit, self.ctid ])
def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"], settings["memory_min"], settings["memory_max"]) self.swap = FloatField("swap", settings["swap"], settings["swap_min"], settings["swap_max"]) self.vcpu = FloatField("vcpu", settings["vcpu"], settings["vcpu_min"], settings["vcpu_max"]) self.vcpulimit = IntegerField("vcpulimit", settings["vcpulimit"], settings["vcpulimit_min"], settings["vcpulimit_max"]) self.disk = FloatField("disk", settings["disk"], settings["disk_min"], settings["disk_max"]) self.ioprio = RadioBarField("ioprio", screen, [('Low ', 0, settings["ioprio"] == 0), ('Default', 4, settings["ioprio"] == 4), ('High ', 7, settings["ioprio"] == 7)]) self.bind_mounts = BindMountsField("bind_mounts", settings["bind_mounts"], required=False) self.hostname = StringField("hostname", settings.get("hostname", "")) self.ip_address = IpField("ip_address", settings["ip_address"], display_name="IP address") self.nameserver = IpField("nameserver", settings["nameserver"]) self.password = PasswordField("passwd", settings["passwd"], display_name="password") self.password2 = PasswordField("passw2", settings["passwd"], display_name="password") self.ostemplate = StringField("ostemplate", settings["ostemplate"], display_name="OS template") self.startvm = CheckboxField("startvm", settings.get("startvm", 0), display_name="Start VM") self.onboot = CheckboxField("onboot", settings.get("onboot", 0), display_name="Start on boot") Form.__init__(self, screen, title, [ self.memory, self.swap, self.vcpu, self.vcpulimit, self.disk, self.ioprio, self.bind_mounts, self.hostname, self.ip_address, self.nameserver, self.password, self.password2, self.ostemplate, self.startvm, self.onboot ]) self.settings = settings # save passed parameters for convenience
def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"], settings["memory_min"], settings["memory_max"]) self.vcpu = IntegerField("vcpu", settings["vcpu"], settings["vcpu_min"], settings["vcpu_max"]) self.hostname = StringField("hostname", settings.get("hostname", "")) Form.__init__(self, screen, title, [self.memory, self.vcpu, self.hostname])
def _define_fields(self, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.template_name = StringField('template_name', settings.get('template_name'), display_name='template name', required=False) return [ self.memory, self.memory_min, self.vcpu, self.vcpu_min, self.template_name ]
class OpenvzTemplateForm(Form): def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.disk = FloatField("disk", settings["disk"]) self.ostemplate = StringField("ostemplate", settings.get("ostemplate", "")) Form.__init__(self, screen, title, [self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.disk, self.ostemplate]) def display(self): button_save, button_exit = Button("Create"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "OS template:", 0, 0), self.ostemplate), separator, (button_exit, button_save) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit def validate(self): if Form.validate(self): self.errors.extend(validate_range("memory", self.memory.value(), self.memory_min.value(), self.memory_max.value(), float)) self.errors.extend(validate_range("vcpu", self.vcpu.value(), self.vcpu_min.value(), self.vcpu_max.value(), int)) return not self.errors
def __init__(self, screen, title, settings): self.settings = settings self.memory = FloatField("memory", float(settings["memory"]) / 1024) self.swap = FloatField("swap", float(settings["swap"]) / 1024) self.vcpu = IntegerField("vcpu", settings["vcpu"]) self.bootorder = IntegerField("bootorder", settings.get("bootorder"), required=False) self.disk = FloatField("diskspace", float(settings["diskspace"]["/"]) / 1024) self.ioprio = RadioBarField("ioprio", screen, [('Low ', 0, settings["ioprio"] == 0), ('Default', 4, settings["ioprio"] == 4), ('High ', 7, settings["ioprio"] == 7)]) self.bind_mounts = BindMountsField("bind_mounts", settings["bind_mounts"], required=False) self.vcpulimit = IntegerField("vcpulimit", settings["vcpulimit"], min_value=0, max_value=100) self.onboot = CheckboxField("onboot", settings.get("onboot", 0), display_name="Start on boot") self.ctid = IntegerField('ctid', settings['ctid'], display_name='VEID', required=False) self.hostname = StringField("hostname", settings.get("name", "")) Form.__init__(self, screen, title, [self.memory, self.vcpu, self.disk, self.ioprio, self.hostname, self.bind_mounts, self.swap, self.onboot, self.bootorder, self.vcpulimit, self.ctid])
def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.disk = FloatField("disk", settings["disk"]) self.ostemplate = StringField("ostemplate", settings.get("ostemplate", "")) Form.__init__(self, screen, title, [self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.disk, self.ostemplate])
def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.username = StringField("username", settings.get("username", ''), display_name="username") self.password = PasswordField("passwd", settings.get("passwd", ''), display_name="password") self.password2 = PasswordField("passw2", settings.get("passwd", ''), display_name="password") Form.__init__(self, screen, title, [self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.username, self.password])
class OpenvzModificationForm(Form): def __init__(self, screen, title, settings): self.settings = settings self.memory = FloatField("memory", float(settings["memory"]) / 1024) self.swap = FloatField("swap", float(settings["swap"]) / 1024) self.vcpu = IntegerField("vcpu", settings["vcpu"]) self.bootorder = IntegerField("bootorder", settings.get("bootorder"), required=False) self.disk = FloatField("diskspace", float(settings["diskspace"]["/"]) / 1024) self.ioprio = RadioBarField("ioprio", screen, [('Low ', 0, settings["ioprio"] == 0), ('Default', 4, settings["ioprio"] == 4), ('High ', 7, settings["ioprio"] == 7)]) self.bind_mounts = BindMountsField("bind_mounts", settings["bind_mounts"], required=False) self.vcpulimit = IntegerField("vcpulimit", settings["vcpulimit"], min_value=0, max_value=100) self.onboot = CheckboxField("onboot", settings.get("onboot", 0), display_name="Start on boot") self.ctid = IntegerField('ctid', settings['ctid'], display_name='VEID', required=False) self.hostname = StringField("hostname", settings.get("name", "")) Form.__init__(self, screen, title, [ self.memory, self.vcpu, self.disk, self.ioprio, self.hostname, self.bind_mounts, self.swap, self.onboot, self.bootorder, self.vcpulimit, self.ctid ]) def display(self): button_save, button_exit = Button("Update"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [(Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), separator, (Textbox(20, 1, "Swap size (GB):", 0, 0), self.swap), separator, (Textbox(20, 1, "Nr. of CPUs:", 0, 0), self.vcpu), separator, (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "IO Priority:", 0, 0), self.ioprio), separator, (Textbox(20, 1, "Bind mounts:", 0, 0), self.bind_mounts), (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "/src1,/dst1;/srcN,..", 0, 0)), separator, (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), separator, (Textbox(20, 1, "", 0, 0), self.onboot), separator, (Textbox(20, 1, "Boot order:", 0, 0), self.bootorder), separator, (Textbox(20, 1, "VEID:", 0, 0), self.ctid), separator, (button_exit, button_save)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit def validate(self): # TODO disallow decrease of disk size, which would break OS Form.validate(self) bm_valid = self.bind_mounts.validate() if bm_valid: error_str = "\n".join([s[1] for s in bm_valid]) self.errors.append(("bind_mounts", "%s" % error_str)) if self.memory.value() < self.settings["memory_min"]: err_msg = ( "Memory size can not be lower than minimum defined in template: %s GB" % self.settings["memory_min"]) self.errors.append(("memory", err_msg)) return not self.errors
def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.username = StringField("username", settings.get("username", ''), display_name="username") self.password = PasswordField("passwd", settings.get("passwd", ''), display_name="password") self.password2 = PasswordField("passw2", settings.get("passwd", ''), display_name="password") Form.__init__(self, screen, title, [ self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.username, self.password ])
class KvmTemplateForm(Form): def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.username = StringField("username", settings.get("username", ''), display_name="username") self.password = PasswordField("passwd", settings.get("passwd", ''), display_name="password") self.password2 = PasswordField("passw2", settings.get("passwd", ''), display_name="password") Form.__init__(self, screen, title, [ self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.username, self.password ]) def display(self): button_save, button_exit = Button("Create"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [(Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (Textbox(20, 1, "Default admin:", 0, 0), self.username), separator, (Textbox(20, 1, "Root password:"******"Root password x2:", 0, 0), self.password2), separator, (button_exit, button_save)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit def validate(self): if Form.validate(self): if (self.memory_min.value() and self.memory_max.value() and float( self.memory_min.value()) > float(self.memory_max.value())): self.errors.extend([("memory", "Min memory exceeds max memory value.")]) else: self.errors.extend( validate_range("memory", self.memory.value(), self.memory_min.value(), self.memory_max.value(), float)) self.errors.extend( validate_range("vcpu", self.vcpu.value(), self.vcpu_min.value(), self.vcpu_max.value(), int)) if (self.password.validate() and self.password2.validate() and self.password.value() != self.password2.value()): self.errors.extend(("passwd", "Passwords don't match.")) return not self.errors
def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.disk = FloatField("disk", settings["disk"]) self.ostemplate = StringField("ostemplate", settings.get("ostemplate", "")) Form.__init__(self, screen, title, [ self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.disk, self.ostemplate ])
class OpenvzTemplateForm(Form): def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.disk = FloatField("disk", settings["disk"]) self.ostemplate = StringField("ostemplate", settings.get("ostemplate", "")) Form.__init__(self, screen, title, [ self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.disk, self.ostemplate ]) def display(self): button_save, button_exit = Button("Create"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [(Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "OS template:", 0, 0), self.ostemplate), separator, (button_exit, button_save)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit def validate(self): if Form.validate(self): self.errors.extend( validate_range("memory", self.memory.value(), self.memory_min.value(), self.memory_max.value(), float)) self.errors.extend( validate_range("vcpu", self.vcpu.value(), self.vcpu_min.value(), self.vcpu_max.value(), int)) return not self.errors
class OpenvzModificationForm(Form): def __init__(self, screen, title, settings): self.settings = settings self.memory = FloatField("memory", float(settings["memory"]) / 1024) self.swap = FloatField("swap", float(settings["swap"]) / 1024) self.vcpu = IntegerField("vcpu", settings["vcpu"]) self.bootorder = IntegerField("bootorder", settings.get("bootorder"), required=False) self.disk = FloatField("diskspace", float(settings["diskspace"]["/"]) / 1024) self.ioprio = RadioBarField("ioprio", screen, [('Low ', 0, settings["ioprio"] == 0), ('Default', 4, settings["ioprio"] == 4), ('High ', 7, settings["ioprio"] == 7)]) self.bind_mounts = BindMountsField("bind_mounts", settings["bind_mounts"], required=False) self.vcpulimit = IntegerField("vcpulimit", settings["vcpulimit"], min_value=0, max_value=100) self.onboot = CheckboxField("onboot", settings.get("onboot", 0), display_name="Start on boot") self.ctid = IntegerField('ctid', settings['ctid'], display_name='VEID', required=False) self.hostname = StringField("hostname", settings.get("name", "")) Form.__init__(self, screen, title, [self.memory, self.vcpu, self.disk, self.ioprio, self.hostname, self.bind_mounts, self.swap, self.onboot, self.bootorder, self.vcpulimit, self.ctid]) def display(self): button_save, button_exit = Button("Update"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), separator, (Textbox(20, 1, "Swap size (GB):", 0, 0), self.swap), separator, (Textbox(20, 1, "Nr. of CPUs:", 0, 0), self.vcpu), separator, (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "IO Priority:", 0, 0), self.ioprio), separator, (Textbox(20, 1, "Bind mounts:", 0, 0), self.bind_mounts), (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "/src1,/dst1;/srcN,..", 0, 0)), separator, (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), separator, (Textbox(20, 1, "", 0, 0), self.onboot), separator, (Textbox(20, 1, "Boot order:", 0, 0), self.bootorder), separator, (Textbox(20, 1, "VEID:", 0, 0), self.ctid), separator, (button_exit, button_save) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit def validate(self): # TODO disallow decrease of disk size, which would break OS Form.validate(self) bm_valid = self.bind_mounts.validate() if bm_valid: error_str = "\n".join([s[1] for s in bm_valid]) self.errors.append(("bind_mounts", "%s" % error_str)) if self.memory.value() < self.settings["memory_min"]: err_msg = ("Memory size can not be lower than minimum defined in template: %s GB" % self.settings["memory_min"]) self.errors.append(("memory", err_msg)) return not self.errors
class KvmTemplateForm(Form): def __init__(self, screen, title, settings): self.memory = FloatField("memory", settings["memory"]) self.memory_min = FloatField("memory_min", settings.get("memory_min", ""), display_name="min memory", required=False) self.memory_max = FloatField("memory_max", settings.get("memory_max", ""), display_name="max memory", required=False) self.vcpu = FloatField("vcpu", settings["vcpu"]) self.vcpu_min = FloatField("vcpu_min", settings.get("vcpu_min", ""), display_name="min vcpu", required=False) self.vcpu_max = FloatField("vcpu_max", settings.get("vcpu_max", ""), display_name="max vcpu", required=False) self.username = StringField("username", settings.get("username", ''), display_name="username") self.password = PasswordField("passwd", settings.get("passwd", ''), display_name="password") self.password2 = PasswordField("passw2", settings.get("passwd", ''), display_name="password") Form.__init__(self, screen, title, [self.memory, self.memory_min, self.memory_max, self.vcpu, self.vcpu_min, self.vcpu_max, self.username, self.password]) def display(self): button_save, button_exit = Button("Create"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (Textbox(20, 1, "Default admin:", 0, 0), self.username), separator, (Textbox(20, 1, "Root password:"******"Root password x2:", 0, 0), self.password2), separator, (button_exit, button_save) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit def validate(self): if Form.validate(self): if (self.memory_min.value() and self.memory_max.value() and float(self.memory_min.value()) > float(self.memory_max.value())): self.errors.extend([("memory", "Min memory exceeds max memory value.")]) else: self.errors.extend(validate_range("memory", self.memory.value(), self.memory_min.value(), self.memory_max.value(), float)) self.errors.extend(validate_range("vcpu", self.vcpu.value(), self.vcpu_min.value(), self.vcpu_max.value(), int)) if (self.password.validate() and self.password2.validate() and self.password.value() != self.password2.value()): self.errors.extend(("passwd", "Passwords don't match.")) return not self.errors