diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded index 31a74d5e533ce1231edb874178b52452708456b5..8cdda21dfc27a80a21f39ebf839bc9a85d8a4867 100755 --- a/daemons/ganeti-noded +++ b/daemons/ganeti-noded @@ -569,6 +569,16 @@ class NodeDaemonRequestHandler(http.HTTPRequestHandler): """ return backend.JobQueuePurge() + @staticmethod + @_RequireJobQueueLock + def perspective_jobqueue_rename(params): + """Rename a job queue file. + + """ + (old, new) = params + + return backend.JobQueueRename(old, new) + class NodeDaemonHttpServer(http.HTTPServer): def __init__(self, server_address): diff --git a/lib/backend.py b/lib/backend.py index f157c196f16151cc802cdbe268384db908bce6a0..2d7f6c9841dd6bf2d86006993df7a623096b267b 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -1690,6 +1690,18 @@ def JobQueuePurge(): _CleanDirectory(constants.JOB_QUEUE_ARCHIVE_DIR) +def JobQueueRename(old, new): + """Renames a job queue file. + + """ + if not (_IsJobQueueFile(old) and _IsJobQueueFile(new)): + return False + + os.rename(old, new) + + return True + + def CloseBlockDevices(disks): """Closes the given block devices. diff --git a/lib/rpc.py b/lib/rpc.py index 368d1f713230ecbc622c04514960e7da8f59e96f..9fd542ccb6e43890b6a8b31839e358f9d8a92ac8 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -826,3 +826,16 @@ def call_jobqueue_purge(node): c.connect(node) c.run() return c.getresult().get(node, False) + + +def call_jobqueue_rename(node_list, old, new): + """Rename a job queue file. + + This is a multi-node call. + + """ + c = Client("jobqueue_rename", [old, new]) + c.connect_list(node_list) + c.run() + result = c.getresult() + return result