From 332a83ca92e288b414d11e4e15721dcfabe37cad Mon Sep 17 00:00:00 2001
From: Michele Tartara <mtartara@google.com>
Date: Thu, 10 Jan 2013 09:22:57 +0100
Subject: [PATCH] Add request type to Confd server for getting instance list

Add to Confd server a new request type (and its implementation) to ask for
the list of instances in a node.

Signed-off-by: Michele Tartara <mtartara@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 lib/constants.py           | 1 +
 src/Ganeti/Confd/Server.hs | 8 ++++++++
 src/Ganeti/Confd/Types.hs  | 1 +
 3 files changed, 10 insertions(+)

diff --git a/lib/constants.py b/lib/constants.py
index 0e4f471d3..db84892ce 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -2144,6 +2144,7 @@ CONFD_REQ_NODE_PIP_LIST = 4
 CONFD_REQ_MC_PIP_LIST = 5
 CONFD_REQ_INSTANCES_IPS_LIST = 6
 CONFD_REQ_NODE_DRBD = 7
+CONFD_REQ_NODE_INSTANCES = 8
 
 # Confd request query fields. These are used to narrow down queries.
 # These must be strings rather than integers, because json-encoding
diff --git a/src/Ganeti/Confd/Server.hs b/src/Ganeti/Confd/Server.hs
index f7373261c..4339ce2a5 100644
--- a/src/Ganeti/Confd/Server.hs
+++ b/src/Ganeti/Confd/Server.hs
@@ -242,6 +242,14 @@ buildResponse cdata req@(ConfdRequest { confdRqType = ReqNodeDrbd }) = do
                  (a, b, c, d, e, f) <- minors]
   return (ReplyStatusOk, J.showJSON encoded)
 
+buildResponse cdata req@(ConfdRequest { confdRqType = ReqNodeInstances }) = do
+  let cfg = fst cdata
+  node_name <- case confdRqQuery req of
+                PlainQuery str -> return str
+                _ -> fail $ "Invalid query type " ++ show (confdRqQuery req)
+  let instances = getNodeInstances cfg node_name
+  return (ReplyStatusOk, J.showJSON instances)
+
 -- | Creates a ConfdReply from a given answer.
 serializeResponse :: Result StatusAnswer -> ConfdReply
 serializeResponse r =
diff --git a/src/Ganeti/Confd/Types.hs b/src/Ganeti/Confd/Types.hs
index 5439fbe77..f503c3ded 100644
--- a/src/Ganeti/Confd/Types.hs
+++ b/src/Ganeti/Confd/Types.hs
@@ -78,6 +78,7 @@ $(declareIADT "ConfdRequestType"
   , ("ReqMcPipList",        'C.confdReqMcPipList )
   , ("ReqInstIpsList",      'C.confdReqInstancesIpsList )
   , ("ReqNodeDrbd",         'C.confdReqNodeDrbd )
+  , ("ReqNodeInstances",    'C.confdReqNodeInstances)
   ])
 $(makeJSONInstance ''ConfdRequestType)
 
-- 
GitLab