diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded index e37c78985236c6990f77a9004924baa7291bcb0c..58d755e10f9260b7d30b421be5f9028c814af8f1 100755 --- a/daemons/ganeti-noded +++ b/daemons/ganeti-noded @@ -385,6 +385,14 @@ class NodeHttpServer(http.server.HttpServer): (su_name, su_args, name, changes) = params return storage.GetStorage(su_name, *su_args).Modify(name, changes) + @staticmethod + def perspective_storage_execute(params): + """Execute an operation on a storage unit. + + """ + (su_name, su_args, name, op) = params + return storage.GetStorage(su_name, *su_args).Execute(name, op) + # bridge -------------------------- @staticmethod diff --git a/lib/rpc.py b/lib/rpc.py index c2e088014fd2270801053a2db8ec622ad802585a..235754e2183d4785be4cac3e5dd8abd5d613c8e9 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -450,6 +450,15 @@ class RpcRunner(object): return self._SingleNodeCall(node, "storage_modify", [su_name, su_args, name, changes]) + def call_storage_execute(self, node, su_name, su_args, name, op): + """Executes an operation on a storage unit. + + This is a single-node call. + + """ + return self._SingleNodeCall(node, "storage_execute", + [su_name, su_args, name, op]) + def call_bridges_exist(self, node, bridges_list): """Checks if a node has all the bridges given.