This patch also fixes the LUExportInstance Prereq docstring.
Reviewed-by: iustinp
def CheckPrereq(self):
"""Check prerequisites.
- This checks that the instance name is a valid one.
+ This checks that the instance and node names are valid.
"""
instance_name = self.cfg.ExpandInstanceName(self.op.instance_name)
" on node %s" % (instance.name, node))
+class LURemoveExport(NoHooksLU):
+ """Remove exports related to the named instance.
+
+ """
+ _OP_REQP = ["instance_name"]
+
+ def CheckPrereq(self):
+ """Check prerequisites.
+ """
+ pass
+
+ def Exec(self, feedback_fn):
+ """Remove any export.
+
+ """
+ instance_name = self.cfg.ExpandInstanceName(self.op.instance_name)
+ # If the instance was not found we'll try with the name that was passed in.
+ # This will only work if it was an FQDN, though.
+ fqdn_warn = False
+ if not instance_name:
+ fqdn_warn = True
+ instance_name = self.op.instance_name
+
+ op = opcodes.OpQueryExports(nodes=[])
+ exportlist = self.proc.ChainOpCode(op)
+ found = False
+ for node in exportlist:
+ if instance_name in exportlist[node]:
+ found = True
+ if not rpc.call_export_remove(node, instance_name):
+ logger.Error("could not remove export for instance %s"
+ " on node %s" % (instance_name, node))
+
+ if fqdn_warn and not found:
+ feedback_fn("Export not found. If trying to remove an export belonging"
+ " to a deleted instance please use its Fully Qualified"
+ " Domain Name.")
+
+
class TagsLU(NoHooksLU):
"""Generic tags LU.
# exports lu
opcodes.OpQueryExports: cmdlib.LUQueryExports,
opcodes.OpExportInstance: cmdlib.LUExportInstance,
+ opcodes.OpRemoveExport: cmdlib.LURemoveExport,
# tags lu
opcodes.OpGetTags: cmdlib.LUGetTags,
opcodes.OpSearchTags: cmdlib.LUSearchTags,
OP_ID = "OP_BACKUP_EXPORT"
__slots__ = ["instance_name", "target_node", "shutdown"]
+class OpRemoveExport(OpCode):
+ """Remove an instance's export."""
+ OP_ID = "OP_BACKUP_REMOVE"
+ __slots__ = ["instance_name"]
# Tags opcodes
class OpGetTags(OpCode):
return 0
+def RemoveExport(opts, args):
+ """Remove an export from the cluster.
+
+ Args:
+ opts - class with options as members
+ args - list with a single element, the exported instance to remove
+ Opts used:
+
+ Returns:
+ 1 in case of error, 0 otherwise
+
+ """
+ instance = args[0]
+ op = opcodes.OpRemoveExport(instance_name=args[0])
+
+ SubmitOpCode(op)
+ return 0
+
+
# this is defined separately due to readability only
import_opts = [
DEBUG_OPT,
"Exports an instance to an image"),
'import': (ImportInstance, ARGS_ONE, import_opts, "[opts...] <name>",
"Imports an instance from an exported image"),
+ 'remove': (RemoveExport, ARGS_ONE,
+ [DEBUG_OPT],
+ "<name>",
+ "Remove exports of named instance from the filesystem."),
}
if __name__ == '__main__':