diff --git a/daemons/ganeti-masterd b/daemons/ganeti-masterd index a1dc48d7adf6264a0e8fcb63286127191fc7427c..30d4861bb9e340d69e51c87edef5047c3c03dbcf 100755 --- a/daemons/ganeti-masterd +++ b/daemons/ganeti-masterd @@ -240,6 +240,11 @@ class ClientOps: op = opcodes.OpQueryExports(nodes=nodes) return self._Query(op) + elif method == luxi.REQ_QUERY_CONFIG_VALUES: + fields = args + op = opcodes.OpQueryConfigValues(output_fields=fields) + return self._Query(op) + else: raise ValueError("Invalid operation") diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 4822f54251b95f9b7c92c904977b71f4a3983502..f9b09b9800f3cf570d2b0dc79e8c99b4ce251a52 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1859,8 +1859,8 @@ class LUQueryClusterInfo(NoHooksLU): return result -class LUDumpClusterConfig(NoHooksLU): - """Return a text-representation of the cluster-config. +class LUQueryConfigValues(NoHooksLU): + """Return configuration values. """ _OP_REQP = [] @@ -1869,6 +1869,11 @@ class LUDumpClusterConfig(NoHooksLU): def ExpandNames(self): self.needed_locks = {} + static_fields = ["cluster_name", "master_node"] + _CheckOutputFields(static=static_fields, + dynamic=[], + selected=self.op.output_fields) + def CheckPrereq(self): """No prerequisites. @@ -1879,7 +1884,15 @@ class LUDumpClusterConfig(NoHooksLU): """Dump a representation of the cluster config to the standard output. """ - return self.cfg.DumpConfig() + values = [] + for field in self.op.output_fields: + if field == "cluster_name": + values.append(self.cfg.GetClusterName()) + elif field == "master_node": + values.append(self.cfg.GetMasterNode()) + else: + raise errors.ParameterError(field) + return values class LUActivateInstanceDisks(NoHooksLU): @@ -4271,6 +4284,7 @@ class LUQueryInstanceData(NoHooksLU): """ _OP_REQP = ["instances"] REQ_BGL = False + def ExpandNames(self): self.needed_locks = {} self.share_locks = dict(((i, 1) for i in locking.LEVELS)) diff --git a/lib/config.py b/lib/config.py index 4031373630231a0193c4f34c8b4a5a8c10f640a2..00e307abb778b21a71ba4cf62959d00db9f46717 100644 --- a/lib/config.py +++ b/lib/config.py @@ -814,13 +814,6 @@ class ConfigWriter: for node in self._UnlockedGetNodeList()]) return my_dict - @locking.ssynchronized(_config_lock, shared=1) - def DumpConfig(self): - """Return the entire configuration of the cluster. - """ - self._OpenConfig() - return self._config_data - def _BumpSerialNo(self): """Bump up the serial number of the config. diff --git a/lib/luxi.py b/lib/luxi.py index f04aee76d2fad280717e26bf175938c36cfc9873..a0e2c165323ba777c4954e8eaec97de0c7e004d1 100644 --- a/lib/luxi.py +++ b/lib/luxi.py @@ -51,6 +51,7 @@ REQ_QUERY_JOBS = "QueryJobs" REQ_QUERY_INSTANCES = "QueryInstances" REQ_QUERY_NODES = "QueryNodes" REQ_QUERY_EXPORTS = "QueryExports" +REQ_QUERY_CONFIG_VALUES = "QueryConfigValues" DEF_CTMO = 10 DEF_RWTO = 60 @@ -311,4 +312,7 @@ class Client(object): def QueryExports(self, nodes): return self.CallMethod(REQ_QUERY_EXPORTS, nodes) + def QueryConfigValues(self, fields): + return self.CallMethod(REQ_QUERY_CONFIG_VALUES, fields) + # TODO: class Server(object) diff --git a/lib/mcpu.py b/lib/mcpu.py index 7bb4866a37d9387b76679fe5b18693c960bbc756..ff5b856ac2e2bf146fb36fc7dbf305c8b1c22db9 100644 --- a/lib/mcpu.py +++ b/lib/mcpu.py @@ -46,7 +46,7 @@ class Processor(object): opcodes.OpDestroyCluster: cmdlib.LUDestroyCluster, opcodes.OpQueryClusterInfo: cmdlib.LUQueryClusterInfo, opcodes.OpVerifyCluster: cmdlib.LUVerifyCluster, - opcodes.OpDumpClusterConfig: cmdlib.LUDumpClusterConfig, + opcodes.OpQueryConfigValues: cmdlib.LUQueryConfigValues, opcodes.OpRenameCluster: cmdlib.LURenameCluster, opcodes.OpVerifyDisks: cmdlib.LUVerifyDisks, opcodes.OpSetClusterParams: cmdlib.LUSetClusterParams, diff --git a/lib/opcodes.py b/lib/opcodes.py index fda1f6d8ede43f98f75ad28effaf49bc36528685..b0ee9f9afd85689f4b0c383f3797dee817b18478 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -227,10 +227,10 @@ class OpVerifyDisks(OpCode): __slots__ = [] -class OpDumpClusterConfig(OpCode): - """Dump the cluster configuration.""" - OP_ID = "OP_CLUSTER_DUMPCONFIG" - __slots__ = [] +class OpQueryConfigValues(OpCode): + """Query cluster configuration values.""" + OP_ID = "OP_CLUSTER_CONFIG_QUERY" + __slots__ = ["output_fields"] class OpRenameCluster(OpCode):