From: Daniil Leshchev <[email protected]>

In accordance with issue #475:
Implement extraction of 'networks' field in Rapi and Luxi backends.
Add 'networks' field into Group query object.

Signed-off-by: Daniil Leshchev <[email protected]>
---
 lib/query.py                      | 3 +++
 src/Ganeti/HTools/Backend/Luxi.hs | 8 ++++----
 src/Ganeti/HTools/Backend/Rapi.hs | 5 +++--
 src/Ganeti/Query/Group.hs         | 2 ++
 4 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/lib/query.py b/lib/query.py
index 43d8fad..222c14f 100644
--- a/lib/query.py
+++ b/lib/query.py
@@ -2448,6 +2448,9 @@ def _BuildGroupFields():
     (_MakeField("ipolicy", "InstancePolicy", QFT_OTHER,
                 "Instance policy limitations (merged)"),
      GQ_CONFIG, 0, lambda ctx, _: ctx.group_ipolicy),
+    (_MakeField("networks", "Networks", QFT_OTHER,
+                "Node group networks"),
+     GQ_CONFIG, 0, _GetItemAttr("networks")),
     (_MakeField("custom_ipolicy", "CustomInstancePolicy", QFT_OTHER,
                 "Custom instance policy limitations"),
      GQ_CONFIG, 0, _GetItemAttr("ipolicy")),
diff --git a/src/Ganeti/HTools/Backend/Luxi.hs 
b/src/Ganeti/HTools/Backend/Luxi.hs
index 5a3cb1d..2ac71e6 100644
--- a/src/Ganeti/HTools/Backend/Luxi.hs
+++ b/src/Ganeti/HTools/Backend/Luxi.hs
@@ -149,7 +149,7 @@ queryClusterInfoMsg = L.QueryClusterInfo
 queryGroupsMsg :: L.LuxiOp
 queryGroupsMsg =
   L.Query (Qlang.ItemTypeOpCode Qlang.QRGroup)
-     ["uuid", "name", "alloc_policy", "ipolicy", "tags"]
+     ["uuid", "name", "alloc_policy", "ipolicy", "tags", "networks"]
      Qlang.EmptyFilter
 
 -- | Wraper over 'callMethod' doing node query.
@@ -276,15 +276,15 @@ getGroups jsv = extractArray jsv >>= mapM parseGroup
 
 -- | Parses a given group information.
 parseGroup :: [(JSValue, JSValue)] -> Result (String, Group.Group)
-parseGroup [uuid, name, apol, ipol, tags] = do
+parseGroup [uuid, name, apol, ipol, tags, nets] = do
   xname <- annotateResult "Parsing new group" (fromJValWithStatus name)
   let convert a = genericConvert "Group" xname a
   xuuid <- convert "uuid" uuid
   xapol <- convert "alloc_policy" apol
   xipol <- convert "ipolicy" ipol
   xtags <- convert "tags" tags
-  -- TODO: parse networks to which this group is connected
-  return (xuuid, Group.create xname xuuid xapol [] xipol xtags)
+  xnets <- convert "networks" nets
+  return (xuuid, Group.create xname xuuid xapol xnets xipol xtags)
 
 parseGroup v = fail ("Invalid group query result: " ++ show v)
 
diff --git a/src/Ganeti/HTools/Backend/Rapi.hs 
b/src/Ganeti/HTools/Backend/Rapi.hs
index df93d6a..ce1bb10 100644
--- a/src/Ganeti/HTools/Backend/Rapi.hs
+++ b/src/Ganeti/HTools/Backend/Rapi.hs
@@ -196,12 +196,13 @@ parseGroup :: JSRecord -> Result (String, Group.Group)
 parseGroup a = do
   name <- tryFromObj "Parsing new group" a "name"
   let extract s = tryFromObj ("Group '" ++ name ++ "'") a s
+  let extractDef s d = fromObjWithDefault a s d
   uuid <- extract "uuid"
   apol <- extract "alloc_policy"
   ipol <- extract "ipolicy"
   tags <- extract "tags"
-  -- TODO: parse networks to which this group is connected
-  return (uuid, Group.create name uuid apol [] ipol tags)
+  nets <- extractDef "networks" []
+  return (uuid, Group.create name uuid apol nets ipol tags)
 
 -- | Parse cluster data from the info resource.
 parseCluster :: JSObject JSValue -> Result ([String], IPolicy, String)
diff --git a/src/Ganeti/Query/Group.hs b/src/Ganeti/Query/Group.hs
index 45bd81a..4989788 100644
--- a/src/Ganeti/Query/Group.hs
+++ b/src/Ganeti/Query/Group.hs
@@ -55,6 +55,8 @@ groupFields =
   , (FieldDefinition "custom_ipolicy" "CustomInstancePolicy" QFTOther
        "Custom instance policy limitations",
      FieldSimple (rsNormal . groupIpolicy), QffNormal)
+  , (FieldDefinition "networks" "Networks" QFTOther "Node group networks",
+     FieldSimple (rsNormal . groupNetworks), QffNormal)
   , (FieldDefinition "custom_ndparams" "CustomNDParams" QFTOther
        "Custom node parameters",
      FieldSimple (rsNormal . groupNdparams), QffNormal)
-- 
1.9.1

Reply via email to