+ AssertCommand(["gnt-instance", "info", instance["name"]])
+
+
+@InstanceCheck(INST_UP, INST_UP, FIRST_ARG)
+def TestInstanceModify(instance):
+ """gnt-instance modify"""
+ default_hv = qa_config.GetDefaultHypervisor()
+
+ # Assume /sbin/init exists on all systems
+ test_kernel = "/sbin/init"
+ test_initrd = test_kernel
+
+ orig_maxmem = qa_config.get(constants.BE_MAXMEM)
+ orig_minmem = qa_config.get(constants.BE_MINMEM)
+ #orig_bridge = qa_config.get("bridge", "xen-br0")
+
+ args = [
+ ["-B", "%s=128" % constants.BE_MINMEM],
+ ["-B", "%s=128" % constants.BE_MAXMEM],
+ ["-B", "%s=%s,%s=%s" % (constants.BE_MINMEM, orig_minmem,
+ constants.BE_MAXMEM, orig_maxmem)],
+ ["-B", "%s=2" % constants.BE_VCPUS],
+ ["-B", "%s=1" % constants.BE_VCPUS],
+ ["-B", "%s=%s" % (constants.BE_VCPUS, constants.VALUE_DEFAULT)],
+ ["-B", "%s=%s" % (constants.BE_ALWAYS_FAILOVER, constants.VALUE_TRUE)],
+ ["-B", "%s=%s" % (constants.BE_ALWAYS_FAILOVER, constants.VALUE_DEFAULT)],
+
+ ["-H", "%s=%s" % (constants.HV_KERNEL_PATH, test_kernel)],
+ ["-H", "%s=%s" % (constants.HV_KERNEL_PATH, constants.VALUE_DEFAULT)],
+
+ # TODO: bridge tests
+ #["--bridge", "xen-br1"],
+ #["--bridge", orig_bridge],
+ ]
+
+ if default_hv == constants.HT_XEN_PVM:
+ args.extend([
+ ["-H", "%s=%s" % (constants.HV_INITRD_PATH, test_initrd)],
+ ["-H", "no_%s" % (constants.HV_INITRD_PATH, )],
+ ["-H", "%s=%s" % (constants.HV_INITRD_PATH, constants.VALUE_DEFAULT)],
+ ])
+ elif default_hv == constants.HT_XEN_HVM:
+ args.extend([
+ ["-H", "%s=acn" % constants.HV_BOOT_ORDER],
+ ["-H", "%s=%s" % (constants.HV_BOOT_ORDER, constants.VALUE_DEFAULT)],
+ ])
+
+ for alist in args:
+ AssertCommand(["gnt-instance", "modify"] + alist + [instance["name"]])
+
+ # check no-modify
+ AssertCommand(["gnt-instance", "modify", instance["name"]], fail=True)
+
+ # Marking offline/online while instance is running must fail
+ for arg in ["--online", "--offline"]:
+ AssertCommand(["gnt-instance", "modify", arg, instance["name"]], fail=True)
+
+
+@InstanceCheck(INST_DOWN, INST_DOWN, FIRST_ARG)
+def TestInstanceStoppedModify(instance):
+ """gnt-instance modify (stopped instance)"""
+ name = instance["name"]
+
+ # Instance was not marked offline; try marking it online once more
+ AssertCommand(["gnt-instance", "modify", "--online", name])
+
+ # Mark instance as offline
+ AssertCommand(["gnt-instance", "modify", "--offline", name])
+
+ # And online again
+ AssertCommand(["gnt-instance", "modify", "--online", name])
+
+
+@InstanceCheck(INST_DOWN, INST_DOWN, FIRST_ARG)
+def TestInstanceConvertDisk(instance, snode):
+ """gnt-instance modify -t"""
+ name = instance["name"]
+ AssertCommand(["gnt-instance", "modify", "-t", "plain", name])
+ AssertCommand(["gnt-instance", "modify", "-t", "drbd",
+ "-n", snode["primary"], name])
+
+
+@InstanceCheck(INST_DOWN, INST_DOWN, FIRST_ARG)
+def TestInstanceGrowDisk(instance):
+ """gnt-instance grow-disk"""
+ 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])
+ # fail in grow to the old size
+ AssertCommand(["gnt-instance", "grow-disk", "--absolute", name, str(idx),
+ size], fail=True)
+ # succeed to grow to old size + 2 * growth
+ int_size = utils.ParseUnit(size)
+ int_grow = utils.ParseUnit(grow)
+ AssertCommand(["gnt-instance", "grow-disk", "--absolute", name, str(idx),
+ str(int_size + 2 * int_grow)])