From d01ae714a3f1c72bb18efca9a3c3719e6d1136d8 Mon Sep 17 00:00:00 2001
From: Luca Bigliardi <shammash@google.com>
Date: Tue, 22 Sep 2009 15:24:30 +0100
Subject: [PATCH] Confd: add instances IPs query

Extend confd to answer queries about instances IPs.

Signed-off-by: Luca Bigliardi <shammash@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 lib/confd/querylib.py | 20 ++++++++++++++++++++
 lib/confd/server.py   |  1 +
 lib/constants.py      |  2 ++
 lib/ssconf.py         |  5 +++++
 4 files changed, 28 insertions(+)

diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py
index 11dad046f..5ede415f7 100644
--- a/lib/confd/querylib.py
+++ b/lib/confd/querylib.py
@@ -208,3 +208,23 @@ class MasterCandidatesPipsQuery(ConfdQuery):
 
     return status, answer
 
+
+class InstancesIpsQuery(ConfdQuery):
+  """A query for instances IPs.
+
+  It returns the list of instances IPs.
+
+  """
+  def Exec(self, query):
+    """InstancesIpsQuery main execution.
+
+    """
+    if query is None:
+      status = constants.CONFD_REPL_STATUS_OK
+      answer = self.reader.GetInstancesIps()
+    else:
+      status = constants.CONFD_REPL_STATUS_ERROR
+      answer = "non-empty instances IPs query"
+
+    return status, answer
+
diff --git a/lib/confd/server.py b/lib/confd/server.py
index 0df006163..1bbf26f7b 100644
--- a/lib/confd/server.py
+++ b/lib/confd/server.py
@@ -54,6 +54,7 @@ class ConfdProcessor(object):
     constants.CONFD_REQ_CLUSTER_MASTER: querylib.ClusterMasterQuery,
     constants.CONFD_REQ_NODE_PIP_LIST: querylib.NodesPipsQuery,
     constants.CONFD_REQ_MC_PIP_LIST: querylib.MasterCandidatesPipsQuery,
+    constants.CONFD_REQ_INSTANCES_IPS_LIST: querylib.InstancesIpsQuery,
     }
 
   def __init__(self):
diff --git a/lib/constants.py b/lib/constants.py
index 1ad446100..b71348a24 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -641,6 +641,7 @@ CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
 CONFD_REQ_CLUSTER_MASTER = 3
 CONFD_REQ_NODE_PIP_LIST = 4
 CONFD_REQ_MC_PIP_LIST = 5
+CONFD_REQ_INSTANCES_IPS_LIST = 6
 
 CONFD_REQS = frozenset([
   CONFD_REQ_PING,
@@ -649,6 +650,7 @@ CONFD_REQS = frozenset([
   CONFD_REQ_CLUSTER_MASTER,
   CONFD_REQ_NODE_PIP_LIST,
   CONFD_REQ_MC_PIP_LIST,
+  CONFD_REQ_INSTANCES_IPS_LIST,
   ])
 
 CONFD_REPL_STATUS_OK = 0
diff --git a/lib/ssconf.py b/lib/ssconf.py
index b08518a19..a0ba135a4 100644
--- a/lib/ssconf.py
+++ b/lib/ssconf.py
@@ -100,10 +100,12 @@ class SimpleConfigReader(object):
                                       (self._file_name, err))
 
     self._ip_to_instance = {}
+    self._instances_ips = []
     for iname in self._config_data['instances']:
       instance = self._config_data['instances'][iname]
       for nic in instance['nics']:
         if 'ip' in nic and nic['ip']:
+          self._instances_ips.append(nic['ip'])
           self._ip_to_instance[nic['ip']] = iname
 
     self._nodes_primary_ips = []
@@ -201,6 +203,9 @@ class SimpleConfigReader(object):
   def GetMasterCandidatesPrimaryIps(self):
     return self._mc_primary_ips
 
+  def GetInstancesIps(self):
+    return self._instances_ips
+
 
 class SimpleStore(object):
   """Interface to static cluster data.
-- 
GitLab