diff --git a/Makefile.am b/Makefile.am index eb6de4f21623140352cdb700ea37c86d6b9486e6..cb750fae530f10d6bbbbf6fc51098d80ccfd2a73 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1046,6 +1046,10 @@ hs-apidoc: $(HS_BUILT_SRCS) ln -s ../hscolour.css $(APIDOC_HS_DIR)/Ganeti/HTools/hscolour.css set -e ; \ cd htools; \ + if [ "$(HTOOLS_NOCURL)" ]; \ + then OPTGHC="--optghc=$(HTOOLS_NOCURL)"; \ + else OPTGHC=""; \ + fi; \ RELSRCS="$(HS_LIB_SRCS:htools/%=%)"; \ for file in $$RELSRCS; do \ hfile=`echo $$file|sed 's/\\.hs$$//'`.html; \ @@ -1055,6 +1059,7 @@ hs-apidoc: $(HS_BUILT_SRCS) -t ganeti-htools -p haddock-prologue \ --source-module="%{MODULE/.//}.html" \ --source-entity="%{MODULE/.//}.html#%{NAME}" \ + $$OPTGHC \ $(filter-out Ganeti/HTools/ExtLoader.hs,$(HS_LIB_SRCS:htools/%=%)) .PHONY: TAGS diff --git a/htools/Ganeti/HTools/ExtLoader.hs b/htools/Ganeti/HTools/ExtLoader.hs index 0412c1bb3731755ed612ce81d64e480321459749..9be8dc7ce8256f3c394d88e9e0c8e88aa3b07504 100644 --- a/htools/Ganeti/HTools/ExtLoader.hs +++ b/htools/Ganeti/HTools/ExtLoader.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - {-| External data loader This module holds the external data loading, and thus is the only one @@ -10,7 +8,7 @@ libraries implementing the low-level protocols. {- -Copyright (C) 2009, 2010 Google Inc. +Copyright (C) 2009, 2010, 2011 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 @@ -43,9 +41,7 @@ import System import Text.Printf (printf, hPrintf) import qualified Ganeti.HTools.Luxi as Luxi -#ifndef NO_CURL import qualified Ganeti.HTools.Rapi as Rapi -#endif import qualified Ganeti.HTools.Simu as Simu import qualified Ganeti.HTools.Text as Text import Ganeti.HTools.Loader (mergeData, checkData, ClusterData(..) @@ -109,12 +105,7 @@ loadExternalData opts = do exitWith $ ExitFailure 1) input_data <- case () of - _ | setRapi -> -#ifdef NO_CURL - return $ Bad "RAPI/curl backend disabled at compile time" -#else - wrapIO $ Rapi.loadData mhost -#endif + _ | setRapi -> wrapIO $ Rapi.loadData mhost | setLuxi -> wrapIO $ Luxi.loadData $ fromJust lsock | setSim -> Simu.loadData simdata | setFile -> wrapIO $ Text.loadData $ fromJust tfile diff --git a/htools/Ganeti/HTools/QC.hs b/htools/Ganeti/HTools/QC.hs index 62b00c16daea4c01d6dcbe58d79aa0855cb2c459..534a7b1dcf0082b0e6f71551634a88e7fcc0a58f 100644 --- a/htools/Ganeti/HTools/QC.hs +++ b/htools/Ganeti/HTools/QC.hs @@ -58,6 +58,7 @@ import qualified Ganeti.HTools.Luxi import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Group as Group import qualified Ganeti.HTools.PeerMap as PeerMap +import qualified Ganeti.HTools.Rapi import qualified Ganeti.HTools.Simu import qualified Ganeti.HTools.Text as Text import qualified Ganeti.HTools.Types as Types diff --git a/htools/Ganeti/HTools/Rapi.hs b/htools/Ganeti/HTools/Rapi.hs index 19aa817fb813ebbc559508dde0963cd3a1c1c6f0..1b0b9d219f2e0b64c202d283264126a750d5d53c 100644 --- a/htools/Ganeti/HTools/Rapi.hs +++ b/htools/Ganeti/HTools/Rapi.hs @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -} -{-# LANGUAGE BangPatterns #-} +{-# LANGUAGE BangPatterns, CPP #-} module Ganeti.HTools.Rapi ( @@ -32,8 +32,10 @@ module Ganeti.HTools.Rapi ) where import Data.Maybe (fromMaybe) +#ifndef NO_CURL import Network.Curl import Network.Curl.Types () +#endif import Control.Monad import Text.JSON (JSObject, JSValue, fromJSObject, decodeStrict) import Text.JSON.Types (JSValue(..)) @@ -46,6 +48,14 @@ import qualified Ganeti.HTools.Group as Group import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance +-- | Read an URL via curl and return the body if successful. +getUrl :: (Monad m) => String -> IO (m String) + +#ifdef NO_CURL +getUrl _ = return $ fail "RAPI/curl backend disabled at compile time" + +#else + -- | The curl options we use curlOpts :: [CurlOption] curlOpts = [ CurlSSLVerifyPeer False @@ -54,14 +64,13 @@ curlOpts = [ CurlSSLVerifyPeer False , CurlConnectTimeout (fromIntegral connTimeout) ] --- | Read an URL via curl and return the body if successful. -getUrl :: (Monad m) => String -> IO (m String) getUrl url = do (code, !body) <- curlGetString url curlOpts return (case code of CurlOK -> return body _ -> fail $ printf "Curl error for '%s', error %s" url (show code)) +#endif -- | Append the default port if not passed in. formatHost :: String -> String diff --git a/htools/hscan.hs b/htools/hscan.hs index 69601338ccb5ec7ed6275949ac7b87dbe7495d42..07ab65757e2f3c0c488e15954841911b2f3288ce 100644 --- a/htools/hscan.hs +++ b/htools/hscan.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - {-| Scan clusters via RAPI or LUXI and write state data files. -} @@ -40,9 +38,7 @@ import qualified Ganeti.HTools.Container as Container import qualified Ganeti.HTools.Cluster as Cluster import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance -#ifndef NO_CURL import qualified Ganeti.HTools.Rapi as Rapi -#endif import qualified Ganeti.HTools.Luxi as Luxi import Ganeti.HTools.Loader (checkData, mergeData, ClusterData(..)) import Ganeti.HTools.Text (serializeCluster) @@ -155,12 +151,6 @@ main = do result <- writeData nlen name opts input_data unless result $ exitWith $ ExitFailure 2 -#ifndef NO_CURL results <- mapM (\name -> Rapi.loadData name >>= writeData nlen name opts) clusters unless (all id results) $ exitWith (ExitFailure 2) -#else - when (not $ null clusters) $ do - putStrLn "RAPI/curl backend disabled at compile time, cannot scan clusters" - exitWith $ ExitFailure 1 -#endif