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,
   }