From 59c75517c9793ff02bd86b5d86a136b6206e67aa Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 27 Feb 2013 15:51:36 +0100 Subject: [PATCH] QA: Support diskless instances This is an initial implementation of diskless instances. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Bernardo Dal Seno <bdalseno@google.com> --- qa/ganeti-qa.py | 2 ++ qa/qa-sample.json | 1 + qa/qa_instance.py | 27 ++++++++++++++++++++++----- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index b4b088b71..95c5c5657 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -517,6 +517,8 @@ def RunInstanceTests(): qa_instance.TestInstanceAddWithPlainDisk, 1), ("instance-add-drbd-disk", constants.DT_DRBD8, qa_instance.TestInstanceAddWithDrbdDisk, 2), + ("instance-add-diskless", constants.DT_DISKLESS, + qa_instance.TestInstanceAddDiskless, 1), ] for (test_name, templ, create_fun, num_nodes) in instance_tests: diff --git a/qa/qa-sample.json b/qa/qa-sample.json index b50657888..2eda031bf 100644 --- a/qa/qa-sample.json +++ b/qa/qa-sample.json @@ -169,6 +169,7 @@ "instance-add-plain-disk": true, "instance-add-drbd-disk": true, + "instance-add-diskless": true, "instance-convert-disk": true, "instance-plain-rapi-common-tests": true, "instance-remove-drbd-offline": true, diff --git a/qa/qa_instance.py b/qa/qa_instance.py index 273723b9c..5d5d020a2 100644 --- a/qa/qa_instance.py +++ b/qa/qa_instance.py @@ -43,14 +43,16 @@ def _GetDiskStatePath(disk): return "/sys/block/%s/device/state" % disk -def _GetGenericAddParameters(inst, force_mac=None): +def _GetGenericAddParameters(inst, disk_template, force_mac=None): params = ["-B"] params.append("%s=%s,%s=%s" % (constants.BE_MINMEM, qa_config.get(constants.BE_MINMEM), constants.BE_MAXMEM, qa_config.get(constants.BE_MAXMEM))) - for idx, size in enumerate(qa_config.get("disk")): - params.extend(["--disk", "%s:size=%s" % (idx, size)]) + + if disk_template != constants.DT_DISKLESS: + for idx, size in enumerate(qa_config.get("disk")): + params.extend(["--disk", "%s:size=%s" % (idx, size)]) # Set static MAC address if configured if force_mac: @@ -71,7 +73,7 @@ def _DiskTest(node, disk_template): "--os-type=%s" % qa_config.get("os"), "--disk-template=%s" % disk_template, "--node=%s" % node] + - _GetGenericAddParameters(instance)) + _GetGenericAddParameters(instance, disk_template)) cmd.append(instance.name) AssertCommand(cmd) @@ -209,6 +211,13 @@ def TestInstanceAddWithDrbdDisk(nodes): constants.DT_DRBD8) +@InstanceCheck(None, INST_UP, RETURN_VALUE) +def TestInstanceAddDiskless(nodes): + """gnt-instance add -t diskless""" + assert len(nodes) == 1 + return _DiskTest(nodes[0].primary, constants.DT_DISKLESS) + + @InstanceCheck(None, INST_DOWN, FIRST_ARG) def TestInstanceRemove(instance): """gnt-instance remove""" @@ -527,13 +536,20 @@ def TestInstanceGrowDisk(instance): if qa_config.GetExclusiveStorage(): print qa_utils.FormatInfo("Test not supported with exclusive_storage") return + + if instance.disk_template == constants.DT_DISKLESS: + print qa_utils.FormatInfo("Test not supported for diskless instances") + return + name = instance.name all_size = qa_config.get("disk") all_grow = qa_config.get("disk-growth") + if not all_grow: # missing disk sizes but instance grow disk has been enabled, # let's set fixed/nomimal growth all_grow = ["128M" for _ in all_size] + for idx, (size, grow) in enumerate(zip(all_size, all_grow)): # succeed in grow by amount AssertCommand(["gnt-instance", "grow-disk", name, str(idx), grow]) @@ -703,7 +719,8 @@ def TestInstanceImport(newinst, node, expnode, name): "--src-node=%s" % expnode.primary, "--src-dir=%s/%s" % (pathutils.EXPORT_DIR, name), "--node=%s" % node.primary] + - _GetGenericAddParameters(newinst, force_mac=constants.VALUE_GENERATE)) + _GetGenericAddParameters(newinst, templ, + force_mac=constants.VALUE_GENERATE)) cmd.append(newinst.name) AssertCommand(cmd) newinst.SetDiskTemplate(templ) -- GitLab