+ def ImportExport(self):
+ """Export the instance, delete it, and import it back.
+
+ """
+
+ mytor = izip(cycle(self.nodes),
+ islice(cycle(self.nodes), 1, None),
+ islice(cycle(self.nodes), 2, None),
+ self.instances)
+
+ for pnode, snode, enode, instance in mytor:
+
+ if self.opts.iallocator:
+ pnode = snode = None
+ import_log_msg = ("- Import instance %s from node %s (iallocator: %s)" %
+ (instance, enode, self.opts.iallocator))
+ elif self.opts.disk_template not in constants.DTS_NET_MIRROR:
+ snode = None
+ import_log_msg = ("- Import instance %s from node %s to node %s" %
+ (instance, enode, pnode))
+ else:
+ import_log_msg = ("- Import instance %s from node %s to nodes %s/%s" %
+ (instance, enode, pnode, snode))
+
+ exp_op = opcodes.OpExportInstance(instance_name=instance,
+ target_node=enode,
+ shutdown=True)
+ rem_op = opcodes.OpRemoveInstance(instance_name=instance,
+ ignore_failures=True)
+ nam_op = opcodes.OpQueryInstances(output_fields=["name"],
+ names=[instance])
+ full_name = self.ExecOp(nam_op)[0][0]
+ imp_dir = os.path.join(constants.EXPORT_DIR, full_name)
+ imp_op = opcodes.OpCreateInstance(instance_name=instance,
+ mem_size=128,
+ disk_size=self.opts.os_size,
+ swap_size=self.opts.swap_size,
+ disk_template=self.opts.disk_template,
+ mode=constants.INSTANCE_IMPORT,
+ src_node=enode,
+ src_path=imp_dir,
+ pnode=pnode,
+ snode=snode,
+ vcpus=1,
+ start=True,
+ ip_check=True,
+ wait_for_sync=True,
+ mac="auto",
+ file_storage_dir=None,
+ file_driver=None,
+ iallocator=self.opts.iallocator)
+ erem_op = opcodes.OpRemoveExport(instance_name=instance)
+
+ Log("- Export instance %s to node %s" % (instance, enode))
+ self.ExecOp(exp_op)
+ Log("- Remove instance %s" % (instance))
+ self.ExecOp(rem_op)
+ self.to_rem.remove(instance)
+ Log(import_log_msg)
+ self.ExecOp(imp_op)
+ Log("- Remove export of instance %s" % (instance))
+ self.ExecOp(erem_op)
+
+ self.to_rem.append(instance)
+
+ def StopInstance(self, instance):
+ """Stop given instance."""
+ op = opcodes.OpShutdownInstance(instance_name=instance)
+ Log("- Shutdown instance %s" % instance)
+ self.ExecOp(op)
+
+ def StartInstance(self, instance):
+ """Start given instance."""
+ op = opcodes.OpStartupInstance(instance_name=instance, force=False)
+ Log("- Start instance %s" % instance)
+ self.ExecOp(op)
+
+ def RenameInstance(self, instance, instance_new):
+ """Rename instance."""
+ op = opcodes.OpRenameInstance(instance_name=instance,
+ new_name=instance_new)
+ Log("- Rename instance %s to %s" % (instance, instance_new))
+ self.ExecOp(op)
+