From 45fe090ba3937c3c02eae1229f2b233189dcea31 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 24 Aug 2011 12:12:50 +0200 Subject: [PATCH] Disk template is no longer required when importing instance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit β¦ provided that disk_template value is set in the config.ini file. Signed-off-by: Agata Murawska <agatamurawska@google.com> Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/cmdlib.py | 4 ++++ lib/opcodes.py | 21 +++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 53fe0f6bb..058eb23df 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -8402,6 +8402,10 @@ class LUInstanceCreate(LogicalUnit): if einfo.has_option(constants.INISECT_INS, "disk_template"): self.op.disk_template = einfo.get(constants.INISECT_INS, "disk_template") + if self.op.disk_template not in constants.DISK_TEMPLATES: + raise errors.OpPrereqError("Disk template specified in configuration" + " file is not one of the allowed values:" + " %s" % " ".join(constants.DISK_TEMPLATES)) else: raise errors.OpPrereqError("No disk template specified and the export" " is missing the disk_template information", diff --git a/lib/opcodes.py b/lib/opcodes.py index fe99b6ee0..7fd66f6ac 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -237,8 +237,20 @@ def _CheckFileStorage(value): return True -_CheckDiskTemplate = ht.TAnd(ht.TElemOf(constants.DISK_TEMPLATES), - _CheckFileStorage) +def _BuildDiskTemplateCheck(accept_none): + """Builds check for disk template. + + @type accept_none: bool + @param accept_none: whether to accept None as a correct value + @rtype: callable + + """ + template_check = ht.TElemOf(constants.DISK_TEMPLATES) + + if accept_none: + template_check = ht.TOr(template_check, ht.TNone) + + return ht.TAnd(template_check, _CheckFileStorage) def _CheckStorageType(storage_type): @@ -1038,7 +1050,8 @@ class OpInstanceCreate(OpCode): (constants.IDISK_SIZE, constants.IDISK_SIZE, constants.IDISK_SIZE, constants.IDISK_MODE, " or ".join("``%s``" % i for i in sorted(constants.DISK_ACCESS_SET)))), - ("disk_template", ht.NoDefault, _CheckDiskTemplate, "Disk template"), + ("disk_template", ht.NoDefault, _BuildDiskTemplateCheck(True), + "Disk template"), ("file_driver", None, ht.TOr(ht.TNone, ht.TElemOf(constants.FILE_DRIVER)), "Driver for file-backed disks"), ("file_storage_dir", None, ht.TMaybeString, @@ -1306,7 +1319,7 @@ class OpInstanceSetParams(OpCode): ("beparams", ht.EmptyDict, ht.TDict, "Per-instance backend parameters"), ("hvparams", ht.EmptyDict, ht.TDict, "Per-instance hypervisor parameters, hypervisor-dependent"), - ("disk_template", None, ht.TOr(ht.TNone, _CheckDiskTemplate), + ("disk_template", None, ht.TOr(ht.TNone, _BuildDiskTemplateCheck(False)), "Disk template for instance"), ("remote_node", None, ht.TMaybeString, "Secondary node (used when changing disk template)"), -- GitLab