diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py index d442fb697870308165b10096d9de0a9fd2f94b38..c51bfa2faf99a719047ebe2dd2921fd60df572c0 100644 --- a/lib/confd/querylib.py +++ b/lib/confd/querylib.py @@ -75,3 +75,37 @@ class PingQuery(ConfdQuery): return status, answer + +class NodeRoleQuery(ConfdQuery): + """An empty confd query. + + It will return success on an empty argument, and an error on any other argument. + + """ + def Exec(self, query): + """EmptyQuery main execution + + """ + node = query + if self.reader.GetMasterNode() == node: + status = constants.CONFD_REPL_STATUS_OK + answer = constants.CONFD_NODE_ROLE_MASTER + return status, answer + flags = self.reader.GetNodeStatusFlags(node) + if flags is None: + status = constants.CONFD_REPL_STATUS_ERROR + answer = constants.CONFD_ERROR_UNKNOWN_ENTRY + return status, answer + + master_candidate, drained, offline = flags + if master_candidate: + answer = constants.CONFD_NODE_ROLE_CANDIDATE + elif drained: + answer = constants.CONFD_NODE_ROLE_DRAINED + elif offline: + answer = constants.CONFD_NODE_ROLE_OFFLINE + else: + answer = constants.CONFD_NODE_ROLE_REGULAR + + return constants.CONFD_REPL_STATUS_OK, answer + diff --git a/lib/confd/server.py b/lib/confd/server.py index efea38d5156b82e942f41eee30689e3c69053bdf..a39a53581df8ee772ad636367b0d3b0982229cf5 100644 --- a/lib/confd/server.py +++ b/lib/confd/server.py @@ -44,7 +44,7 @@ class ConfdProcessor(object): """ DISPATCH_TABLE = { constants.CONFD_REQ_PING: querylib.PingQuery, - constants.CONFD_REQ_NODE_ROLE_BYNAME: querylib.ConfdQuery, + constants.CONFD_REQ_NODE_ROLE_BYNAME: querylib.NodeRoleQuery, constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP: querylib.ConfdQuery, }