module Main
( main
) where
import Network.Distributed
import Control.Monad (join)
import Data.Semigroup ((<>))
import Options.Applicative
newtype Opts = Opts
{ waitNodes :: Int
}
optParser :: Parser Opts
optParser =
Opts <$>
option
auto
(long "nodes" <> short 'n' <>
help "How many nodes the Master should wait for before beginning build" <>
showDefault <>
value 1 <>
metavar "INT")
description :: InfoMod a
description =
fullDesc <>
progDesc "stack-network interfaces with Stack to create a distributed version" <>
header "stack-network"
commands :: Parser (IO ())
commands =
subparser $
command "build" (info (runBuild <$> optParser) description) <>
command "join" (info (pure runJoin) description)
where
runJoin = runStackBuildT >> parseNetConfig >>= joinNetwork
runBuild opts = runRequestNode (waitNodes opts) =<< parseNetConfig
main :: IO ()
main = join $ execParser (info (commands <**> helper) description)