groot-0.0.1.0: src/Groot/AWS/TaskDef.hs
module Groot.AWS.TaskDef where
import Control.Lens
import Control.Monad.Trans.Maybe
import Data.Conduit
import qualified Data.Conduit.List as CL
import Network.AWS
import qualified Network.AWS.ECS as ECS
import Groot.Types
taskDefId :: ECS.TaskDefinition -> Maybe TaskDefId
taskDefId taskDef = TaskDefId <$> (TaskFamily <$> taskDef ^. ECS.tdFamily) <*> (taskDef ^. ECS.tdRevision)
getTaskDef :: MonadAWS m => TaskDefRef -> MaybeT m ECS.TaskDefinition
getTaskDef (TaskDefRef arn) =
catching _ServiceError readTaskDef $ \_ -> MaybeT (pure Nothing)
where readTaskDef = MaybeT $ do
res <- send $ ECS.describeTaskDefinition arn
return $ res ^. ECS.desrsTaskDefinition
taskDefFromTask :: MonadAWS m => ECS.Task -> MaybeT m ECS.TaskDefinition
taskDefFromTask tsk = do
arn <- MaybeT . return $ TaskDefRef <$> tsk ^. ECS.tTaskDefinitionARN
getTaskDef arn
fetchTaskDefs :: (MonadAWS m, Foldable f) => f TaskDefFilter -> Source m ECS.TaskDefinition
fetchTaskDefs filters =
let tds :: TaskDefStatus -> ECS.TaskDefinitionStatus
tds TDSActive = ECS.TDSActive
tds TDSInactive = ECS.TDSInactive
withFilter :: TaskDefFilter -> ECS.ListTaskDefinitions -> ECS.ListTaskDefinitions
withFilter (TDFFamily (TaskFamily f)) = ECS.ltdFamilyPrefix ?~ f
withFilter (TDFStatus s) = ECS.ltdStatus ?~ (tds s)
in paginate (foldr withFilter ECS.listTaskDefinitions filters)
=$= CL.concatMap (view ECS.ltdrsTaskDefinitionARNs)
=$= CL.map TaskDefRef
=$= CL.mapMaybeM (\x -> runMaybeT (getTaskDef x))