{-# LANGUAGE FlexibleContexts #-} module AWS.EC2.Tag ( describeTags , createTags , deleteTags ) where import Data.Text (Text) import Data.Conduit import Control.Applicative import AWS.EC2.Internal import AWS.EC2.Types import AWS.EC2.Query import AWS.Lib.Parser describeTags :: (MonadResource m, MonadBaseControl IO m) => [Filter] -- ^ Filters -> EC2 m (ResumableSource m Tag) describeTags filters = ec2QuerySource "DescribeTags" params $ itemConduit "tagSet" $ Tag <$> getT "resourceId" <*> getT "resourceType" <*> getT "key" <*> getT "value" where params = [filtersParam filters] createTags :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ ResourceId (instance-id, image-id,..) -> [(Text, Text)] -- ^ (Key, Value) -> EC2 m Bool createTags rids kvs = ec2Query "CreateTags" params $ getT "return" where params = [ "ResourceId" |.#= rids , "Tag" |.#. map tagParams kvs ] tagParams (k, v) = [ "Key" |= k , "Value" |= v ] deleteTags :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ ResourceId (instance-id, image-id,..) -> [ResourceTag] -> EC2 m Bool deleteTags rids tags = ec2Query "DeleteTags" params $ getT "return" where params = [ "ResourceId" |.#= rids , "Tag" |.#. map tagParams tags ] tagParams tag = [ "Key" |= resourceTagKey tag , "Value" |=? resourceTagValue tag ]