Signed-off-by: Niklas Hambuechen <[email protected]>
---
src/Ganeti/Query/Server.hs | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/Ganeti/Query/Server.hs b/src/Ganeti/Query/Server.hs
index d6c942d..2167ad7 100644
--- a/src/Ganeti/Query/Server.hs
+++ b/src/Ganeti/Query/Server.hs
@@ -76,6 +76,25 @@ import Ganeti.Utils.MVarLock
import qualified Ganeti.Version as Version
-- | Helper for classic queries.
+handleQuery :: [Qlang.ItemType -> Qlang.FilterField] -- ^ Fields to put into
+ -- the query
+ -> ConfigData -- ^ Cluster config
+ -> Qlang.ItemType -- ^ Query type
+ -> [Either String Integer] -- ^ Requested names
+ -- (empty means all)
+ -> [String] -- ^ Requested fields
+ -> Bool -- ^ Whether to do sync queries or not
+ -> IO (GenericResult GanetiException JSValue)
+handleQuery _ _ _ _ _ True =
+ return . Bad $ OpPrereqError "Sync queries are not allowed" ECodeInval
+handleQuery filterFields cfg qkind names fields _ = do
+ let simpleNameFilter field = makeSimpleFilter (field qkind) names
+ flt = Qlang.OrFilter $ map simpleNameFilter filterFields
+ qr <- query cfg True (Qlang.Query qkind fields flt)
+ return $ showJSON <$> (qr >>= queryCompat)
+
+-- | Helper for classic queries.
+-- Queries `name` and `uuid` fields.
handleClassicQuery :: ConfigData -- ^ Cluster config
-> Qlang.ItemType -- ^ Query type
-> [Either String Integer] -- ^ Requested names
@@ -83,13 +102,7 @@ handleClassicQuery :: ConfigData -- ^ Cluster config
-> [String] -- ^ Requested fields
-> Bool -- ^ Whether to do sync queries or not
-> IO (GenericResult GanetiException JSValue)
-handleClassicQuery _ _ _ _ True =
- return . Bad $ OpPrereqError "Sync queries are not allowed" ECodeInval
-handleClassicQuery cfg qkind names fields _ = do
- let simpleNameFilter field = makeSimpleFilter (field qkind) names
- flt = Qlang.OrFilter $ map simpleNameFilter [nameField, uuidField]
- qr <- query cfg True (Qlang.Query qkind fields flt)
- return $ showJSON <$> (qr >>= queryCompat)
+handleClassicQuery = handleQuery [nameField, uuidField]
-- | Minimal wrapper to handle the missing config case.
handleCallWrapper :: Lock -> JQStatus -> Result ConfigData
--
2.1.0.rc2.206.gedb03e5