{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Amazonka.ECS.Types.Volume -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) module Amazonka.ECS.Types.Volume where import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import Amazonka.ECS.Types.DockerVolumeConfiguration import Amazonka.ECS.Types.EFSVolumeConfiguration import Amazonka.ECS.Types.FSxWindowsFileServerVolumeConfiguration import Amazonka.ECS.Types.HostVolumeProperties import qualified Amazonka.Prelude as Prelude -- | A data volume that\'s used in a task definition. For tasks that use the -- Amazon Elastic File System (Amazon EFS), specify an -- @efsVolumeConfiguration@. For Windows tasks that use Amazon FSx for -- Windows File Server file system, specify a -- @fsxWindowsFileServerVolumeConfiguration@. For tasks that use a Docker -- volume, specify a @DockerVolumeConfiguration@. For tasks that use a bind -- mount host volume, specify a @host@ and optional @sourcePath@. For more -- information, see -- . -- -- /See:/ 'newVolume' smart constructor. data Volume = Volume' { -- | This parameter is specified when you use Docker volumes. -- -- Windows containers only support the use of the @local@ driver. To use -- bind mounts, specify the @host@ parameter instead. -- -- Docker volumes aren\'t supported by tasks run on Fargate. dockerVolumeConfiguration :: Prelude.Maybe DockerVolumeConfiguration, -- | This parameter is specified when you use an Amazon Elastic File System -- file system for task storage. efsVolumeConfiguration :: Prelude.Maybe EFSVolumeConfiguration, -- | This parameter is specified when you use Amazon FSx for Windows File -- Server file system for task storage. fsxWindowsFileServerVolumeConfiguration :: Prelude.Maybe FSxWindowsFileServerVolumeConfiguration, -- | This parameter is specified when you use bind mount host volumes. The -- contents of the @host@ parameter determine whether your bind mount host -- volume persists on the host container instance and where it\'s stored. -- If the @host@ parameter is empty, then the Docker daemon assigns a host -- path for your data volume. However, the data isn\'t guaranteed to -- persist after the containers that are associated with it stop running. -- -- Windows containers can mount whole directories on the same drive as -- @$env:ProgramData@. Windows containers can\'t mount directories on a -- different drive, and mount point can\'t be across drives. For example, -- you can mount @C:\\my\\path:C:\\my\\path@ and @D:\\:D:\\@, but not -- @D:\\my\\path:C:\\my\\path@ or @D:\\:C:\\my\\path@. host :: Prelude.Maybe HostVolumeProperties, -- | The name of the volume. Up to 255 letters (uppercase and lowercase), -- numbers, underscores, and hyphens are allowed. This name is referenced -- in the @sourceVolume@ parameter of container definition @mountPoints@. name :: Prelude.Maybe Prelude.Text } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'Volume' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'dockerVolumeConfiguration', 'volume_dockerVolumeConfiguration' - This parameter is specified when you use Docker volumes. -- -- Windows containers only support the use of the @local@ driver. To use -- bind mounts, specify the @host@ parameter instead. -- -- Docker volumes aren\'t supported by tasks run on Fargate. -- -- 'efsVolumeConfiguration', 'volume_efsVolumeConfiguration' - This parameter is specified when you use an Amazon Elastic File System -- file system for task storage. -- -- 'fsxWindowsFileServerVolumeConfiguration', 'volume_fsxWindowsFileServerVolumeConfiguration' - This parameter is specified when you use Amazon FSx for Windows File -- Server file system for task storage. -- -- 'host', 'volume_host' - This parameter is specified when you use bind mount host volumes. The -- contents of the @host@ parameter determine whether your bind mount host -- volume persists on the host container instance and where it\'s stored. -- If the @host@ parameter is empty, then the Docker daemon assigns a host -- path for your data volume. However, the data isn\'t guaranteed to -- persist after the containers that are associated with it stop running. -- -- Windows containers can mount whole directories on the same drive as -- @$env:ProgramData@. Windows containers can\'t mount directories on a -- different drive, and mount point can\'t be across drives. For example, -- you can mount @C:\\my\\path:C:\\my\\path@ and @D:\\:D:\\@, but not -- @D:\\my\\path:C:\\my\\path@ or @D:\\:C:\\my\\path@. -- -- 'name', 'volume_name' - The name of the volume. Up to 255 letters (uppercase and lowercase), -- numbers, underscores, and hyphens are allowed. This name is referenced -- in the @sourceVolume@ parameter of container definition @mountPoints@. newVolume :: Volume newVolume = Volume' { dockerVolumeConfiguration = Prelude.Nothing, efsVolumeConfiguration = Prelude.Nothing, fsxWindowsFileServerVolumeConfiguration = Prelude.Nothing, host = Prelude.Nothing, name = Prelude.Nothing } -- | This parameter is specified when you use Docker volumes. -- -- Windows containers only support the use of the @local@ driver. To use -- bind mounts, specify the @host@ parameter instead. -- -- Docker volumes aren\'t supported by tasks run on Fargate. volume_dockerVolumeConfiguration :: Lens.Lens' Volume (Prelude.Maybe DockerVolumeConfiguration) volume_dockerVolumeConfiguration = Lens.lens (\Volume' {dockerVolumeConfiguration} -> dockerVolumeConfiguration) (\s@Volume' {} a -> s {dockerVolumeConfiguration = a} :: Volume) -- | This parameter is specified when you use an Amazon Elastic File System -- file system for task storage. volume_efsVolumeConfiguration :: Lens.Lens' Volume (Prelude.Maybe EFSVolumeConfiguration) volume_efsVolumeConfiguration = Lens.lens (\Volume' {efsVolumeConfiguration} -> efsVolumeConfiguration) (\s@Volume' {} a -> s {efsVolumeConfiguration = a} :: Volume) -- | This parameter is specified when you use Amazon FSx for Windows File -- Server file system for task storage. volume_fsxWindowsFileServerVolumeConfiguration :: Lens.Lens' Volume (Prelude.Maybe FSxWindowsFileServerVolumeConfiguration) volume_fsxWindowsFileServerVolumeConfiguration = Lens.lens (\Volume' {fsxWindowsFileServerVolumeConfiguration} -> fsxWindowsFileServerVolumeConfiguration) (\s@Volume' {} a -> s {fsxWindowsFileServerVolumeConfiguration = a} :: Volume) -- | This parameter is specified when you use bind mount host volumes. The -- contents of the @host@ parameter determine whether your bind mount host -- volume persists on the host container instance and where it\'s stored. -- If the @host@ parameter is empty, then the Docker daemon assigns a host -- path for your data volume. However, the data isn\'t guaranteed to -- persist after the containers that are associated with it stop running. -- -- Windows containers can mount whole directories on the same drive as -- @$env:ProgramData@. Windows containers can\'t mount directories on a -- different drive, and mount point can\'t be across drives. For example, -- you can mount @C:\\my\\path:C:\\my\\path@ and @D:\\:D:\\@, but not -- @D:\\my\\path:C:\\my\\path@ or @D:\\:C:\\my\\path@. volume_host :: Lens.Lens' Volume (Prelude.Maybe HostVolumeProperties) volume_host = Lens.lens (\Volume' {host} -> host) (\s@Volume' {} a -> s {host = a} :: Volume) -- | The name of the volume. Up to 255 letters (uppercase and lowercase), -- numbers, underscores, and hyphens are allowed. This name is referenced -- in the @sourceVolume@ parameter of container definition @mountPoints@. volume_name :: Lens.Lens' Volume (Prelude.Maybe Prelude.Text) volume_name = Lens.lens (\Volume' {name} -> name) (\s@Volume' {} a -> s {name = a} :: Volume) instance Data.FromJSON Volume where parseJSON = Data.withObject "Volume" ( \x -> Volume' Prelude.<$> (x Data..:? "dockerVolumeConfiguration") Prelude.<*> (x Data..:? "efsVolumeConfiguration") Prelude.<*> ( x Data..:? "fsxWindowsFileServerVolumeConfiguration" ) Prelude.<*> (x Data..:? "host") Prelude.<*> (x Data..:? "name") ) instance Prelude.Hashable Volume where hashWithSalt _salt Volume' {..} = _salt `Prelude.hashWithSalt` dockerVolumeConfiguration `Prelude.hashWithSalt` efsVolumeConfiguration `Prelude.hashWithSalt` fsxWindowsFileServerVolumeConfiguration `Prelude.hashWithSalt` host `Prelude.hashWithSalt` name instance Prelude.NFData Volume where rnf Volume' {..} = Prelude.rnf dockerVolumeConfiguration `Prelude.seq` Prelude.rnf efsVolumeConfiguration `Prelude.seq` Prelude.rnf fsxWindowsFileServerVolumeConfiguration `Prelude.seq` Prelude.rnf host `Prelude.seq` Prelude.rnf name instance Data.ToJSON Volume where toJSON Volume' {..} = Data.object ( Prelude.catMaybes [ ("dockerVolumeConfiguration" Data..=) Prelude.<$> dockerVolumeConfiguration, ("efsVolumeConfiguration" Data..=) Prelude.<$> efsVolumeConfiguration, ("fsxWindowsFileServerVolumeConfiguration" Data..=) Prelude.<$> fsxWindowsFileServerVolumeConfiguration, ("host" Data..=) Prelude.<$> host, ("name" Data..=) Prelude.<$> name ] )