stackctl-1.4.2.2: src/Stackctl/Spec/List.hs
module Stackctl.Spec.List
( ListOptions (..)
, parseListOptions
, runList
) where
import Stackctl.Prelude
import Blammo.Logging.Logger (pushLoggerLn)
import Options.Applicative
import Stackctl.AWS
import Stackctl.AWS.Scope
import Stackctl.Colors
import Stackctl.Config (HasConfig)
import Stackctl.DirectoryOption (HasDirectoryOption (..))
import Stackctl.FilterOption (HasFilterOption)
import Stackctl.Spec.Discover
import Stackctl.StackSpec
data ListOptions = ListOptions
-- brittany-disable-next-binding
parseListOptions :: Parser ListOptions
parseListOptions = pure ListOptions
runList
:: ( MonadUnliftIO m
, MonadMask m
, MonadResource m
, MonadLogger m
, MonadReader env m
, HasAwsScope env
, HasAwsEnv env
, HasLogger env
, HasConfig env
, HasDirectoryOption env
, HasFilterOption env
)
=> ListOptions
-> m ()
runList _ = do
specs <- discoverSpecs
Colors {..} <- getColorsLogger
for_ specs $ \spec -> do
let
path = stackSpecFilePath spec
name = stackSpecStackName spec
exists <- isJust <$> awsCloudFormationDescribeStackMaybe name
let
formatted :: Text
formatted =
" "
<> (if exists then green "✓ " else yellow "✗ ")
<> cyan (unStackName name)
<> " => "
<> magenta (pack path)
pushLoggerLn formatted