Commit 9611c32e authored by Michele Tartara's avatar Michele Tartara

Factor out the getInstances function

The getInstances function can be useful in general, but is defined inside
the InstStatus data collector. This commit takes it out and adds it to
a proper (newly created) library.
Signed-off-by: default avatarMichele Tartara <mtartara@google.com>
Reviewed-by: default avatarKlaus Aehlig <aehlig@google.com>
parent b2525349
......@@ -542,6 +542,7 @@ HS_LIB_SRCS = \
src/Ganeti/Common.hs \
src/Ganeti/Compat.hs \
src/Ganeti/Confd/Client.hs \
src/Ganeti/Confd/ClientFunctions.hs \
src/Ganeti/Confd/Server.hs \
src/Ganeti/Confd/Types.hs \
src/Ganeti/Confd/Utils.hs \
......
{-| Some utility functions, based on the Confd client, providing data
in a ready-to-use way.
-}
{-
Copyright (C) 2013 Google Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
-}
module Ganeti.Confd.ClientFunctions
( getInstances
) where
import qualified Text.JSON as J
import Ganeti.BasicTypes as BT
import Ganeti.Confd.Types
import Ganeti.Confd.Client
import Ganeti.Objects
-- | Get the list of instances the given node is ([primary], [secondary]) for.
-- The server address and the server port parameters are mainly intended
-- for testing purposes. If they are Nothing, the default values will be used.
getInstances
:: String
-> Maybe String
-> Maybe Int
-> IO (BT.Result ([Ganeti.Objects.Instance], [Ganeti.Objects.Instance]))
getInstances node srvAddr srvPort = do
client <- getConfdClient srvAddr srvPort
reply <- query client ReqNodeInstances $ PlainQuery node
return $
case fmap (J.readJSON . confdReplyAnswer) reply of
Just (J.Ok instances) -> BT.Ok instances
Just (J.Error msg) -> BT.Bad msg
Nothing -> BT.Bad "No answer from the Confd server"
......@@ -43,9 +43,7 @@ import qualified Data.Map as Map
import Network.BSD (getHostName)
import qualified Text.JSON as J
import qualified Ganeti.BasicTypes as BT
import Ganeti.Confd.Client
import Ganeti.Confd.Types
import Ganeti.Confd.ClientFunctions
import Ganeti.Common
import Ganeti.DataCollectors.CLI
import Ganeti.DataCollectors.InstStatusTypes
......@@ -95,26 +93,6 @@ options = return
arguments :: [ArgCompletion]
arguments = []
-- | Get the list of instances ([primary], [secondary]) on the given node.
-- Implemented as a function, even if used a single time, to specify in a
-- convenient and elegant way the return data type, required in order to
-- prevent incurring in the monomorphism restriction.
-- The server address and the server port parameters are mainly intended
-- for testing purposes. If they are Nothing, the default values will be used.
getInstances
:: String
-> Maybe String
-> Maybe Int
-> IO (BT.Result ([Ganeti.Objects.Instance], [Ganeti.Objects.Instance]))
getInstances node srvAddr srvPort = do
client <- getConfdClient srvAddr srvPort
reply <- query client ReqNodeInstances $ PlainQuery node
return $
case fmap (J.readJSON . confdReplyAnswer) reply of
Just (J.Ok instances) -> BT.Ok instances
Just (J.Error msg) -> BT.Bad msg
Nothing -> BT.Bad "No answer from the Confd server"
-- | Try to get the reason trail for an instance. In case it is not possible,
-- log the failure and return an empty list instead.
getReasonTrail :: String -> IO ReasonTrail
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment