Skip to content

Commit

Permalink
Add parameter print
Browse files Browse the repository at this point in the history
  • Loading branch information
mbj committed Jan 4, 2024
1 parent 73a5306 commit 9af3b50
Showing 1 changed file with 40 additions and 28 deletions.
68 changes: 40 additions & 28 deletions stack-deploy/src/StackDeploy/CLI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,16 @@ parserInfo instanceSpecMap = wrapHelper commands "stack commands"

instanceCommands :: CLI.Parser (MIO env System.ExitCode)
instanceCommands = CLI.hsubparser
$ mkCommand "cancel" (cancel <$> instanceNameOption) "cancel stack update"
<> mkCommand "create" (create <$> instanceNameOption <*> parameters) "create stack"
<> mkCommand "delete" (delete <$> instanceNameOption) "delete stack"
<> mkCommand "events" (events <$> instanceNameOption) "list stack events"
<> mkCommand "outputs" (outputs <$> instanceNameOption) "list stack outputs"
<> mkCommand "sync" (sync <$> instanceNameOption <*> parameters) "sync stack with spec"
<> mkCommand "update" (update <$> instanceNameOption <*> parameters) "update existing stack"
<> mkCommand "wait" (wait <$> instanceNameOption <*> tokenParser) "wait for stack operation"
<> mkCommand "watch" (watch <$> instanceNameOption) "watch stack events"
$ mkCommand "cancel" (cancel <$> instanceNameOption) "cancel stack update"
<> mkCommand "create" (create <$> instanceNameOption <*> parameters) "create stack"
<> mkCommand "delete" (delete <$> instanceNameOption) "delete stack"
<> mkCommand "events" (events <$> instanceNameOption) "list stack events"
<> mkCommand "outputs" (outputs <$> instanceNameOption) "list stack outputs"
<> mkCommand "parameters" (listParameters <$> instanceNameOption) "list stack parameters"
<> mkCommand "sync" (sync <$> instanceNameOption <*> parameters) "sync stack with spec"
<> mkCommand "update" (update <$> instanceNameOption <*> parameters) "update existing stack"
<> mkCommand "wait" (wait <$> instanceNameOption <*> tokenParser) "wait for stack operation"
<> mkCommand "watch" (watch <$> instanceNameOption) "watch stack events"

templateCommands :: CLI.Parser (MIO env System.ExitCode)
templateCommands = CLI.hsubparser
Expand All @@ -71,45 +72,56 @@ parserInfo instanceSpecMap = wrapHelper commands "stack commands"
tokenParser = Token <$> CLI.argument CLI.str (CLI.metavar "TOKEN")

cancel :: StackDeploy.InstanceName -> MIO env System.ExitCode
cancel name = do
void . AWS.send . CF.newCancelUpdateStack $ toText name
cancel instanceName = do
void . AWS.send . CF.newCancelUpdateStack $ toText instanceName
success

create :: StackDeploy.InstanceName -> ParameterMap -> MIO env System.ExitCode
create name userParameterMap = do
withInstanceSpec name $ \instanceSpec ->
create instanceName userParameterMap = do
withInstanceSpec instanceName $ \instanceSpec ->
exitCode =<< StackDeploy.performOperation (OpCreate instanceSpec userParameterMap)

update :: StackDeploy.InstanceName -> ParameterMap -> MIO env System.ExitCode
update name userParameterMap = do
withInstanceSpec name $ \instanceSpec ->
withExistingStack name $ \existingStack ->
update instanceName userParameterMap = do
withInstanceSpec instanceName $ \instanceSpec ->
withExistingStack instanceName $ \existingStack ->
exitCode =<< StackDeploy.performOperation (OpUpdate existingStack instanceSpec userParameterMap)

sync :: StackDeploy.InstanceName -> ParameterMap -> MIO env System.ExitCode
sync name userParameterMap = do
withInstanceSpec name $ \instanceSpec -> do
sync instanceName userParameterMap = do
withInstanceSpec instanceName $ \instanceSpec -> do
exitCode
=<< StackDeploy.performOperation . maybe
(OpCreate instanceSpec userParameterMap)
(\existingStack -> OpUpdate existingStack instanceSpec userParameterMap)
=<< StackDeploy.readExistingStack name
=<< StackDeploy.readExistingStack instanceName

wait :: StackDeploy.InstanceName -> Token -> MIO env System.ExitCode
wait name token
= withExistingStack name
wait instanceName token
= withExistingStack instanceName
$ waitForOperation token . (.stackId)

outputs :: StackDeploy.InstanceName -> MIO env System.ExitCode
outputs name = withExistingStack name $ \existingStack -> do
outputs instanceName = withExistingStack instanceName $ \existingStack -> do
traverse_ printOutput existingStack.outputs
success
where
printOutput :: CF.Output -> MIO env ()
printOutput = liftIO . Text.putStrLn . convertText . show

listParameters :: StackDeploy.InstanceName -> MIO env System.ExitCode
listParameters instanceName = withExistingStack instanceName $ \existingStack -> do
traverse_ printParameter existingStack.parameters
success
where
printParameter :: CF.Parameter -> MIO env ()
printParameter parameter
= liftIO
. Text.putStrLn
$ (fromMaybe "" parameter.parameterKey) <> ": " <> (fromMaybe "" $ convert parameter.parameterValue)

delete :: StackDeploy.InstanceName -> MIO env System.ExitCode
delete name = withExistingStack name $ exitCode <=< StackDeploy.performOperation . OpDelete
delete instanceName = withExistingStack instanceName $ exitCode <=< StackDeploy.performOperation . OpDelete

listTemplates :: MIO env System.ExitCode
listTemplates = do
Expand All @@ -122,14 +134,14 @@ parserInfo instanceSpecMap = wrapHelper commands "stack commands"
success

events :: StackDeploy.InstanceName -> MIO env System.ExitCode
events name = do
events instanceName = do
runConduit $ AWS.nestedResourceC req (fromMaybe [] . (.stackEvents)) .| Conduit.mapM_ StackDeploy.printEvent
success
where
req = CF.newDescribeStackEvents & CF.describeStackEvents_stackName .~ pure (toText name)
req = CF.newDescribeStackEvents & CF.describeStackEvents_stackName .~ pure (toText instanceName)

watch :: StackDeploy.InstanceName -> MIO env System.ExitCode
watch name = withExistingStack name $ \existingStack -> do
watch instanceName = withExistingStack instanceName $ \existingStack -> do
void $ pollEvents (defaultPoll existingStack.stackId) StackDeploy.printEvent
success

Expand Down Expand Up @@ -203,12 +215,12 @@ parameter = CLI.option
reader = CLI.eitherReader (Text.parseOnly parser . convertText)

parser = do
name <- convertFail =<< Text.many1 (Text.satisfy allowChar)
instanceName <- convertFail =<< Text.many1 (Text.satisfy allowChar)
Text.skip (== ':')
value <- convertFail =<< Text.many' Text.anyChar
void Text.endOfInput

pure $ Parameter name value
pure $ Parameter instanceName value

allowChar = \case
'-' -> True
Expand Down

0 comments on commit 9af3b50

Please sign in to comment.