From 6daf26a084866e62d9078d3ad3e6ab6b1a0258c0 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Tue, 11 Aug 2009 10:35:50 +0100 Subject: [PATCH] Add NodeRoleQuery This implements CONFD_REQ_NODE_ROLE_BYNAME. Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/confd/querylib.py | 34 ++++++++++++++++++++++++++++++++++ lib/confd/server.py | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py index d442fb697..c51bfa2fa 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 efea38d51..a39a53581 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, } -- GitLab