diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py index 17621dd0cca75e93aab722c8227491fba53ef6f9..f757760df13b3ddc6558bc6cc97c9ee3f35158ab 100644 --- a/lib/confd/querylib.py +++ b/lib/confd/querylib.py @@ -98,12 +98,29 @@ class ClusterMasterQuery(ConfdQuery): """ClusterMasterQuery main execution """ - if query is None: + if isinstance(query, dict): + if constants.CONFD_REQQ_FIELDS in query: + status = constants.CONFD_REPL_STATUS_OK + req_fields = query[constants.CONFD_REQQ_FIELDS] + if not isinstance(req_fields, (list, tuple)): + logging.debug("FIELDS request should be a list") + return QUERY_ARGUMENT_ERROR + + answer = [] + for field in req_fields: + if field == constants.CONFD_REQFIELD_NAME: + answer.append(self.reader.GetMasterNode()) + elif field == constants.CONFD_REQFIELD_IP: + answer.append(self.reader.GetMasterIP()) + else: + logging.debug("missing FIELDS in query dict") + return QUERY_ARGUMENT_ERROR + elif not query: status = constants.CONFD_REPL_STATUS_OK answer = self.reader.GetMasterNode() else: - status = constants.CONFD_REPL_STATUS_ERROR - answer = 'master query accepts no query argument' + logging.debug("Invalid master query argument: not dict or empty") + return QUERY_ARGUMENT_ERROR return status, answer diff --git a/lib/constants.py b/lib/constants.py index 9ff39588c16b4c31512420badaa353b56318db90..07493cd3cb22b31474351c281b076bf3b3fecef3 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -687,6 +687,10 @@ CONFD_REQ_INSTANCES_IPS_LIST = 6 CONFD_REQQ_LINK = "0" CONFD_REQQ_IP = "1" CONFD_REQQ_IPLIST = "2" +CONFD_REQQ_FIELDS = "3" + +CONFD_REQFIELD_NAME = "0" +CONFD_REQFIELD_IP = "1" CONFD_REQS = frozenset([ CONFD_REQ_PING,