blob: d807d07ae3302849839a6c43384f60c9a7bc8678 [file] [log] [blame]
{-| Implementation of DataCollectors CLI functions.
This module holds the common command-line related functions for the
collector binaries.
-}
{-
Copyright (C) 2009, 2010, 2011, 2012 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.DataCollectors.CLI
( Options(..)
, OptType
, defaultOptions
-- * The options
, oShowHelp
, oShowVer
, oShowComp
, oDrbdPairing
, oDrbdStatus
, oNode
, oConfdAddr
, oConfdPort
, oInputFile
, oInstances
, genericOptions
) where
import System.Console.GetOpt
import Ganeti.BasicTypes
import Ganeti.Common as Common
import Ganeti.Utils
-- * Data types
-- | Command line options structure.
data Options = Options
{ optShowHelp :: Bool -- ^ Just show the help
, optShowComp :: Bool -- ^ Just show the completion info
, optShowVer :: Bool -- ^ Just show the program version
, optDrbdStatus :: Maybe FilePath -- ^ Path to the file containing DRBD
-- status information
, optDrbdPairing :: Maybe FilePath -- ^ Path to the file containing pairings
-- between instances and DRBD minors
, optNode :: Maybe String -- ^ Info are requested for this node
, optConfdAddr :: Maybe String -- ^ IP address of the Confd server
, optConfdPort :: Maybe Int -- ^ The port of the Confd server to
-- connect to
, optInputFile :: Maybe FilePath -- ^ Path to the file containing the
-- information to be parsed
, optInstances :: Maybe FilePath -- ^ Path to the file contained a
-- serialized list of instances as in:
-- ([Primary], [Secondary])
} deriving Show
-- | Default values for the command line options.
defaultOptions :: Options
defaultOptions = Options
{ optShowHelp = False
, optShowComp = False
, optShowVer = False
, optDrbdStatus = Nothing
, optDrbdPairing = Nothing
, optNode = Nothing
, optConfdAddr = Nothing
, optConfdPort = Nothing
, optInputFile = Nothing
, optInstances = Nothing
}
-- | Abbreviation for the option type.
type OptType = GenericOptType Options
instance StandardOptions Options where
helpRequested = optShowHelp
verRequested = optShowVer
compRequested = optShowComp
requestHelp o = o { optShowHelp = True }
requestVer o = o { optShowVer = True }
requestComp o = o { optShowComp = True }
-- * Command line options
oDrbdPairing :: OptType
oDrbdPairing =
( Option "p" ["drbd-pairing"]
(ReqArg (\ f o -> Ok o { optDrbdPairing = Just f}) "FILE")
"the FILE containing pairings between instances and DRBD minors",
OptComplFile)
oDrbdStatus :: OptType
oDrbdStatus =
( Option "s" ["drbd-status"]
(ReqArg (\ f o -> Ok o { optDrbdStatus = Just f }) "FILE")
"the DRBD status FILE",
OptComplFile)
oNode :: OptType
oNode =
( Option "n" ["node"]
(ReqArg (\ n o -> Ok o { optNode = Just n }) "NODE")
"the FQDN of the NODE about which information is requested",
OptComplFile)
oConfdAddr :: OptType
oConfdAddr =
( Option "a" ["address"]
(ReqArg (\ a o -> Ok o { optConfdAddr = Just a }) "IP_ADDR")
"the IP address of the Confd server to connect to",
OptComplFile)
oConfdPort :: OptType
oConfdPort =
(Option "p" ["port"]
(reqWithConversion (tryRead "reading port")
(\port opts -> Ok opts { optConfdPort = Just port }) "PORT")
"Network port of the Confd server to connect to",
OptComplInteger)
oInputFile :: OptType
oInputFile =
( Option "f" ["file"]
(ReqArg (\ f o -> Ok o { optInputFile = Just f }) "FILE")
"the input FILE",
OptComplFile)
oInstances :: OptType
oInstances =
( Option "i" ["instances"]
(ReqArg (\ f o -> Ok o { optInstances = Just f}) "FILE")
"the FILE containing serialized instances",
OptComplFile)
-- | Generic options.
genericOptions :: [GenericOptType Options]
genericOptions = [ oShowVer
, oShowHelp
, oShowComp
]