-#!/usr/bin/python
+#
#
# Copyright (C) 2009, Google Inc.
"""A processor for confd requests.
@ivar reader: confd SimpleConfigReader
+ @ivar disabled: whether confd serving is disabled
"""
DISPATCH_TABLE = {
- constants.CONFD_REQ_PING: querylib.PingQuery,
- constants.CONFD_REQ_NODE_ROLE_BYNAME: querylib.NodeRoleQuery,
- constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP:
- querylib.InstanceIpToNodePrimaryIpQuery,
- }
+ constants.CONFD_REQ_PING: querylib.PingQuery,
+ constants.CONFD_REQ_NODE_ROLE_BYNAME: querylib.NodeRoleQuery,
+ constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP:
+ querylib.InstanceIpToNodePrimaryIpQuery,
+ constants.CONFD_REQ_CLUSTER_MASTER: querylib.ClusterMasterQuery,
+ constants.CONFD_REQ_NODE_PIP_LIST: querylib.NodesPipsQuery,
+ constants.CONFD_REQ_MC_PIP_LIST: querylib.MasterCandidatesPipsQuery,
+ }
def __init__(self):
"""Constructor for ConfdProcessor
"""
- self.reader = ssconf.SimpleConfigReader()
+ self.disabled = True
self.hmac_key = utils.ReadFile(constants.HMAC_CLUSTER_KEY)
+ self.reader = None
assert \
not constants.CONFD_REQS.symmetric_difference(self.DISPATCH_TABLE), \
"DISPATCH_TABLE is unaligned with CONFD_REQS"
+ def Enable(self):
+ try:
+ self.reader = ssconf.SimpleConfigReader()
+ self.disabled = False
+ except errors.ConfigurationError:
+ self.disabled = True
+ raise
+
+ def Disable(self):
+ self.disabled = True
+ self.reader = None
+
def ExecQuery(self, payload_in, ip, port):
"""Process a single UDP request from a client.
@type port: source port
"""
+ if self.disabled:
+ logging.debug('Confd is disabled. Ignoring query.')
+ return
try:
request = self.ExtractRequest(payload_in)
reply, rsalt = self.ProcessRequest(request)
"""
return serializer.DumpSigned(reply.ToDict(), self.hmac_key, rsalt)
-