gnt-backup: Don't show confusing message w/o target node
authorMichael Hanselmann <hansmi@google.com>
Tue, 10 Aug 2010 15:54:42 +0000 (17:54 +0200)
committerMichael Hanselmann <hansmi@google.com>
Tue, 10 Aug 2010 16:35:15 +0000 (18:35 +0200)
“gnt-backup export” requires the target node. Until now, the master
daemon would complain that the “parameter
'OP_BACKUP_EXPORT.target_node' fails validation”. With this patch,
an additional check is done in the client program.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Manuel Franceschini <livewire@google.com>

qa/ganeti-qa.py
qa/qa_instance.py
scripts/gnt-backup

index 80893f7..7f27000 100755 (executable)
@@ -204,6 +204,8 @@ def RunExportImportTests(instance, pnode):
 
   """
   if qa_config.TestEnabled('instance-export'):
+    RunTest(qa_instance.TestInstanceExportNoTarget, instance)
+
     expnode = qa_config.AcquireNode(exclude=pnode)
     try:
       name = RunTest(qa_instance.TestInstanceExport, instance, expnode)
index 45b1d6b..b8c692e 100644 (file)
@@ -280,7 +280,7 @@ def TestReplaceDisks(instance, pnode, snode, othernode):
 
 
 def TestInstanceExport(instance, node):
-  """gnt-backup export"""
+  """gnt-backup export -n ..."""
   master = qa_config.GetMasterNode()
 
   cmd = ['gnt-backup', 'export', '-n', node['primary'], instance['name']]
@@ -300,6 +300,15 @@ def TestInstanceExportWithRemove(instance, node):
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
 
 
+def TestInstanceExportNoTarget(instance):
+  """gnt-backup export (without target node, should fail)"""
+  master = qa_config.GetMasterNode()
+
+  cmd = ["gnt-backup", "export", instance["name"]]
+  AssertNotEqual(StartSSH(master['primary'],
+                          utils.ShellQuoteArgs(cmd)).wait(), 0)
+
+
 def TestInstanceImport(node, newinst, expnode, name):
   """gnt-backup import"""
   master = qa_config.GetMasterNode()
index 62ed706..355359a 100755 (executable)
@@ -31,6 +31,7 @@ import sys
 from ganeti.cli import *
 from ganeti import opcodes
 from ganeti import constants
+from ganeti import errors
 
 
 _VALUE_TRUE = "true"
@@ -73,6 +74,9 @@ def ExportInstance(opts, args):
   """
   ignore_remove_failures = opts.ignore_remove_failures
 
+  if not opts.node:
+    raise errors.OpPrereqError("Target node must be specified")
+
   op = opcodes.OpExportInstance(instance_name=args[0],
                                 target_node=opts.node,
                                 shutdown=opts.shutdown,