packages feed

amazonka-securityhub-2.0: gen/Amazonka/SecurityHub/Types/AwsEcsTaskDefinitionDetails.hs

{-# 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.SecurityHub.Types.AwsEcsTaskDefinitionDetails
-- 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.SecurityHub.Types.AwsEcsTaskDefinitionDetails where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SecurityHub.Types.AwsEcsTaskDefinitionContainerDefinitionsDetails
import Amazonka.SecurityHub.Types.AwsEcsTaskDefinitionInferenceAcceleratorsDetails
import Amazonka.SecurityHub.Types.AwsEcsTaskDefinitionPlacementConstraintsDetails
import Amazonka.SecurityHub.Types.AwsEcsTaskDefinitionProxyConfigurationDetails
import Amazonka.SecurityHub.Types.AwsEcsTaskDefinitionVolumesDetails

-- | Details about a task definition. A task definition describes the
-- container and volume definitions of an Amazon Elastic Container Service
-- task.
--
-- /See:/ 'newAwsEcsTaskDefinitionDetails' smart constructor.
data AwsEcsTaskDefinitionDetails = AwsEcsTaskDefinitionDetails'
  { -- | The container definitions that describe the containers that make up the
    -- task.
    containerDefinitions :: Prelude.Maybe [AwsEcsTaskDefinitionContainerDefinitionsDetails],
    -- | The number of CPU units used by the task.Valid values are as follows:
    --
    -- -   @256 (.25 vCPU)@
    --
    -- -   @512 (.5 vCPU)@
    --
    -- -   @1024 (1 vCPU)@
    --
    -- -   @2048 (2 vCPU)@
    --
    -- -   @4096 (4 vCPU)@
    cpu :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the task execution role that grants the container agent
    -- permission to make API calls on behalf of the container user.
    executionRoleArn :: Prelude.Maybe Prelude.Text,
    -- | The name of a family that this task definition is registered to.
    family :: Prelude.Maybe Prelude.Text,
    -- | The Elastic Inference accelerators to use for the containers in the
    -- task.
    inferenceAccelerators :: Prelude.Maybe [AwsEcsTaskDefinitionInferenceAcceleratorsDetails],
    -- | The inter-process communication (IPC) resource namespace to use for the
    -- containers in the task. Valid values are as follows:
    --
    -- -   @host@
    --
    -- -   @none@
    --
    -- -   @task@
    ipcMode :: Prelude.Maybe Prelude.Text,
    -- | The amount (in MiB) of memory used by the task.
    --
    -- For tasks that are hosted on Amazon EC2, you can provide a task-level
    -- memory value or a container-level memory value. For tasks that are
    -- hosted on Fargate, you must use one of the
    -- <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size specified values>
    -- in the //Amazon Elastic Container Service Developer Guide// , which
    -- determines your range of supported values for the @Cpu@ and @Memory@
    -- parameters.
    memory :: Prelude.Maybe Prelude.Text,
    -- | The Docker networking mode to use for the containers in the task. Valid
    -- values are as follows:
    --
    -- -   @awsvpc@
    --
    -- -   @bridge@
    --
    -- -   @host@
    --
    -- -   @none@
    networkMode :: Prelude.Maybe Prelude.Text,
    -- | The process namespace to use for the containers in the task. Valid
    -- values are @host@ or @task@.
    pidMode :: Prelude.Maybe Prelude.Text,
    -- | The placement constraint objects to use for tasks.
    placementConstraints :: Prelude.Maybe [AwsEcsTaskDefinitionPlacementConstraintsDetails],
    -- | The configuration details for the App Mesh proxy.
    proxyConfiguration :: Prelude.Maybe AwsEcsTaskDefinitionProxyConfigurationDetails,
    -- | The task launch types that the task definition was validated against.
    requiresCompatibilities :: Prelude.Maybe [Prelude.Text],
    -- | The short name or ARN of the IAM role that grants containers in the task
    -- permission to call Amazon Web Services API operations on your behalf.
    taskRoleArn :: Prelude.Maybe Prelude.Text,
    -- | The data volume definitions for the task.
    volumes :: Prelude.Maybe [AwsEcsTaskDefinitionVolumesDetails]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'AwsEcsTaskDefinitionDetails' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'containerDefinitions', 'awsEcsTaskDefinitionDetails_containerDefinitions' - The container definitions that describe the containers that make up the
-- task.
--
-- 'cpu', 'awsEcsTaskDefinitionDetails_cpu' - The number of CPU units used by the task.Valid values are as follows:
--
-- -   @256 (.25 vCPU)@
--
-- -   @512 (.5 vCPU)@
--
-- -   @1024 (1 vCPU)@
--
-- -   @2048 (2 vCPU)@
--
-- -   @4096 (4 vCPU)@
--
-- 'executionRoleArn', 'awsEcsTaskDefinitionDetails_executionRoleArn' - The ARN of the task execution role that grants the container agent
-- permission to make API calls on behalf of the container user.
--
-- 'family', 'awsEcsTaskDefinitionDetails_family' - The name of a family that this task definition is registered to.
--
-- 'inferenceAccelerators', 'awsEcsTaskDefinitionDetails_inferenceAccelerators' - The Elastic Inference accelerators to use for the containers in the
-- task.
--
-- 'ipcMode', 'awsEcsTaskDefinitionDetails_ipcMode' - The inter-process communication (IPC) resource namespace to use for the
-- containers in the task. Valid values are as follows:
--
-- -   @host@
--
-- -   @none@
--
-- -   @task@
--
-- 'memory', 'awsEcsTaskDefinitionDetails_memory' - The amount (in MiB) of memory used by the task.
--
-- For tasks that are hosted on Amazon EC2, you can provide a task-level
-- memory value or a container-level memory value. For tasks that are
-- hosted on Fargate, you must use one of the
-- <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size specified values>
-- in the //Amazon Elastic Container Service Developer Guide// , which
-- determines your range of supported values for the @Cpu@ and @Memory@
-- parameters.
--
-- 'networkMode', 'awsEcsTaskDefinitionDetails_networkMode' - The Docker networking mode to use for the containers in the task. Valid
-- values are as follows:
--
-- -   @awsvpc@
--
-- -   @bridge@
--
-- -   @host@
--
-- -   @none@
--
-- 'pidMode', 'awsEcsTaskDefinitionDetails_pidMode' - The process namespace to use for the containers in the task. Valid
-- values are @host@ or @task@.
--
-- 'placementConstraints', 'awsEcsTaskDefinitionDetails_placementConstraints' - The placement constraint objects to use for tasks.
--
-- 'proxyConfiguration', 'awsEcsTaskDefinitionDetails_proxyConfiguration' - The configuration details for the App Mesh proxy.
--
-- 'requiresCompatibilities', 'awsEcsTaskDefinitionDetails_requiresCompatibilities' - The task launch types that the task definition was validated against.
--
-- 'taskRoleArn', 'awsEcsTaskDefinitionDetails_taskRoleArn' - The short name or ARN of the IAM role that grants containers in the task
-- permission to call Amazon Web Services API operations on your behalf.
--
-- 'volumes', 'awsEcsTaskDefinitionDetails_volumes' - The data volume definitions for the task.
newAwsEcsTaskDefinitionDetails ::
  AwsEcsTaskDefinitionDetails
newAwsEcsTaskDefinitionDetails =
  AwsEcsTaskDefinitionDetails'
    { containerDefinitions =
        Prelude.Nothing,
      cpu = Prelude.Nothing,
      executionRoleArn = Prelude.Nothing,
      family = Prelude.Nothing,
      inferenceAccelerators = Prelude.Nothing,
      ipcMode = Prelude.Nothing,
      memory = Prelude.Nothing,
      networkMode = Prelude.Nothing,
      pidMode = Prelude.Nothing,
      placementConstraints = Prelude.Nothing,
      proxyConfiguration = Prelude.Nothing,
      requiresCompatibilities = Prelude.Nothing,
      taskRoleArn = Prelude.Nothing,
      volumes = Prelude.Nothing
    }

-- | The container definitions that describe the containers that make up the
-- task.
awsEcsTaskDefinitionDetails_containerDefinitions :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe [AwsEcsTaskDefinitionContainerDefinitionsDetails])
awsEcsTaskDefinitionDetails_containerDefinitions = Lens.lens (\AwsEcsTaskDefinitionDetails' {containerDefinitions} -> containerDefinitions) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {containerDefinitions = a} :: AwsEcsTaskDefinitionDetails) Prelude.. Lens.mapping Lens.coerced

-- | The number of CPU units used by the task.Valid values are as follows:
--
-- -   @256 (.25 vCPU)@
--
-- -   @512 (.5 vCPU)@
--
-- -   @1024 (1 vCPU)@
--
-- -   @2048 (2 vCPU)@
--
-- -   @4096 (4 vCPU)@
awsEcsTaskDefinitionDetails_cpu :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_cpu = Lens.lens (\AwsEcsTaskDefinitionDetails' {cpu} -> cpu) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {cpu = a} :: AwsEcsTaskDefinitionDetails)

-- | The ARN of the task execution role that grants the container agent
-- permission to make API calls on behalf of the container user.
awsEcsTaskDefinitionDetails_executionRoleArn :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_executionRoleArn = Lens.lens (\AwsEcsTaskDefinitionDetails' {executionRoleArn} -> executionRoleArn) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {executionRoleArn = a} :: AwsEcsTaskDefinitionDetails)

-- | The name of a family that this task definition is registered to.
awsEcsTaskDefinitionDetails_family :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_family = Lens.lens (\AwsEcsTaskDefinitionDetails' {family} -> family) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {family = a} :: AwsEcsTaskDefinitionDetails)

-- | The Elastic Inference accelerators to use for the containers in the
-- task.
awsEcsTaskDefinitionDetails_inferenceAccelerators :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe [AwsEcsTaskDefinitionInferenceAcceleratorsDetails])
awsEcsTaskDefinitionDetails_inferenceAccelerators = Lens.lens (\AwsEcsTaskDefinitionDetails' {inferenceAccelerators} -> inferenceAccelerators) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {inferenceAccelerators = a} :: AwsEcsTaskDefinitionDetails) Prelude.. Lens.mapping Lens.coerced

-- | The inter-process communication (IPC) resource namespace to use for the
-- containers in the task. Valid values are as follows:
--
-- -   @host@
--
-- -   @none@
--
-- -   @task@
awsEcsTaskDefinitionDetails_ipcMode :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_ipcMode = Lens.lens (\AwsEcsTaskDefinitionDetails' {ipcMode} -> ipcMode) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {ipcMode = a} :: AwsEcsTaskDefinitionDetails)

-- | The amount (in MiB) of memory used by the task.
--
-- For tasks that are hosted on Amazon EC2, you can provide a task-level
-- memory value or a container-level memory value. For tasks that are
-- hosted on Fargate, you must use one of the
-- <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size specified values>
-- in the //Amazon Elastic Container Service Developer Guide// , which
-- determines your range of supported values for the @Cpu@ and @Memory@
-- parameters.
awsEcsTaskDefinitionDetails_memory :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_memory = Lens.lens (\AwsEcsTaskDefinitionDetails' {memory} -> memory) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {memory = a} :: AwsEcsTaskDefinitionDetails)

-- | The Docker networking mode to use for the containers in the task. Valid
-- values are as follows:
--
-- -   @awsvpc@
--
-- -   @bridge@
--
-- -   @host@
--
-- -   @none@
awsEcsTaskDefinitionDetails_networkMode :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_networkMode = Lens.lens (\AwsEcsTaskDefinitionDetails' {networkMode} -> networkMode) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {networkMode = a} :: AwsEcsTaskDefinitionDetails)

-- | The process namespace to use for the containers in the task. Valid
-- values are @host@ or @task@.
awsEcsTaskDefinitionDetails_pidMode :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_pidMode = Lens.lens (\AwsEcsTaskDefinitionDetails' {pidMode} -> pidMode) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {pidMode = a} :: AwsEcsTaskDefinitionDetails)

-- | The placement constraint objects to use for tasks.
awsEcsTaskDefinitionDetails_placementConstraints :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe [AwsEcsTaskDefinitionPlacementConstraintsDetails])
awsEcsTaskDefinitionDetails_placementConstraints = Lens.lens (\AwsEcsTaskDefinitionDetails' {placementConstraints} -> placementConstraints) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {placementConstraints = a} :: AwsEcsTaskDefinitionDetails) Prelude.. Lens.mapping Lens.coerced

-- | The configuration details for the App Mesh proxy.
awsEcsTaskDefinitionDetails_proxyConfiguration :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe AwsEcsTaskDefinitionProxyConfigurationDetails)
awsEcsTaskDefinitionDetails_proxyConfiguration = Lens.lens (\AwsEcsTaskDefinitionDetails' {proxyConfiguration} -> proxyConfiguration) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {proxyConfiguration = a} :: AwsEcsTaskDefinitionDetails)

-- | The task launch types that the task definition was validated against.
awsEcsTaskDefinitionDetails_requiresCompatibilities :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe [Prelude.Text])
awsEcsTaskDefinitionDetails_requiresCompatibilities = Lens.lens (\AwsEcsTaskDefinitionDetails' {requiresCompatibilities} -> requiresCompatibilities) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {requiresCompatibilities = a} :: AwsEcsTaskDefinitionDetails) Prelude.. Lens.mapping Lens.coerced

-- | The short name or ARN of the IAM role that grants containers in the task
-- permission to call Amazon Web Services API operations on your behalf.
awsEcsTaskDefinitionDetails_taskRoleArn :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe Prelude.Text)
awsEcsTaskDefinitionDetails_taskRoleArn = Lens.lens (\AwsEcsTaskDefinitionDetails' {taskRoleArn} -> taskRoleArn) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {taskRoleArn = a} :: AwsEcsTaskDefinitionDetails)

-- | The data volume definitions for the task.
awsEcsTaskDefinitionDetails_volumes :: Lens.Lens' AwsEcsTaskDefinitionDetails (Prelude.Maybe [AwsEcsTaskDefinitionVolumesDetails])
awsEcsTaskDefinitionDetails_volumes = Lens.lens (\AwsEcsTaskDefinitionDetails' {volumes} -> volumes) (\s@AwsEcsTaskDefinitionDetails' {} a -> s {volumes = a} :: AwsEcsTaskDefinitionDetails) Prelude.. Lens.mapping Lens.coerced

instance Data.FromJSON AwsEcsTaskDefinitionDetails where
  parseJSON =
    Data.withObject
      "AwsEcsTaskDefinitionDetails"
      ( \x ->
          AwsEcsTaskDefinitionDetails'
            Prelude.<$> ( x
                            Data..:? "ContainerDefinitions"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "Cpu")
            Prelude.<*> (x Data..:? "ExecutionRoleArn")
            Prelude.<*> (x Data..:? "Family")
            Prelude.<*> ( x
                            Data..:? "InferenceAccelerators"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "IpcMode")
            Prelude.<*> (x Data..:? "Memory")
            Prelude.<*> (x Data..:? "NetworkMode")
            Prelude.<*> (x Data..:? "PidMode")
            Prelude.<*> ( x
                            Data..:? "PlacementConstraints"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "ProxyConfiguration")
            Prelude.<*> ( x
                            Data..:? "RequiresCompatibilities"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "TaskRoleArn")
            Prelude.<*> (x Data..:? "Volumes" Data..!= Prelude.mempty)
      )

instance Prelude.Hashable AwsEcsTaskDefinitionDetails where
  hashWithSalt _salt AwsEcsTaskDefinitionDetails' {..} =
    _salt
      `Prelude.hashWithSalt` containerDefinitions
      `Prelude.hashWithSalt` cpu
      `Prelude.hashWithSalt` executionRoleArn
      `Prelude.hashWithSalt` family
      `Prelude.hashWithSalt` inferenceAccelerators
      `Prelude.hashWithSalt` ipcMode
      `Prelude.hashWithSalt` memory
      `Prelude.hashWithSalt` networkMode
      `Prelude.hashWithSalt` pidMode
      `Prelude.hashWithSalt` placementConstraints
      `Prelude.hashWithSalt` proxyConfiguration
      `Prelude.hashWithSalt` requiresCompatibilities
      `Prelude.hashWithSalt` taskRoleArn
      `Prelude.hashWithSalt` volumes

instance Prelude.NFData AwsEcsTaskDefinitionDetails where
  rnf AwsEcsTaskDefinitionDetails' {..} =
    Prelude.rnf containerDefinitions
      `Prelude.seq` Prelude.rnf cpu
      `Prelude.seq` Prelude.rnf executionRoleArn
      `Prelude.seq` Prelude.rnf family
      `Prelude.seq` Prelude.rnf inferenceAccelerators
      `Prelude.seq` Prelude.rnf ipcMode
      `Prelude.seq` Prelude.rnf memory
      `Prelude.seq` Prelude.rnf networkMode
      `Prelude.seq` Prelude.rnf pidMode
      `Prelude.seq` Prelude.rnf placementConstraints
      `Prelude.seq` Prelude.rnf proxyConfiguration
      `Prelude.seq` Prelude.rnf requiresCompatibilities
      `Prelude.seq` Prelude.rnf taskRoleArn
      `Prelude.seq` Prelude.rnf volumes

instance Data.ToJSON AwsEcsTaskDefinitionDetails where
  toJSON AwsEcsTaskDefinitionDetails' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("ContainerDefinitions" Data..=)
              Prelude.<$> containerDefinitions,
            ("Cpu" Data..=) Prelude.<$> cpu,
            ("ExecutionRoleArn" Data..=)
              Prelude.<$> executionRoleArn,
            ("Family" Data..=) Prelude.<$> family,
            ("InferenceAccelerators" Data..=)
              Prelude.<$> inferenceAccelerators,
            ("IpcMode" Data..=) Prelude.<$> ipcMode,
            ("Memory" Data..=) Prelude.<$> memory,
            ("NetworkMode" Data..=) Prelude.<$> networkMode,
            ("PidMode" Data..=) Prelude.<$> pidMode,
            ("PlacementConstraints" Data..=)
              Prelude.<$> placementConstraints,
            ("ProxyConfiguration" Data..=)
              Prelude.<$> proxyConfiguration,
            ("RequiresCompatibilities" Data..=)
              Prelude.<$> requiresCompatibilities,
            ("TaskRoleArn" Data..=) Prelude.<$> taskRoleArn,
            ("Volumes" Data..=) Prelude.<$> volumes
          ]
      )