packages feed

gogol-composer-1.0.0: gen/Gogol/Composer/Internal/Product.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- |
-- Module      : Gogol.Composer.Internal.Product
-- Copyright   : (c) 2015-2025 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
--               Toni Cebrián <toni@tonicebrian.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Gogol.Composer.Internal.Product
  ( -- * AirflowMetadataRetentionPolicyConfig
    AirflowMetadataRetentionPolicyConfig (..),
    newAirflowMetadataRetentionPolicyConfig,

    -- * AllowedIpRange
    AllowedIpRange (..),
    newAllowedIpRange,

    -- * CheckUpgradeRequest
    CheckUpgradeRequest (..),
    newCheckUpgradeRequest,

    -- * CheckUpgradeResponse
    CheckUpgradeResponse (..),
    newCheckUpgradeResponse,

    -- * CheckUpgradeResponse_PypiDependencies
    CheckUpgradeResponse_PypiDependencies (..),
    newCheckUpgradeResponse_PypiDependencies,

    -- * CidrBlock
    CidrBlock (..),
    newCidrBlock,

    -- * CloudDataLineageIntegration
    CloudDataLineageIntegration (..),
    newCloudDataLineageIntegration,

    -- * ComposerWorkload
    ComposerWorkload (..),
    newComposerWorkload,

    -- * ComposerWorkloadStatus
    ComposerWorkloadStatus (..),
    newComposerWorkloadStatus,

    -- * DagProcessorResource
    DagProcessorResource (..),
    newDagProcessorResource,

    -- * DataRetentionConfig
    DataRetentionConfig (..),
    newDataRetentionConfig,

    -- * DatabaseConfig
    DatabaseConfig (..),
    newDatabaseConfig,

    -- * DatabaseFailoverRequest
    DatabaseFailoverRequest (..),
    newDatabaseFailoverRequest,

    -- * DatabaseFailoverResponse
    DatabaseFailoverResponse (..),
    newDatabaseFailoverResponse,

    -- * Date
    Date (..),
    newDate,

    -- * Empty
    Empty (..),
    newEmpty,

    -- * EncryptionConfig
    EncryptionConfig (..),
    newEncryptionConfig,

    -- * Environment
    Environment (..),
    newEnvironment,

    -- * Environment_Labels
    Environment_Labels (..),
    newEnvironment_Labels,

    -- * EnvironmentConfig
    EnvironmentConfig (..),
    newEnvironmentConfig,

    -- * ExecuteAirflowCommandRequest
    ExecuteAirflowCommandRequest (..),
    newExecuteAirflowCommandRequest,

    -- * ExecuteAirflowCommandResponse
    ExecuteAirflowCommandResponse (..),
    newExecuteAirflowCommandResponse,

    -- * ExitInfo
    ExitInfo (..),
    newExitInfo,

    -- * FetchDatabasePropertiesResponse
    FetchDatabasePropertiesResponse (..),
    newFetchDatabasePropertiesResponse,

    -- * IPAllocationPolicy
    IPAllocationPolicy (..),
    newIPAllocationPolicy,

    -- * ImageVersion
    ImageVersion (..),
    newImageVersion,

    -- * Line
    Line (..),
    newLine,

    -- * ListEnvironmentsResponse
    ListEnvironmentsResponse (..),
    newListEnvironmentsResponse,

    -- * ListImageVersionsResponse
    ListImageVersionsResponse (..),
    newListImageVersionsResponse,

    -- * ListOperationsResponse
    ListOperationsResponse (..),
    newListOperationsResponse,

    -- * ListUserWorkloadsConfigMapsResponse
    ListUserWorkloadsConfigMapsResponse (..),
    newListUserWorkloadsConfigMapsResponse,

    -- * ListUserWorkloadsSecretsResponse
    ListUserWorkloadsSecretsResponse (..),
    newListUserWorkloadsSecretsResponse,

    -- * ListWorkloadsResponse
    ListWorkloadsResponse (..),
    newListWorkloadsResponse,

    -- * LoadSnapshotRequest
    LoadSnapshotRequest (..),
    newLoadSnapshotRequest,

    -- * LoadSnapshotResponse
    LoadSnapshotResponse (..),
    newLoadSnapshotResponse,

    -- * MaintenanceWindow
    MaintenanceWindow (..),
    newMaintenanceWindow,

    -- * MasterAuthorizedNetworksConfig
    MasterAuthorizedNetworksConfig (..),
    newMasterAuthorizedNetworksConfig,

    -- * NetworkingConfig
    NetworkingConfig (..),
    newNetworkingConfig,

    -- * NodeConfig
    NodeConfig (..),
    newNodeConfig,

    -- * Operation
    Operation (..),
    newOperation,

    -- * Operation_Metadata
    Operation_Metadata (..),
    newOperation_Metadata,

    -- * Operation_Response
    Operation_Response (..),
    newOperation_Response,

    -- * OperationMetadata
    OperationMetadata (..),
    newOperationMetadata,

    -- * PollAirflowCommandRequest
    PollAirflowCommandRequest (..),
    newPollAirflowCommandRequest,

    -- * PollAirflowCommandResponse
    PollAirflowCommandResponse (..),
    newPollAirflowCommandResponse,

    -- * PrivateClusterConfig
    PrivateClusterConfig (..),
    newPrivateClusterConfig,

    -- * PrivateEnvironmentConfig
    PrivateEnvironmentConfig (..),
    newPrivateEnvironmentConfig,

    -- * RecoveryConfig
    RecoveryConfig (..),
    newRecoveryConfig,

    -- * SaveSnapshotRequest
    SaveSnapshotRequest (..),
    newSaveSnapshotRequest,

    -- * SaveSnapshotResponse
    SaveSnapshotResponse (..),
    newSaveSnapshotResponse,

    -- * ScheduledSnapshotsConfig
    ScheduledSnapshotsConfig (..),
    newScheduledSnapshotsConfig,

    -- * SchedulerResource
    SchedulerResource (..),
    newSchedulerResource,

    -- * SoftwareConfig
    SoftwareConfig (..),
    newSoftwareConfig,

    -- * SoftwareConfig_AirflowConfigOverrides
    SoftwareConfig_AirflowConfigOverrides (..),
    newSoftwareConfig_AirflowConfigOverrides,

    -- * SoftwareConfig_EnvVariables
    SoftwareConfig_EnvVariables (..),
    newSoftwareConfig_EnvVariables,

    -- * SoftwareConfig_PypiPackages
    SoftwareConfig_PypiPackages (..),
    newSoftwareConfig_PypiPackages,

    -- * Status
    Status (..),
    newStatus,

    -- * Status_DetailsItem
    Status_DetailsItem (..),
    newStatus_DetailsItem,

    -- * StopAirflowCommandRequest
    StopAirflowCommandRequest (..),
    newStopAirflowCommandRequest,

    -- * StopAirflowCommandResponse
    StopAirflowCommandResponse (..),
    newStopAirflowCommandResponse,

    -- * StorageConfig
    StorageConfig (..),
    newStorageConfig,

    -- * TaskLogsRetentionConfig
    TaskLogsRetentionConfig (..),
    newTaskLogsRetentionConfig,

    -- * TriggererResource
    TriggererResource (..),
    newTriggererResource,

    -- * UserWorkloadsConfigMap
    UserWorkloadsConfigMap (..),
    newUserWorkloadsConfigMap,

    -- * UserWorkloadsConfigMap_Data
    UserWorkloadsConfigMap_Data (..),
    newUserWorkloadsConfigMap_Data,

    -- * UserWorkloadsSecret
    UserWorkloadsSecret (..),
    newUserWorkloadsSecret,

    -- * UserWorkloadsSecret_Data
    UserWorkloadsSecret_Data (..),
    newUserWorkloadsSecret_Data,

    -- * WebServerConfig
    WebServerConfig (..),
    newWebServerConfig,

    -- * WebServerNetworkAccessControl
    WebServerNetworkAccessControl (..),
    newWebServerNetworkAccessControl,

    -- * WebServerResource
    WebServerResource (..),
    newWebServerResource,

    -- * WorkerResource
    WorkerResource (..),
    newWorkerResource,

    -- * WorkloadsConfig
    WorkloadsConfig (..),
    newWorkloadsConfig,
  )
where

import Gogol.Composer.Internal.Sum
import Gogol.Prelude qualified as Core

-- | The policy for airflow metadata database retention.
--
-- /See:/ 'newAirflowMetadataRetentionPolicyConfig' smart constructor.
data AirflowMetadataRetentionPolicyConfig = AirflowMetadataRetentionPolicyConfig
  { -- | Optional. How many days data should be retained for.
    retentionDays :: (Core.Maybe Core.Int32),
    -- | Optional. Retention can be either enabled or disabled.
    retentionMode :: (Core.Maybe AirflowMetadataRetentionPolicyConfig_RetentionMode)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AirflowMetadataRetentionPolicyConfig' with the minimum fields required to make a request.
newAirflowMetadataRetentionPolicyConfig ::
  AirflowMetadataRetentionPolicyConfig
newAirflowMetadataRetentionPolicyConfig =
  AirflowMetadataRetentionPolicyConfig
    { retentionDays =
        Core.Nothing,
      retentionMode = Core.Nothing
    }

instance Core.FromJSON AirflowMetadataRetentionPolicyConfig where
  parseJSON =
    Core.withObject
      "AirflowMetadataRetentionPolicyConfig"
      ( \o ->
          AirflowMetadataRetentionPolicyConfig
            Core.<$> (o Core..:? "retentionDays")
            Core.<*> (o Core..:? "retentionMode")
      )

instance Core.ToJSON AirflowMetadataRetentionPolicyConfig where
  toJSON AirflowMetadataRetentionPolicyConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("retentionDays" Core..=) Core.<$> retentionDays,
            ("retentionMode" Core..=) Core.<$> retentionMode
          ]
      )

-- | Allowed IP range with user-provided description.
--
-- /See:/ 'newAllowedIpRange' smart constructor.
data AllowedIpRange = AllowedIpRange
  { -- | Optional. User-provided description. It must contain at most 300 characters.
    description :: (Core.Maybe Core.Text),
    -- | IP address or range, defined using CIDR notation, of requests that this rule applies to. Examples: @192.168.1.1@ or @192.168.0.0\/16@ or @2001:db8::\/32@ or @2001:0db8:0000:0042:0000:8a2e:0370:7334@. IP range prefixes should be properly truncated. For example, @1.2.3.4\/24@ should be truncated to @1.2.3.0\/24@. Similarly, for IPv6, @2001:db8::1\/32@ should be truncated to @2001:db8::\/32@.
    value :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AllowedIpRange' with the minimum fields required to make a request.
newAllowedIpRange ::
  AllowedIpRange
newAllowedIpRange =
  AllowedIpRange {description = Core.Nothing, value = Core.Nothing}

instance Core.FromJSON AllowedIpRange where
  parseJSON =
    Core.withObject
      "AllowedIpRange"
      ( \o ->
          AllowedIpRange
            Core.<$> (o Core..:? "description")
            Core.<*> (o Core..:? "value")
      )

instance Core.ToJSON AllowedIpRange where
  toJSON AllowedIpRange {..} =
    Core.object
      ( Core.catMaybes
          [ ("description" Core..=) Core.<$> description,
            ("value" Core..=) Core.<$> value
          ]
      )

-- | Request to check whether image upgrade will succeed.
--
-- /See:/ 'newCheckUpgradeRequest' smart constructor.
newtype CheckUpgradeRequest = CheckUpgradeRequest
  { -- | Optional. The version of the software running in the environment. This encapsulates both the version of Cloud Composer functionality and the version of Apache Airflow. It must match the regular expression @composer-([0-9]+(\\.[0-9]+\\.[0-9]+(-preview\\.[0-9]+)?)?|latest)-airflow-([0-9]+(\\.[0-9]+(\\.[0-9]+)?)?)@. When used as input, the server also checks if the provided version is supported and denies the request for an unsupported version. The Cloud Composer portion of the image version is a full <https://semver.org semantic version>, or an alias in the form of major version number or @latest@. When an alias is provided, the server replaces it with the current Cloud Composer version that satisfies the alias. The Apache Airflow portion of the image version is a full semantic version that points to one of the supported Apache Airflow versions, or an alias in the form of only major or major.minor versions specified. When an alias is provided, the server replaces it with the latest Apache Airflow version that
    -- satisfies the alias and is supported in the given Cloud Composer version. In all cases, the resolved image version is stored in the same field. See also </composer/docs/concepts/versioning/composer-versions version list> and </composer/docs/concepts/versioning/composer-versioning-overview versioning overview>.
    imageVersion :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CheckUpgradeRequest' with the minimum fields required to make a request.
newCheckUpgradeRequest ::
  CheckUpgradeRequest
newCheckUpgradeRequest =
  CheckUpgradeRequest {imageVersion = Core.Nothing}

instance Core.FromJSON CheckUpgradeRequest where
  parseJSON =
    Core.withObject
      "CheckUpgradeRequest"
      (\o -> CheckUpgradeRequest Core.<$> (o Core..:? "imageVersion"))

instance Core.ToJSON CheckUpgradeRequest where
  toJSON CheckUpgradeRequest {..} =
    Core.object
      (Core.catMaybes [("imageVersion" Core..=) Core.<$> imageVersion])

-- | Message containing information about the result of an upgrade check operation.
--
-- /See:/ 'newCheckUpgradeResponse' smart constructor.
data CheckUpgradeResponse = CheckUpgradeResponse
  { -- | Output only. Url for a docker build log of an upgraded image.
    buildLogUri :: (Core.Maybe Core.Text),
    -- | Output only. Whether build has succeeded or failed on modules conflicts.
    containsPypiModulesConflict :: (Core.Maybe CheckUpgradeResponse_ContainsPypiModulesConflict),
    -- | Composer image for which the build was happening.
    imageVersion :: (Core.Maybe Core.Text),
    -- | Output only. Extract from a docker image build log containing information about pypi modules conflicts.
    pypiConflictBuildLogExtract :: (Core.Maybe Core.Text),
    -- | Pypi dependencies specified in the environment configuration, at the time when the build was triggered.
    pypiDependencies :: (Core.Maybe CheckUpgradeResponse_PypiDependencies)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CheckUpgradeResponse' with the minimum fields required to make a request.
newCheckUpgradeResponse ::
  CheckUpgradeResponse
newCheckUpgradeResponse =
  CheckUpgradeResponse
    { buildLogUri = Core.Nothing,
      containsPypiModulesConflict = Core.Nothing,
      imageVersion = Core.Nothing,
      pypiConflictBuildLogExtract = Core.Nothing,
      pypiDependencies = Core.Nothing
    }

instance Core.FromJSON CheckUpgradeResponse where
  parseJSON =
    Core.withObject
      "CheckUpgradeResponse"
      ( \o ->
          CheckUpgradeResponse
            Core.<$> (o Core..:? "buildLogUri")
            Core.<*> (o Core..:? "containsPypiModulesConflict")
            Core.<*> (o Core..:? "imageVersion")
            Core.<*> (o Core..:? "pypiConflictBuildLogExtract")
            Core.<*> (o Core..:? "pypiDependencies")
      )

instance Core.ToJSON CheckUpgradeResponse where
  toJSON CheckUpgradeResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildLogUri" Core..=) Core.<$> buildLogUri,
            ("containsPypiModulesConflict" Core..=)
              Core.<$> containsPypiModulesConflict,
            ("imageVersion" Core..=) Core.<$> imageVersion,
            ("pypiConflictBuildLogExtract" Core..=)
              Core.<$> pypiConflictBuildLogExtract,
            ("pypiDependencies" Core..=) Core.<$> pypiDependencies
          ]
      )

-- | Pypi dependencies specified in the environment configuration, at the time when the build was triggered.
--
-- /See:/ 'newCheckUpgradeResponse_PypiDependencies' smart constructor.
newtype CheckUpgradeResponse_PypiDependencies = CheckUpgradeResponse_PypiDependencies
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CheckUpgradeResponse_PypiDependencies' with the minimum fields required to make a request.
newCheckUpgradeResponse_PypiDependencies ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  CheckUpgradeResponse_PypiDependencies
newCheckUpgradeResponse_PypiDependencies additional =
  CheckUpgradeResponse_PypiDependencies {additional = additional}

instance Core.FromJSON CheckUpgradeResponse_PypiDependencies where
  parseJSON =
    Core.withObject
      "CheckUpgradeResponse_PypiDependencies"
      ( \o ->
          CheckUpgradeResponse_PypiDependencies
            Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON CheckUpgradeResponse_PypiDependencies where
  toJSON CheckUpgradeResponse_PypiDependencies {..} =
    Core.toJSON additional

-- | CIDR block with an optional name.
--
-- /See:/ 'newCidrBlock' smart constructor.
data CidrBlock = CidrBlock
  { -- | CIDR block that must be specified in CIDR notation.
    cidrBlock :: (Core.Maybe Core.Text),
    -- | User-defined name that identifies the CIDR block.
    displayName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CidrBlock' with the minimum fields required to make a request.
newCidrBlock ::
  CidrBlock
newCidrBlock =
  CidrBlock {cidrBlock = Core.Nothing, displayName = Core.Nothing}

instance Core.FromJSON CidrBlock where
  parseJSON =
    Core.withObject
      "CidrBlock"
      ( \o ->
          CidrBlock
            Core.<$> (o Core..:? "cidrBlock")
            Core.<*> (o Core..:? "displayName")
      )

instance Core.ToJSON CidrBlock where
  toJSON CidrBlock {..} =
    Core.object
      ( Core.catMaybes
          [ ("cidrBlock" Core..=) Core.<$> cidrBlock,
            ("displayName" Core..=) Core.<$> displayName
          ]
      )

-- | Configuration for Cloud Data Lineage integration.
--
-- /See:/ 'newCloudDataLineageIntegration' smart constructor.
newtype CloudDataLineageIntegration = CloudDataLineageIntegration
  { -- | Optional. Whether or not Cloud Data Lineage integration is enabled.
    enabled :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CloudDataLineageIntegration' with the minimum fields required to make a request.
newCloudDataLineageIntegration ::
  CloudDataLineageIntegration
newCloudDataLineageIntegration =
  CloudDataLineageIntegration {enabled = Core.Nothing}

instance Core.FromJSON CloudDataLineageIntegration where
  parseJSON =
    Core.withObject
      "CloudDataLineageIntegration"
      ( \o ->
          CloudDataLineageIntegration Core.<$> (o Core..:? "enabled")
      )

instance Core.ToJSON CloudDataLineageIntegration where
  toJSON CloudDataLineageIntegration {..} =
    Core.object
      (Core.catMaybes [("enabled" Core..=) Core.<$> enabled])

-- | Information about a single workload.
--
-- /See:/ 'newComposerWorkload' smart constructor.
data ComposerWorkload = ComposerWorkload
  { -- | Name of a workload.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Status of a workload.
    status :: (Core.Maybe ComposerWorkloadStatus),
    -- | Type of a workload.
    type' :: (Core.Maybe ComposerWorkload_Type)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ComposerWorkload' with the minimum fields required to make a request.
newComposerWorkload ::
  ComposerWorkload
newComposerWorkload =
  ComposerWorkload
    { name = Core.Nothing,
      status = Core.Nothing,
      type' = Core.Nothing
    }

instance Core.FromJSON ComposerWorkload where
  parseJSON =
    Core.withObject
      "ComposerWorkload"
      ( \o ->
          ComposerWorkload
            Core.<$> (o Core..:? "name")
            Core.<*> (o Core..:? "status")
            Core.<*> (o Core..:? "type")
      )

instance Core.ToJSON ComposerWorkload where
  toJSON ComposerWorkload {..} =
    Core.object
      ( Core.catMaybes
          [ ("name" Core..=) Core.<$> name,
            ("status" Core..=) Core.<$> status,
            ("type" Core..=) Core.<$> type'
          ]
      )

-- | Workload status.
--
-- /See:/ 'newComposerWorkloadStatus' smart constructor.
data ComposerWorkloadStatus = ComposerWorkloadStatus
  { -- | Output only. Detailed message of the status.
    detailedStatusMessage :: (Core.Maybe Core.Text),
    -- | Output only. Workload state.
    state :: (Core.Maybe ComposerWorkloadStatus_State),
    -- | Output only. Text to provide more descriptive status.
    statusMessage :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ComposerWorkloadStatus' with the minimum fields required to make a request.
newComposerWorkloadStatus ::
  ComposerWorkloadStatus
newComposerWorkloadStatus =
  ComposerWorkloadStatus
    { detailedStatusMessage = Core.Nothing,
      state = Core.Nothing,
      statusMessage = Core.Nothing
    }

instance Core.FromJSON ComposerWorkloadStatus where
  parseJSON =
    Core.withObject
      "ComposerWorkloadStatus"
      ( \o ->
          ComposerWorkloadStatus
            Core.<$> (o Core..:? "detailedStatusMessage")
            Core.<*> (o Core..:? "state")
            Core.<*> (o Core..:? "statusMessage")
      )

instance Core.ToJSON ComposerWorkloadStatus where
  toJSON ComposerWorkloadStatus {..} =
    Core.object
      ( Core.catMaybes
          [ ("detailedStatusMessage" Core..=) Core.<$> detailedStatusMessage,
            ("state" Core..=) Core.<$> state,
            ("statusMessage" Core..=) Core.<$> statusMessage
          ]
      )

-- | Configuration for resources used by Airflow DAG processors. This field is supported for Cloud Composer environments in versions composer-3-airflow-/././-build./ and newer.
--
-- /See:/ 'newDagProcessorResource' smart constructor.
data DagProcessorResource = DagProcessorResource
  { -- | Optional. The number of DAG processors. If not provided or set to 0, a single DAG processor instance will be created.
    count :: (Core.Maybe Core.Int32),
    -- | Optional. CPU request and limit for a single Airflow DAG processor replica.
    cpu :: (Core.Maybe Core.Double),
    -- | Optional. Memory (GB) request and limit for a single Airflow DAG processor replica.
    memoryGb :: (Core.Maybe Core.Double),
    -- | Optional. Storage (GB) request and limit for a single Airflow DAG processor replica.
    storageGb :: (Core.Maybe Core.Double)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DagProcessorResource' with the minimum fields required to make a request.
newDagProcessorResource ::
  DagProcessorResource
newDagProcessorResource =
  DagProcessorResource
    { count = Core.Nothing,
      cpu = Core.Nothing,
      memoryGb = Core.Nothing,
      storageGb = Core.Nothing
    }

instance Core.FromJSON DagProcessorResource where
  parseJSON =
    Core.withObject
      "DagProcessorResource"
      ( \o ->
          DagProcessorResource
            Core.<$> (o Core..:? "count")
            Core.<*> (o Core..:? "cpu")
            Core.<*> (o Core..:? "memoryGb")
            Core.<*> (o Core..:? "storageGb")
      )

instance Core.ToJSON DagProcessorResource where
  toJSON DagProcessorResource {..} =
    Core.object
      ( Core.catMaybes
          [ ("count" Core..=) Core.<$> count,
            ("cpu" Core..=) Core.<$> cpu,
            ("memoryGb" Core..=) Core.<$> memoryGb,
            ("storageGb" Core..=) Core.<$> storageGb
          ]
      )

-- | The configuration setting for Airflow database data retention mechanism.
--
-- /See:/ 'newDataRetentionConfig' smart constructor.
data DataRetentionConfig = DataRetentionConfig
  { -- | Optional. The retention policy for airflow metadata database.
    airflowMetadataRetentionConfig :: (Core.Maybe AirflowMetadataRetentionPolicyConfig),
    -- | Optional. The configuration settings for task logs retention
    taskLogsRetentionConfig :: (Core.Maybe TaskLogsRetentionConfig)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DataRetentionConfig' with the minimum fields required to make a request.
newDataRetentionConfig ::
  DataRetentionConfig
newDataRetentionConfig =
  DataRetentionConfig
    { airflowMetadataRetentionConfig =
        Core.Nothing,
      taskLogsRetentionConfig = Core.Nothing
    }

instance Core.FromJSON DataRetentionConfig where
  parseJSON =
    Core.withObject
      "DataRetentionConfig"
      ( \o ->
          DataRetentionConfig
            Core.<$> (o Core..:? "airflowMetadataRetentionConfig")
            Core.<*> (o Core..:? "taskLogsRetentionConfig")
      )

instance Core.ToJSON DataRetentionConfig where
  toJSON DataRetentionConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("airflowMetadataRetentionConfig" Core..=)
              Core.<$> airflowMetadataRetentionConfig,
            ("taskLogsRetentionConfig" Core..=)
              Core.<$> taskLogsRetentionConfig
          ]
      )

-- | The configuration of Cloud SQL instance that is used by the Apache Airflow software.
--
-- /See:/ 'newDatabaseConfig' smart constructor.
data DatabaseConfig = DatabaseConfig
  { -- | Optional. Cloud SQL machine type used by Airflow database. It has to be one of: db-n1-standard-2, db-n1-standard-4, db-n1-standard-8 or db-n1-standard-16. If not specified, db-n1-standard-2 will be used. Supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    machineType :: (Core.Maybe Core.Text),
    -- | Optional. The Compute Engine zone where the Airflow database is created. If zone is provided, it must be in the region selected for the environment. If zone is not provided, a zone is automatically selected. The zone can only be set during environment creation. Supported for Cloud Composer environments in versions composer-2././-airflow-/./.*.
    zone :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DatabaseConfig' with the minimum fields required to make a request.
newDatabaseConfig ::
  DatabaseConfig
newDatabaseConfig =
  DatabaseConfig {machineType = Core.Nothing, zone = Core.Nothing}

instance Core.FromJSON DatabaseConfig where
  parseJSON =
    Core.withObject
      "DatabaseConfig"
      ( \o ->
          DatabaseConfig
            Core.<$> (o Core..:? "machineType")
            Core.<*> (o Core..:? "zone")
      )

instance Core.ToJSON DatabaseConfig where
  toJSON DatabaseConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("machineType" Core..=) Core.<$> machineType,
            ("zone" Core..=) Core.<$> zone
          ]
      )

-- | Request to trigger database failover (only for highly resilient environments).
--
-- /See:/ 'newDatabaseFailoverRequest' smart constructor.
data DatabaseFailoverRequest = DatabaseFailoverRequest
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DatabaseFailoverRequest' with the minimum fields required to make a request.
newDatabaseFailoverRequest ::
  DatabaseFailoverRequest
newDatabaseFailoverRequest = DatabaseFailoverRequest

instance Core.FromJSON DatabaseFailoverRequest where
  parseJSON =
    Core.withObject
      "DatabaseFailoverRequest"
      (\o -> Core.pure DatabaseFailoverRequest)

instance Core.ToJSON DatabaseFailoverRequest where
  toJSON = Core.const Core.emptyObject

-- | Response for DatabaseFailoverRequest.
--
-- /See:/ 'newDatabaseFailoverResponse' smart constructor.
data DatabaseFailoverResponse = DatabaseFailoverResponse
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DatabaseFailoverResponse' with the minimum fields required to make a request.
newDatabaseFailoverResponse ::
  DatabaseFailoverResponse
newDatabaseFailoverResponse = DatabaseFailoverResponse

instance Core.FromJSON DatabaseFailoverResponse where
  parseJSON =
    Core.withObject
      "DatabaseFailoverResponse"
      (\o -> Core.pure DatabaseFailoverResponse)

instance Core.ToJSON DatabaseFailoverResponse where
  toJSON = Core.const Core.emptyObject

-- | Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
--
-- /See:/ 'newDate' smart constructor.
data Date = Date
  { -- | Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn\'t significant.
    day :: (Core.Maybe Core.Int32),
    -- | Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
    month :: (Core.Maybe Core.Int32),
    -- | Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
    year :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Date' with the minimum fields required to make a request.
newDate ::
  Date
newDate =
  Date
    { day = Core.Nothing,
      month = Core.Nothing,
      year = Core.Nothing
    }

instance Core.FromJSON Date where
  parseJSON =
    Core.withObject
      "Date"
      ( \o ->
          Date
            Core.<$> (o Core..:? "day")
            Core.<*> (o Core..:? "month")
            Core.<*> (o Core..:? "year")
      )

instance Core.ToJSON Date where
  toJSON Date {..} =
    Core.object
      ( Core.catMaybes
          [ ("day" Core..=) Core.<$> day,
            ("month" Core..=) Core.<$> month,
            ("year" Core..=) Core.<$> year
          ]
      )

-- | A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
--
-- /See:/ 'newEmpty' smart constructor.
data Empty = Empty
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Empty' with the minimum fields required to make a request.
newEmpty ::
  Empty
newEmpty = Empty

instance Core.FromJSON Empty where
  parseJSON = Core.withObject "Empty" (\o -> Core.pure Empty)

instance Core.ToJSON Empty where
  toJSON = Core.const Core.emptyObject

-- | The encryption options for the Cloud Composer environment and its dependencies.Supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
--
-- /See:/ 'newEncryptionConfig' smart constructor.
newtype EncryptionConfig = EncryptionConfig
  { -- | Optional. Customer-managed Encryption Key available through Google\'s Key Management Service. Cannot be updated. If not specified, Google-managed key will be used.
    kmsKeyName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'EncryptionConfig' with the minimum fields required to make a request.
newEncryptionConfig ::
  EncryptionConfig
newEncryptionConfig = EncryptionConfig {kmsKeyName = Core.Nothing}

instance Core.FromJSON EncryptionConfig where
  parseJSON =
    Core.withObject
      "EncryptionConfig"
      (\o -> EncryptionConfig Core.<$> (o Core..:? "kmsKeyName"))

instance Core.ToJSON EncryptionConfig where
  toJSON EncryptionConfig {..} =
    Core.object
      (Core.catMaybes [("kmsKeyName" Core..=) Core.<$> kmsKeyName])

-- | An environment for running orchestration tasks.
--
-- /See:/ 'newEnvironment' smart constructor.
data Environment = Environment
  { -- | Optional. Configuration parameters for this environment.
    config :: (Core.Maybe EnvironmentConfig),
    -- | Output only. The time at which this environment was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Optional. User-defined labels for this environment. The labels map can contain no more than 64 entries. Entries of the labels map are UTF8 strings that comply with the following restrictions: * Keys must conform to regexp: \\p{Ll}\\p{Lo}{0,62} * Values must conform to regexp: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} * Both keys and values are additionally constrained to be \<= 128 bytes in size.
    labels :: (Core.Maybe Environment_Labels),
    -- | Identifier. The resource name of the environment, in the form: \"projects\/{projectId}\/locations\/{locationId}\/environments\/{environmentId}\" EnvironmentId must start with a lowercase letter followed by up to 63 lowercase letters, numbers, or hyphens, and cannot end with a hyphen.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Reserved for future use.
    satisfiesPzi :: (Core.Maybe Core.Bool),
    -- | Output only. Reserved for future use.
    satisfiesPzs :: (Core.Maybe Core.Bool),
    -- | The current state of the environment.
    state :: (Core.Maybe Environment_State),
    -- | Optional. Storage configuration for this environment.
    storageConfig :: (Core.Maybe StorageConfig),
    -- | Output only. The time at which this environment was last modified.
    updateTime :: (Core.Maybe Core.DateTime),
    -- | Output only. The UUID (Universally Unique IDentifier) associated with this environment. This value is generated when the environment is created.
    uuid :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Environment' with the minimum fields required to make a request.
newEnvironment ::
  Environment
newEnvironment =
  Environment
    { config = Core.Nothing,
      createTime = Core.Nothing,
      labels = Core.Nothing,
      name = Core.Nothing,
      satisfiesPzi = Core.Nothing,
      satisfiesPzs = Core.Nothing,
      state = Core.Nothing,
      storageConfig = Core.Nothing,
      updateTime = Core.Nothing,
      uuid = Core.Nothing
    }

instance Core.FromJSON Environment where
  parseJSON =
    Core.withObject
      "Environment"
      ( \o ->
          Environment
            Core.<$> (o Core..:? "config")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "labels")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "satisfiesPzi")
            Core.<*> (o Core..:? "satisfiesPzs")
            Core.<*> (o Core..:? "state")
            Core.<*> (o Core..:? "storageConfig")
            Core.<*> (o Core..:? "updateTime")
            Core.<*> (o Core..:? "uuid")
      )

instance Core.ToJSON Environment where
  toJSON Environment {..} =
    Core.object
      ( Core.catMaybes
          [ ("config" Core..=) Core.<$> config,
            ("createTime" Core..=) Core.<$> createTime,
            ("labels" Core..=) Core.<$> labels,
            ("name" Core..=) Core.<$> name,
            ("satisfiesPzi" Core..=) Core.<$> satisfiesPzi,
            ("satisfiesPzs" Core..=) Core.<$> satisfiesPzs,
            ("state" Core..=) Core.<$> state,
            ("storageConfig" Core..=) Core.<$> storageConfig,
            ("updateTime" Core..=) Core.<$> updateTime,
            ("uuid" Core..=) Core.<$> uuid
          ]
      )

-- | Optional. User-defined labels for this environment. The labels map can contain no more than 64 entries. Entries of the labels map are UTF8 strings that comply with the following restrictions: * Keys must conform to regexp: \\p{Ll}\\p{Lo}{0,62} * Values must conform to regexp: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} * Both keys and values are additionally constrained to be \<= 128 bytes in size.
--
-- /See:/ 'newEnvironment_Labels' smart constructor.
newtype Environment_Labels = Environment_Labels
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Environment_Labels' with the minimum fields required to make a request.
newEnvironment_Labels ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  Environment_Labels
newEnvironment_Labels additional =
  Environment_Labels {additional = additional}

instance Core.FromJSON Environment_Labels where
  parseJSON =
    Core.withObject
      "Environment_Labels"
      (\o -> Environment_Labels Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Environment_Labels where
  toJSON Environment_Labels {..} = Core.toJSON additional

-- | Configuration information for an environment.
--
-- /See:/ 'newEnvironmentConfig' smart constructor.
data EnvironmentConfig = EnvironmentConfig
  { -- | Output only. The \'bring your own identity\' variant of the URI of the Apache Airflow Web UI hosted within this environment, to be accessed with external identities using workforce identity federation (see </composer/docs/composer-2/access-environments-with-workforce-identity-federation Access environments with workforce identity federation>).
    airflowByoidUri :: (Core.Maybe Core.Text),
    -- | Output only. The URI of the Apache Airflow Web UI hosted within this environment (see </composer/docs/how-to/accessing/airflow-web-interface Airflow web interface>).
    airflowUri :: (Core.Maybe Core.Text),
    -- | Output only. The Cloud Storage prefix of the DAGs for this environment. Although Cloud Storage objects reside in a flat namespace, a hierarchical file tree can be simulated using \"\/\"-delimited object name prefixes. DAG objects for this environment reside in a simulated directory with the given prefix.
    dagGcsPrefix :: (Core.Maybe Core.Text),
    -- | Optional. The configuration setting for Airflow database data retention mechanism.
    dataRetentionConfig :: (Core.Maybe DataRetentionConfig),
    -- | Optional. The configuration settings for Cloud SQL instance used internally by Apache Airflow software.
    databaseConfig :: (Core.Maybe DatabaseConfig),
    -- | Optional. The encryption options for the Cloud Composer environment and its dependencies. Cannot be updated.
    encryptionConfig :: (Core.Maybe EncryptionConfig),
    -- | Optional. The size of the Cloud Composer environment. This field is supported for Cloud Composer environments in versions composer-2././-airflow-/./.* and newer.
    environmentSize :: (Core.Maybe EnvironmentConfig_EnvironmentSize),
    -- | Output only. The Kubernetes Engine cluster used to run this environment.
    gkeCluster :: (Core.Maybe Core.Text),
    -- | Optional. The maintenance window is the period when Cloud Composer components may undergo maintenance. It is defined so that maintenance is not executed during peak hours or critical time periods. The system will not be under maintenance for every occurrence of this window, but when maintenance is planned, it will be scheduled during the window. The maintenance window period must encompass at least 12 hours per week. This may be split into multiple chunks, each with a size of at least 4 hours. If this value is omitted, the default value for maintenance window is applied. By default, maintenance windows are from 00:00:00 to 04:00:00 (GMT) on Friday, Saturday, and Sunday every week.
    maintenanceWindow :: (Core.Maybe MaintenanceWindow),
    -- | Optional. The configuration options for GKE cluster master authorized networks. By default master authorized networks feature is: - in case of private environment: enabled with no external networks allowlisted. - in case of public environment: disabled.
    masterAuthorizedNetworksConfig :: (Core.Maybe MasterAuthorizedNetworksConfig),
    -- | Optional. The configuration used for the Kubernetes Engine cluster.
    nodeConfig :: (Core.Maybe NodeConfig),
    -- | The number of nodes in the Kubernetes Engine cluster that will be used to run this environment. This field is supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    nodeCount :: (Core.Maybe Core.Int32),
    -- | Optional. The configuration used for the Private IP Cloud Composer environment.
    privateEnvironmentConfig :: (Core.Maybe PrivateEnvironmentConfig),
    -- | Optional. The Recovery settings configuration of an environment. This field is supported for Cloud Composer environments in versions composer-2././-airflow-/./.* and newer.
    recoveryConfig :: (Core.Maybe RecoveryConfig),
    -- | Optional. Resilience mode of the Cloud Composer Environment. This field is supported for Cloud Composer environments in versions composer-2.2.0-airflow-/./.* and newer.
    resilienceMode :: (Core.Maybe EnvironmentConfig_ResilienceMode),
    -- | Optional. The configuration settings for software inside the environment.
    softwareConfig :: (Core.Maybe SoftwareConfig),
    -- | Optional. The configuration settings for the Airflow web server App Engine instance.
    webServerConfig :: (Core.Maybe WebServerConfig),
    -- | Optional. The network-level access control policy for the Airflow web server. If unspecified, no network-level access restrictions will be applied.
    webServerNetworkAccessControl :: (Core.Maybe WebServerNetworkAccessControl),
    -- | Optional. The workloads configuration settings for the GKE cluster associated with the Cloud Composer environment. The GKE cluster runs Airflow scheduler, web server and workers workloads. This field is supported for Cloud Composer environments in versions composer-2././-airflow-/./.* and newer.
    workloadsConfig :: (Core.Maybe WorkloadsConfig)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'EnvironmentConfig' with the minimum fields required to make a request.
newEnvironmentConfig ::
  EnvironmentConfig
newEnvironmentConfig =
  EnvironmentConfig
    { airflowByoidUri = Core.Nothing,
      airflowUri = Core.Nothing,
      dagGcsPrefix = Core.Nothing,
      dataRetentionConfig = Core.Nothing,
      databaseConfig = Core.Nothing,
      encryptionConfig = Core.Nothing,
      environmentSize = Core.Nothing,
      gkeCluster = Core.Nothing,
      maintenanceWindow = Core.Nothing,
      masterAuthorizedNetworksConfig = Core.Nothing,
      nodeConfig = Core.Nothing,
      nodeCount = Core.Nothing,
      privateEnvironmentConfig = Core.Nothing,
      recoveryConfig = Core.Nothing,
      resilienceMode = Core.Nothing,
      softwareConfig = Core.Nothing,
      webServerConfig = Core.Nothing,
      webServerNetworkAccessControl = Core.Nothing,
      workloadsConfig = Core.Nothing
    }

instance Core.FromJSON EnvironmentConfig where
  parseJSON =
    Core.withObject
      "EnvironmentConfig"
      ( \o ->
          EnvironmentConfig
            Core.<$> (o Core..:? "airflowByoidUri")
            Core.<*> (o Core..:? "airflowUri")
            Core.<*> (o Core..:? "dagGcsPrefix")
            Core.<*> (o Core..:? "dataRetentionConfig")
            Core.<*> (o Core..:? "databaseConfig")
            Core.<*> (o Core..:? "encryptionConfig")
            Core.<*> (o Core..:? "environmentSize")
            Core.<*> (o Core..:? "gkeCluster")
            Core.<*> (o Core..:? "maintenanceWindow")
            Core.<*> (o Core..:? "masterAuthorizedNetworksConfig")
            Core.<*> (o Core..:? "nodeConfig")
            Core.<*> (o Core..:? "nodeCount")
            Core.<*> (o Core..:? "privateEnvironmentConfig")
            Core.<*> (o Core..:? "recoveryConfig")
            Core.<*> (o Core..:? "resilienceMode")
            Core.<*> (o Core..:? "softwareConfig")
            Core.<*> (o Core..:? "webServerConfig")
            Core.<*> (o Core..:? "webServerNetworkAccessControl")
            Core.<*> (o Core..:? "workloadsConfig")
      )

instance Core.ToJSON EnvironmentConfig where
  toJSON EnvironmentConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("airflowByoidUri" Core..=) Core.<$> airflowByoidUri,
            ("airflowUri" Core..=) Core.<$> airflowUri,
            ("dagGcsPrefix" Core..=) Core.<$> dagGcsPrefix,
            ("dataRetentionConfig" Core..=) Core.<$> dataRetentionConfig,
            ("databaseConfig" Core..=) Core.<$> databaseConfig,
            ("encryptionConfig" Core..=) Core.<$> encryptionConfig,
            ("environmentSize" Core..=) Core.<$> environmentSize,
            ("gkeCluster" Core..=) Core.<$> gkeCluster,
            ("maintenanceWindow" Core..=) Core.<$> maintenanceWindow,
            ("masterAuthorizedNetworksConfig" Core..=)
              Core.<$> masterAuthorizedNetworksConfig,
            ("nodeConfig" Core..=) Core.<$> nodeConfig,
            ("nodeCount" Core..=) Core.<$> nodeCount,
            ("privateEnvironmentConfig" Core..=)
              Core.<$> privateEnvironmentConfig,
            ("recoveryConfig" Core..=) Core.<$> recoveryConfig,
            ("resilienceMode" Core..=) Core.<$> resilienceMode,
            ("softwareConfig" Core..=) Core.<$> softwareConfig,
            ("webServerConfig" Core..=) Core.<$> webServerConfig,
            ("webServerNetworkAccessControl" Core..=)
              Core.<$> webServerNetworkAccessControl,
            ("workloadsConfig" Core..=) Core.<$> workloadsConfig
          ]
      )

-- | Execute Airflow Command request.
--
-- /See:/ 'newExecuteAirflowCommandRequest' smart constructor.
data ExecuteAirflowCommandRequest = ExecuteAirflowCommandRequest
  { -- | Airflow command.
    command :: (Core.Maybe Core.Text),
    -- | Parameters for the Airflow command\/subcommand as an array of arguments. It may contain positional arguments like @[\"my-dag-id\"]@, key-value parameters like @[\"--foo=bar\"]@ or @[\"--foo\",\"bar\"]@, or other flags like @[\"-f\"]@.
    parameters :: (Core.Maybe [Core.Text]),
    -- | Airflow subcommand.
    subcommand :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ExecuteAirflowCommandRequest' with the minimum fields required to make a request.
newExecuteAirflowCommandRequest ::
  ExecuteAirflowCommandRequest
newExecuteAirflowCommandRequest =
  ExecuteAirflowCommandRequest
    { command = Core.Nothing,
      parameters = Core.Nothing,
      subcommand = Core.Nothing
    }

instance Core.FromJSON ExecuteAirflowCommandRequest where
  parseJSON =
    Core.withObject
      "ExecuteAirflowCommandRequest"
      ( \o ->
          ExecuteAirflowCommandRequest
            Core.<$> (o Core..:? "command")
            Core.<*> (o Core..:? "parameters")
            Core.<*> (o Core..:? "subcommand")
      )

instance Core.ToJSON ExecuteAirflowCommandRequest where
  toJSON ExecuteAirflowCommandRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("command" Core..=) Core.<$> command,
            ("parameters" Core..=) Core.<$> parameters,
            ("subcommand" Core..=) Core.<$> subcommand
          ]
      )

-- | Response to ExecuteAirflowCommandRequest.
--
-- /See:/ 'newExecuteAirflowCommandResponse' smart constructor.
data ExecuteAirflowCommandResponse = ExecuteAirflowCommandResponse
  { -- | Error message. Empty if there was no error.
    error :: (Core.Maybe Core.Text),
    -- | The unique ID of the command execution for polling.
    executionId :: (Core.Maybe Core.Text),
    -- | The name of the pod where the command is executed.
    pod :: (Core.Maybe Core.Text),
    -- | The namespace of the pod where the command is executed.
    podNamespace :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ExecuteAirflowCommandResponse' with the minimum fields required to make a request.
newExecuteAirflowCommandResponse ::
  ExecuteAirflowCommandResponse
newExecuteAirflowCommandResponse =
  ExecuteAirflowCommandResponse
    { error = Core.Nothing,
      executionId = Core.Nothing,
      pod = Core.Nothing,
      podNamespace = Core.Nothing
    }

instance Core.FromJSON ExecuteAirflowCommandResponse where
  parseJSON =
    Core.withObject
      "ExecuteAirflowCommandResponse"
      ( \o ->
          ExecuteAirflowCommandResponse
            Core.<$> (o Core..:? "error")
            Core.<*> (o Core..:? "executionId")
            Core.<*> (o Core..:? "pod")
            Core.<*> (o Core..:? "podNamespace")
      )

instance Core.ToJSON ExecuteAirflowCommandResponse where
  toJSON ExecuteAirflowCommandResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("error" Core..=) Core.<$> error,
            ("executionId" Core..=) Core.<$> executionId,
            ("pod" Core..=) Core.<$> pod,
            ("podNamespace" Core..=) Core.<$> podNamespace
          ]
      )

-- | Information about how a command ended.
--
-- /See:/ 'newExitInfo' smart constructor.
data ExitInfo = ExitInfo
  { -- | Error message. Empty if there was no error.
    error :: (Core.Maybe Core.Text),
    -- | The exit code from the command execution.
    exitCode :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ExitInfo' with the minimum fields required to make a request.
newExitInfo ::
  ExitInfo
newExitInfo =
  ExitInfo {error = Core.Nothing, exitCode = Core.Nothing}

instance Core.FromJSON ExitInfo where
  parseJSON =
    Core.withObject
      "ExitInfo"
      ( \o ->
          ExitInfo
            Core.<$> (o Core..:? "error")
            Core.<*> (o Core..:? "exitCode")
      )

instance Core.ToJSON ExitInfo where
  toJSON ExitInfo {..} =
    Core.object
      ( Core.catMaybes
          [ ("error" Core..=) Core.<$> error,
            ("exitCode" Core..=) Core.<$> exitCode
          ]
      )

-- | Response for FetchDatabasePropertiesRequest.
--
-- /See:/ 'newFetchDatabasePropertiesResponse' smart constructor.
data FetchDatabasePropertiesResponse = FetchDatabasePropertiesResponse
  { -- | The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The primary instance can only fail over to the failover replica when the status is true.
    isFailoverReplicaAvailable :: (Core.Maybe Core.Bool),
    -- | The Compute Engine zone that the instance is currently serving from.
    primaryGceZone :: (Core.Maybe Core.Text),
    -- | The Compute Engine zone that the failover instance is currently serving from for a regional Cloud SQL instance.
    secondaryGceZone :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FetchDatabasePropertiesResponse' with the minimum fields required to make a request.
newFetchDatabasePropertiesResponse ::
  FetchDatabasePropertiesResponse
newFetchDatabasePropertiesResponse =
  FetchDatabasePropertiesResponse
    { isFailoverReplicaAvailable =
        Core.Nothing,
      primaryGceZone = Core.Nothing,
      secondaryGceZone = Core.Nothing
    }

instance Core.FromJSON FetchDatabasePropertiesResponse where
  parseJSON =
    Core.withObject
      "FetchDatabasePropertiesResponse"
      ( \o ->
          FetchDatabasePropertiesResponse
            Core.<$> (o Core..:? "isFailoverReplicaAvailable")
            Core.<*> (o Core..:? "primaryGceZone")
            Core.<*> (o Core..:? "secondaryGceZone")
      )

instance Core.ToJSON FetchDatabasePropertiesResponse where
  toJSON FetchDatabasePropertiesResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("isFailoverReplicaAvailable" Core..=)
              Core.<$> isFailoverReplicaAvailable,
            ("primaryGceZone" Core..=) Core.<$> primaryGceZone,
            ("secondaryGceZone" Core..=) Core.<$> secondaryGceZone
          ]
      )

-- | Configuration for controlling how IPs are allocated in the GKE cluster running the Apache Airflow software.
--
-- /See:/ 'newIPAllocationPolicy' smart constructor.
data IPAllocationPolicy = IPAllocationPolicy
  { -- | Optional. The IP address range used to allocate IP addresses to pods in the GKE cluster. For Cloud Composer environments in versions composer-1././-airflow-/./.*, this field is applicable only when @use_ip_aliases@ is true. Set to blank to have GKE choose a range with the default size. Set to \/netmask (e.g. @\/14@) to have GKE choose a range with a specific netmask. Set to a <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR> notation (e.g. @10.96.0.0\/14@) from the RFC-1918 private networks (e.g. @10.0.0.0\/8@, @172.16.0.0\/12@, @192.168.0.0\/16@) to pick a specific range to use.
    clusterIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Optional. The name of the GKE cluster\'s secondary range used to allocate IP addresses to pods. For Cloud Composer environments in versions composer-1././-airflow-/./.*, this field is applicable only when @use_ip_aliases@ is true.
    clusterSecondaryRangeName :: (Core.Maybe Core.Text),
    -- | Optional. The IP address range of the services IP addresses in this GKE cluster. For Cloud Composer environments in versions composer-1././-airflow-/./.*, this field is applicable only when @use_ip_aliases@ is true. Set to blank to have GKE choose a range with the default size. Set to \/netmask (e.g. @\/14@) to have GKE choose a range with a specific netmask. Set to a <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR> notation (e.g. @10.96.0.0\/14@) from the RFC-1918 private networks (e.g. @10.0.0.0\/8@, @172.16.0.0\/12@, @192.168.0.0\/16@) to pick a specific range to use.
    servicesIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Optional. The name of the services\' secondary range used to allocate IP addresses to the GKE cluster. For Cloud Composer environments in versions composer-1././-airflow-/./.*, this field is applicable only when @use_ip_aliases@ is true.
    servicesSecondaryRangeName :: (Core.Maybe Core.Text),
    -- | Optional. Whether or not to enable Alias IPs in the GKE cluster. If @true@, a VPC-native cluster is created. This field is only supported for Cloud Composer environments in versions composer-1././-airflow-/./.*. Environments in newer versions always use VPC-native GKE clusters.
    useIpAliases :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'IPAllocationPolicy' with the minimum fields required to make a request.
newIPAllocationPolicy ::
  IPAllocationPolicy
newIPAllocationPolicy =
  IPAllocationPolicy
    { clusterIpv4CidrBlock = Core.Nothing,
      clusterSecondaryRangeName = Core.Nothing,
      servicesIpv4CidrBlock = Core.Nothing,
      servicesSecondaryRangeName = Core.Nothing,
      useIpAliases = Core.Nothing
    }

instance Core.FromJSON IPAllocationPolicy where
  parseJSON =
    Core.withObject
      "IPAllocationPolicy"
      ( \o ->
          IPAllocationPolicy
            Core.<$> (o Core..:? "clusterIpv4CidrBlock")
            Core.<*> (o Core..:? "clusterSecondaryRangeName")
            Core.<*> (o Core..:? "servicesIpv4CidrBlock")
            Core.<*> (o Core..:? "servicesSecondaryRangeName")
            Core.<*> (o Core..:? "useIpAliases")
      )

instance Core.ToJSON IPAllocationPolicy where
  toJSON IPAllocationPolicy {..} =
    Core.object
      ( Core.catMaybes
          [ ("clusterIpv4CidrBlock" Core..=) Core.<$> clusterIpv4CidrBlock,
            ("clusterSecondaryRangeName" Core..=)
              Core.<$> clusterSecondaryRangeName,
            ("servicesIpv4CidrBlock" Core..=) Core.<$> servicesIpv4CidrBlock,
            ("servicesSecondaryRangeName" Core..=)
              Core.<$> servicesSecondaryRangeName,
            ("useIpAliases" Core..=) Core.<$> useIpAliases
          ]
      )

-- | ImageVersion information
--
-- /See:/ 'newImageVersion' smart constructor.
data ImageVersion = ImageVersion
  { -- | Whether it is impossible to create an environment with the image version.
    creationDisabled :: (Core.Maybe Core.Bool),
    -- | The string identifier of the ImageVersion, in the form: \"composer-x.y.z-airflow-a.b.c\"
    imageVersionId :: (Core.Maybe Core.Text),
    -- | Whether this is the default ImageVersion used by Composer during environment creation if no input ImageVersion is specified.
    isDefault :: (Core.Maybe Core.Bool),
    -- | The date of the version release.
    releaseDate :: (Core.Maybe Date),
    -- | supported python versions
    supportedPythonVersions :: (Core.Maybe [Core.Text]),
    -- | Whether it is impossible to upgrade an environment running with the image version.
    upgradeDisabled :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ImageVersion' with the minimum fields required to make a request.
newImageVersion ::
  ImageVersion
newImageVersion =
  ImageVersion
    { creationDisabled = Core.Nothing,
      imageVersionId = Core.Nothing,
      isDefault = Core.Nothing,
      releaseDate = Core.Nothing,
      supportedPythonVersions = Core.Nothing,
      upgradeDisabled = Core.Nothing
    }

instance Core.FromJSON ImageVersion where
  parseJSON =
    Core.withObject
      "ImageVersion"
      ( \o ->
          ImageVersion
            Core.<$> (o Core..:? "creationDisabled")
            Core.<*> (o Core..:? "imageVersionId")
            Core.<*> (o Core..:? "isDefault")
            Core.<*> (o Core..:? "releaseDate")
            Core.<*> (o Core..:? "supportedPythonVersions")
            Core.<*> (o Core..:? "upgradeDisabled")
      )

instance Core.ToJSON ImageVersion where
  toJSON ImageVersion {..} =
    Core.object
      ( Core.catMaybes
          [ ("creationDisabled" Core..=) Core.<$> creationDisabled,
            ("imageVersionId" Core..=) Core.<$> imageVersionId,
            ("isDefault" Core..=) Core.<$> isDefault,
            ("releaseDate" Core..=) Core.<$> releaseDate,
            ("supportedPythonVersions" Core..=)
              Core.<$> supportedPythonVersions,
            ("upgradeDisabled" Core..=) Core.<$> upgradeDisabled
          ]
      )

-- | Contains information about a single line from logs.
--
-- /See:/ 'newLine' smart constructor.
data Line = Line
  { -- | Text content of the log line.
    content :: (Core.Maybe Core.Text),
    -- | Number of the line.
    lineNumber :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Line' with the minimum fields required to make a request.
newLine ::
  Line
newLine = Line {content = Core.Nothing, lineNumber = Core.Nothing}

instance Core.FromJSON Line where
  parseJSON =
    Core.withObject
      "Line"
      ( \o ->
          Line
            Core.<$> (o Core..:? "content")
            Core.<*> (o Core..:? "lineNumber")
      )

instance Core.ToJSON Line where
  toJSON Line {..} =
    Core.object
      ( Core.catMaybes
          [ ("content" Core..=) Core.<$> content,
            ("lineNumber" Core..=) Core.<$> lineNumber
          ]
      )

-- | The environments in a project and location.
--
-- /See:/ 'newListEnvironmentsResponse' smart constructor.
data ListEnvironmentsResponse = ListEnvironmentsResponse
  { -- | The list of environments returned by a ListEnvironmentsRequest.
    environments :: (Core.Maybe [Environment]),
    -- | The page token used to query for the next page if one exists.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListEnvironmentsResponse' with the minimum fields required to make a request.
newListEnvironmentsResponse ::
  ListEnvironmentsResponse
newListEnvironmentsResponse =
  ListEnvironmentsResponse
    { environments = Core.Nothing,
      nextPageToken = Core.Nothing
    }

instance Core.FromJSON ListEnvironmentsResponse where
  parseJSON =
    Core.withObject
      "ListEnvironmentsResponse"
      ( \o ->
          ListEnvironmentsResponse
            Core.<$> (o Core..:? "environments")
            Core.<*> (o Core..:? "nextPageToken")
      )

instance Core.ToJSON ListEnvironmentsResponse where
  toJSON ListEnvironmentsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("environments" Core..=) Core.<$> environments,
            ("nextPageToken" Core..=) Core.<$> nextPageToken
          ]
      )

-- | The ImageVersions in a project and location.
--
-- /See:/ 'newListImageVersionsResponse' smart constructor.
data ListImageVersionsResponse = ListImageVersionsResponse
  { -- | The list of supported ImageVersions in a location.
    imageVersions :: (Core.Maybe [ImageVersion]),
    -- | The page token used to query for the next page if one exists.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListImageVersionsResponse' with the minimum fields required to make a request.
newListImageVersionsResponse ::
  ListImageVersionsResponse
newListImageVersionsResponse =
  ListImageVersionsResponse
    { imageVersions = Core.Nothing,
      nextPageToken = Core.Nothing
    }

instance Core.FromJSON ListImageVersionsResponse where
  parseJSON =
    Core.withObject
      "ListImageVersionsResponse"
      ( \o ->
          ListImageVersionsResponse
            Core.<$> (o Core..:? "imageVersions")
            Core.<*> (o Core..:? "nextPageToken")
      )

instance Core.ToJSON ListImageVersionsResponse where
  toJSON ListImageVersionsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("imageVersions" Core..=) Core.<$> imageVersions,
            ("nextPageToken" Core..=) Core.<$> nextPageToken
          ]
      )

-- | The response message for Operations.ListOperations.
--
-- /See:/ 'newListOperationsResponse' smart constructor.
data ListOperationsResponse = ListOperationsResponse
  { -- | The standard List next-page token.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | A list of operations that matches the specified filter in the request.
    operations :: (Core.Maybe [Operation])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListOperationsResponse' with the minimum fields required to make a request.
newListOperationsResponse ::
  ListOperationsResponse
newListOperationsResponse =
  ListOperationsResponse
    { nextPageToken = Core.Nothing,
      operations = Core.Nothing
    }

instance Core.FromJSON ListOperationsResponse where
  parseJSON =
    Core.withObject
      "ListOperationsResponse"
      ( \o ->
          ListOperationsResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "operations")
      )

instance Core.ToJSON ListOperationsResponse where
  toJSON ListOperationsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("operations" Core..=) Core.<$> operations
          ]
      )

-- | The user workloads ConfigMaps for a given environment.
--
-- /See:/ 'newListUserWorkloadsConfigMapsResponse' smart constructor.
data ListUserWorkloadsConfigMapsResponse = ListUserWorkloadsConfigMapsResponse
  { -- | The page token used to query for the next page if one exists.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The list of ConfigMaps returned by a ListUserWorkloadsConfigMapsRequest.
    userWorkloadsConfigMaps :: (Core.Maybe [UserWorkloadsConfigMap])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListUserWorkloadsConfigMapsResponse' with the minimum fields required to make a request.
newListUserWorkloadsConfigMapsResponse ::
  ListUserWorkloadsConfigMapsResponse
newListUserWorkloadsConfigMapsResponse =
  ListUserWorkloadsConfigMapsResponse
    { nextPageToken = Core.Nothing,
      userWorkloadsConfigMaps = Core.Nothing
    }

instance Core.FromJSON ListUserWorkloadsConfigMapsResponse where
  parseJSON =
    Core.withObject
      "ListUserWorkloadsConfigMapsResponse"
      ( \o ->
          ListUserWorkloadsConfigMapsResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "userWorkloadsConfigMaps")
      )

instance Core.ToJSON ListUserWorkloadsConfigMapsResponse where
  toJSON ListUserWorkloadsConfigMapsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("userWorkloadsConfigMaps" Core..=)
              Core.<$> userWorkloadsConfigMaps
          ]
      )

-- | The user workloads Secrets for a given environment.
--
-- /See:/ 'newListUserWorkloadsSecretsResponse' smart constructor.
data ListUserWorkloadsSecretsResponse = ListUserWorkloadsSecretsResponse
  { -- | The page token used to query for the next page if one exists.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The list of Secrets returned by a ListUserWorkloadsSecretsRequest.
    userWorkloadsSecrets :: (Core.Maybe [UserWorkloadsSecret])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListUserWorkloadsSecretsResponse' with the minimum fields required to make a request.
newListUserWorkloadsSecretsResponse ::
  ListUserWorkloadsSecretsResponse
newListUserWorkloadsSecretsResponse =
  ListUserWorkloadsSecretsResponse
    { nextPageToken = Core.Nothing,
      userWorkloadsSecrets = Core.Nothing
    }

instance Core.FromJSON ListUserWorkloadsSecretsResponse where
  parseJSON =
    Core.withObject
      "ListUserWorkloadsSecretsResponse"
      ( \o ->
          ListUserWorkloadsSecretsResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "userWorkloadsSecrets")
      )

instance Core.ToJSON ListUserWorkloadsSecretsResponse where
  toJSON ListUserWorkloadsSecretsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("userWorkloadsSecrets" Core..=) Core.<$> userWorkloadsSecrets
          ]
      )

-- | Response to ListWorkloadsRequest.
--
-- /See:/ 'newListWorkloadsResponse' smart constructor.
data ListWorkloadsResponse = ListWorkloadsResponse
  { -- | The page token used to query for the next page if one exists.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The list of environment workloads.
    workloads :: (Core.Maybe [ComposerWorkload])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListWorkloadsResponse' with the minimum fields required to make a request.
newListWorkloadsResponse ::
  ListWorkloadsResponse
newListWorkloadsResponse =
  ListWorkloadsResponse
    { nextPageToken = Core.Nothing,
      workloads = Core.Nothing
    }

instance Core.FromJSON ListWorkloadsResponse where
  parseJSON =
    Core.withObject
      "ListWorkloadsResponse"
      ( \o ->
          ListWorkloadsResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "workloads")
      )

instance Core.ToJSON ListWorkloadsResponse where
  toJSON ListWorkloadsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("workloads" Core..=) Core.<$> workloads
          ]
      )

-- | Request to load a snapshot into a Cloud Composer environment.
--
-- /See:/ 'newLoadSnapshotRequest' smart constructor.
data LoadSnapshotRequest = LoadSnapshotRequest
  { -- | Whether or not to skip setting Airflow overrides when loading the environment\'s state.
    skipAirflowOverridesSetting :: (Core.Maybe Core.Bool),
    -- | Whether or not to skip setting environment variables when loading the environment\'s state.
    skipEnvironmentVariablesSetting :: (Core.Maybe Core.Bool),
    -- | Whether or not to skip copying Cloud Storage data when loading the environment\'s state.
    skipGcsDataCopying :: (Core.Maybe Core.Bool),
    -- | Whether or not to skip installing Pypi packages when loading the environment\'s state.
    skipPypiPackagesInstallation :: (Core.Maybe Core.Bool),
    -- | A Cloud Storage path to a snapshot to load, e.g.: \"gs:\/\/my-bucket\/snapshots\/project/location/environment_timestamp\".
    snapshotPath :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'LoadSnapshotRequest' with the minimum fields required to make a request.
newLoadSnapshotRequest ::
  LoadSnapshotRequest
newLoadSnapshotRequest =
  LoadSnapshotRequest
    { skipAirflowOverridesSetting = Core.Nothing,
      skipEnvironmentVariablesSetting = Core.Nothing,
      skipGcsDataCopying = Core.Nothing,
      skipPypiPackagesInstallation = Core.Nothing,
      snapshotPath = Core.Nothing
    }

instance Core.FromJSON LoadSnapshotRequest where
  parseJSON =
    Core.withObject
      "LoadSnapshotRequest"
      ( \o ->
          LoadSnapshotRequest
            Core.<$> (o Core..:? "skipAirflowOverridesSetting")
            Core.<*> (o Core..:? "skipEnvironmentVariablesSetting")
            Core.<*> (o Core..:? "skipGcsDataCopying")
            Core.<*> (o Core..:? "skipPypiPackagesInstallation")
            Core.<*> (o Core..:? "snapshotPath")
      )

instance Core.ToJSON LoadSnapshotRequest where
  toJSON LoadSnapshotRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("skipAirflowOverridesSetting" Core..=)
              Core.<$> skipAirflowOverridesSetting,
            ("skipEnvironmentVariablesSetting" Core..=)
              Core.<$> skipEnvironmentVariablesSetting,
            ("skipGcsDataCopying" Core..=) Core.<$> skipGcsDataCopying,
            ("skipPypiPackagesInstallation" Core..=)
              Core.<$> skipPypiPackagesInstallation,
            ("snapshotPath" Core..=) Core.<$> snapshotPath
          ]
      )

-- | Response to LoadSnapshotRequest.
--
-- /See:/ 'newLoadSnapshotResponse' smart constructor.
data LoadSnapshotResponse = LoadSnapshotResponse
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'LoadSnapshotResponse' with the minimum fields required to make a request.
newLoadSnapshotResponse ::
  LoadSnapshotResponse
newLoadSnapshotResponse = LoadSnapshotResponse

instance Core.FromJSON LoadSnapshotResponse where
  parseJSON =
    Core.withObject
      "LoadSnapshotResponse"
      (\o -> Core.pure LoadSnapshotResponse)

instance Core.ToJSON LoadSnapshotResponse where
  toJSON = Core.const Core.emptyObject

-- | The configuration settings for Cloud Composer maintenance window. The following example: @{ \"startTime\":\"2019-08-01T01:00:00Z\" \"endTime\":\"2019-08-01T07:00:00Z\" \"recurrence\":\"FREQ=WEEKLY;BYDAY=TU,WE\" }@ would define a maintenance window between 01 and 07 hours UTC during each Tuesday and Wednesday.
--
-- /See:/ 'newMaintenanceWindow' smart constructor.
data MaintenanceWindow = MaintenanceWindow
  { -- | Required. Maintenance window end time. It is used only to calculate the duration of the maintenance window. The value for end-time must be in the future, relative to @start_time@.
    endTime :: (Core.Maybe Core.DateTime),
    -- | Required. Maintenance window recurrence. Format is a subset of <https://tools.ietf.org/html/rfc5545 RFC-5545> @RRULE@. The only allowed values for @FREQ@ field are @FREQ=DAILY@ and @FREQ=WEEKLY;BYDAY=...@ Example values: @FREQ=WEEKLY;BYDAY=TU,WE@, @FREQ=DAILY@.
    recurrence :: (Core.Maybe Core.Text),
    -- | Required. Start time of the first recurrence of the maintenance window.
    startTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MaintenanceWindow' with the minimum fields required to make a request.
newMaintenanceWindow ::
  MaintenanceWindow
newMaintenanceWindow =
  MaintenanceWindow
    { endTime = Core.Nothing,
      recurrence = Core.Nothing,
      startTime = Core.Nothing
    }

instance Core.FromJSON MaintenanceWindow where
  parseJSON =
    Core.withObject
      "MaintenanceWindow"
      ( \o ->
          MaintenanceWindow
            Core.<$> (o Core..:? "endTime")
            Core.<*> (o Core..:? "recurrence")
            Core.<*> (o Core..:? "startTime")
      )

instance Core.ToJSON MaintenanceWindow where
  toJSON MaintenanceWindow {..} =
    Core.object
      ( Core.catMaybes
          [ ("endTime" Core..=) Core.<$> endTime,
            ("recurrence" Core..=) Core.<$> recurrence,
            ("startTime" Core..=) Core.<$> startTime
          ]
      )

-- | Configuration options for the master authorized networks feature. Enabled master authorized networks will disallow all external traffic to access Kubernetes master through HTTPS except traffic from the given CIDR blocks, Google Compute Engine Public IPs and Google Prod IPs.
--
-- /See:/ 'newMasterAuthorizedNetworksConfig' smart constructor.
data MasterAuthorizedNetworksConfig = MasterAuthorizedNetworksConfig
  { -- | Up to 50 external networks that could access Kubernetes master through HTTPS.
    cidrBlocks :: (Core.Maybe [CidrBlock]),
    -- | Whether or not master authorized networks feature is enabled.
    enabled :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MasterAuthorizedNetworksConfig' with the minimum fields required to make a request.
newMasterAuthorizedNetworksConfig ::
  MasterAuthorizedNetworksConfig
newMasterAuthorizedNetworksConfig =
  MasterAuthorizedNetworksConfig
    { cidrBlocks = Core.Nothing,
      enabled = Core.Nothing
    }

instance Core.FromJSON MasterAuthorizedNetworksConfig where
  parseJSON =
    Core.withObject
      "MasterAuthorizedNetworksConfig"
      ( \o ->
          MasterAuthorizedNetworksConfig
            Core.<$> (o Core..:? "cidrBlocks")
            Core.<*> (o Core..:? "enabled")
      )

instance Core.ToJSON MasterAuthorizedNetworksConfig where
  toJSON MasterAuthorizedNetworksConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("cidrBlocks" Core..=) Core.<$> cidrBlocks,
            ("enabled" Core..=) Core.<$> enabled
          ]
      )

-- | Configuration options for networking connections in the Composer 2 environment.
--
-- /See:/ 'newNetworkingConfig' smart constructor.
newtype NetworkingConfig = NetworkingConfig
  { -- | Optional. Indicates the user requested specific connection type between Tenant and Customer projects. You cannot set networking connection type in public IP environment.
    connectionType :: (Core.Maybe NetworkingConfig_ConnectionType)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'NetworkingConfig' with the minimum fields required to make a request.
newNetworkingConfig ::
  NetworkingConfig
newNetworkingConfig =
  NetworkingConfig {connectionType = Core.Nothing}

instance Core.FromJSON NetworkingConfig where
  parseJSON =
    Core.withObject
      "NetworkingConfig"
      (\o -> NetworkingConfig Core.<$> (o Core..:? "connectionType"))

instance Core.ToJSON NetworkingConfig where
  toJSON NetworkingConfig {..} =
    Core.object
      ( Core.catMaybes
          [("connectionType" Core..=) Core.<$> connectionType]
      )

-- | The configuration information for the Kubernetes Engine nodes running the Apache Airflow software.
--
-- /See:/ 'newNodeConfig' smart constructor.
data NodeConfig = NodeConfig
  { -- | Optional. The IP range in CIDR notation to use internally by Cloud Composer. IP addresses are not reserved - and the same range can be used by multiple Cloud Composer environments. In case of overlap, IPs from this range will not be accessible in the user\'s VPC network. Cannot be updated. If not specified, the default value of \'100.64.128.0\/20\' is used. This field is supported for Cloud Composer environments in versions composer-3-airflow-/././-build./ and newer.
    composerInternalIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Optional. Network Attachment that Cloud Composer environment is connected to, which provides connectivity with a user\'s VPC network. Takes precedence over network and subnetwork settings. If not provided, but network and subnetwork are defined during environment, it will be provisioned. If not provided and network and subnetwork are also empty, then connectivity to user\'s VPC network is disabled. Network attachment must be provided in format projects\/{project}\/regions\/{region}\/networkAttachments\/{networkAttachment}. This field is supported for Cloud Composer environments in versions composer-3-airflow-/././-build./ and newer.
    composerNetworkAttachment :: (Core.Maybe Core.Text),
    -- | Optional. The disk size in GB used for node VMs. Minimum size is 30GB. If unspecified, defaults to 100GB. Cannot be updated. This field is supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    diskSizeGb :: (Core.Maybe Core.Int32),
    -- | Optional. Deploys \'ip-masq-agent\' daemon set in the GKE cluster and defines nonMasqueradeCIDRs equals to pod IP range so IP masquerading is used for all destination addresses, except between pods traffic. See: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/how-to\/ip-masquerade-agent
    enableIpMasqAgent :: (Core.Maybe Core.Bool),
    -- | Optional. The configuration for controlling how IPs are allocated in the GKE cluster.
    ipAllocationPolicy :: (Core.Maybe IPAllocationPolicy),
    -- | Optional. The Compute Engine </compute/docs/regions-zones zone> in which to deploy the VMs used to run the Apache Airflow software, specified as a </apis/design/resource_names#relative_resource_name relative resource name>. For example: \"projects\/{projectId}\/zones\/{zoneId}\". This @location@ must belong to the enclosing environment\'s project and location. If both this field and @nodeConfig.machineType@ are specified, @nodeConfig.machineType@ must belong to this @location@; if both are unspecified, the service will pick a zone in the Compute Engine region corresponding to the Cloud Composer location, and propagate that choice to both fields. If only one field (@location@ or @nodeConfig.machineType@) is specified, the location information from the specified field will be propagated to the unspecified field. This field is supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    location :: (Core.Maybe Core.Text),
    -- | Optional. The Compute Engine </compute/docs/machine-types machine type> used for cluster instances, specified as a </apis/design/resource_names#relative_resource_name relative resource name>. For example: \"projects\/{projectId}\/zones\/{zoneId}\/machineTypes\/{machineTypeId}\". The @machineType@ must belong to the enclosing environment\'s project and location. If both this field and @nodeConfig.location@ are specified, this @machineType@ must belong to the @nodeConfig.location@; if both are unspecified, the service will pick a zone in the Compute Engine region corresponding to the Cloud Composer location, and propagate that choice to both fields. If exactly one of this field and @nodeConfig.location@ is specified, the location information from the specified field will be propagated to the unspecified field. The @machineTypeId@ must not be a </compute/docs/machine-types#sharedcore shared-core machine type>. If this field is unspecified, the @machineTypeId@ defaults to \"n1-standard-1\". This field is
    -- supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    machineType :: (Core.Maybe Core.Text),
    -- | Optional. The Compute Engine network to be used for machine communications, specified as a </apis/design/resource_names#relative_resource_name relative resource name>. For example: \"projects\/{projectId}\/global\/networks\/{networkId}\". If unspecified, the \"default\" network ID in the environment\'s project is used. If a </vpc/docs/vpc#vpc_networks_and_subnets Custom Subnet Network> is provided, @nodeConfig.subnetwork@ must also be provided. For </vpc/docs/shared-vpc Shared VPC> subnetwork requirements, see @nodeConfig.subnetwork@.
    network :: (Core.Maybe Core.Text),
    -- | Optional. The set of Google API scopes to be made available on all node VMs. If @oauth_scopes@ is empty, defaults to [\"https:\/\/www.googleapis.com\/auth\/cloud-platform\"]. Cannot be updated. This field is supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    oauthScopes :: (Core.Maybe [Core.Text]),
    -- | Optional. The Google Cloud Platform Service Account to be used by the node VMs. If a service account is not specified, the \"default\" Compute Engine service account is used. Cannot be updated.
    serviceAccount :: (Core.Maybe Core.Text),
    -- | Optional. The Compute Engine subnetwork to be used for machine communications, specified as a </apis/design/resource_names#relative_resource_name relative resource name>. For example: \"projects\/{projectId}\/regions\/{regionId}\/subnetworks\/{subnetworkId}\" If a subnetwork is provided, @nodeConfig.network@ must also be provided, and the subnetwork must belong to the enclosing environment\'s project and location.
    subnetwork :: (Core.Maybe Core.Text),
    -- | Optional. The list of instance tags applied to all node VMs. Tags are used to identify valid sources or targets for network firewalls. Each tag within the list must comply with <https://www.ietf.org/rfc/rfc1035.txt RFC1035>. Cannot be updated.
    tags :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'NodeConfig' with the minimum fields required to make a request.
newNodeConfig ::
  NodeConfig
newNodeConfig =
  NodeConfig
    { composerInternalIpv4CidrBlock = Core.Nothing,
      composerNetworkAttachment = Core.Nothing,
      diskSizeGb = Core.Nothing,
      enableIpMasqAgent = Core.Nothing,
      ipAllocationPolicy = Core.Nothing,
      location = Core.Nothing,
      machineType = Core.Nothing,
      network = Core.Nothing,
      oauthScopes = Core.Nothing,
      serviceAccount = Core.Nothing,
      subnetwork = Core.Nothing,
      tags = Core.Nothing
    }

instance Core.FromJSON NodeConfig where
  parseJSON =
    Core.withObject
      "NodeConfig"
      ( \o ->
          NodeConfig
            Core.<$> (o Core..:? "composerInternalIpv4CidrBlock")
            Core.<*> (o Core..:? "composerNetworkAttachment")
            Core.<*> (o Core..:? "diskSizeGb")
            Core.<*> (o Core..:? "enableIpMasqAgent")
            Core.<*> (o Core..:? "ipAllocationPolicy")
            Core.<*> (o Core..:? "location")
            Core.<*> (o Core..:? "machineType")
            Core.<*> (o Core..:? "network")
            Core.<*> (o Core..:? "oauthScopes")
            Core.<*> (o Core..:? "serviceAccount")
            Core.<*> (o Core..:? "subnetwork")
            Core.<*> (o Core..:? "tags")
      )

instance Core.ToJSON NodeConfig where
  toJSON NodeConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("composerInternalIpv4CidrBlock" Core..=)
              Core.<$> composerInternalIpv4CidrBlock,
            ("composerNetworkAttachment" Core..=)
              Core.<$> composerNetworkAttachment,
            ("diskSizeGb" Core..=) Core.<$> diskSizeGb,
            ("enableIpMasqAgent" Core..=) Core.<$> enableIpMasqAgent,
            ("ipAllocationPolicy" Core..=) Core.<$> ipAllocationPolicy,
            ("location" Core..=) Core.<$> location,
            ("machineType" Core..=) Core.<$> machineType,
            ("network" Core..=) Core.<$> network,
            ("oauthScopes" Core..=) Core.<$> oauthScopes,
            ("serviceAccount" Core..=) Core.<$> serviceAccount,
            ("subnetwork" Core..=) Core.<$> subnetwork,
            ("tags" Core..=) Core.<$> tags
          ]
      )

-- | This resource represents a long-running operation that is the result of a network API call.
--
-- /See:/ 'newOperation' smart constructor.
data Operation = Operation
  { -- | If the value is @false@, it means the operation is still in progress. If @true@, the operation is completed, and either @error@ or @response@ is available.
    done :: (Core.Maybe Core.Bool),
    -- | The error result of the operation in case of failure or cancellation.
    error :: (Core.Maybe Status),
    -- | Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    metadata :: (Core.Maybe Operation_Metadata),
    -- | The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the @name@ should be a resource name ending with @operations\/{unique_id}@.
    name :: (Core.Maybe Core.Text),
    -- | The normal, successful response of the operation. If the original method returns no data on success, such as @Delete@, the response is @google.protobuf.Empty@. If the original method is standard @Get@\/@Create@\/@Update@, the response should be the resource. For other methods, the response should have the type @XxxResponse@, where @Xxx@ is the original method name. For example, if the original method name is @TakeSnapshot()@, the inferred response type is @TakeSnapshotResponse@.
    response :: (Core.Maybe Operation_Response)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Operation' with the minimum fields required to make a request.
newOperation ::
  Operation
newOperation =
  Operation
    { done = Core.Nothing,
      error = Core.Nothing,
      metadata = Core.Nothing,
      name = Core.Nothing,
      response = Core.Nothing
    }

instance Core.FromJSON Operation where
  parseJSON =
    Core.withObject
      "Operation"
      ( \o ->
          Operation
            Core.<$> (o Core..:? "done")
            Core.<*> (o Core..:? "error")
            Core.<*> (o Core..:? "metadata")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "response")
      )

instance Core.ToJSON Operation where
  toJSON Operation {..} =
    Core.object
      ( Core.catMaybes
          [ ("done" Core..=) Core.<$> done,
            ("error" Core..=) Core.<$> error,
            ("metadata" Core..=) Core.<$> metadata,
            ("name" Core..=) Core.<$> name,
            ("response" Core..=) Core.<$> response
          ]
      )

-- | Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
--
-- /See:/ 'newOperation_Metadata' smart constructor.
newtype Operation_Metadata = Operation_Metadata
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Operation_Metadata' with the minimum fields required to make a request.
newOperation_Metadata ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Operation_Metadata
newOperation_Metadata additional =
  Operation_Metadata {additional = additional}

instance Core.FromJSON Operation_Metadata where
  parseJSON =
    Core.withObject
      "Operation_Metadata"
      (\o -> Operation_Metadata Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Operation_Metadata where
  toJSON Operation_Metadata {..} = Core.toJSON additional

-- | The normal, successful response of the operation. If the original method returns no data on success, such as @Delete@, the response is @google.protobuf.Empty@. If the original method is standard @Get@\/@Create@\/@Update@, the response should be the resource. For other methods, the response should have the type @XxxResponse@, where @Xxx@ is the original method name. For example, if the original method name is @TakeSnapshot()@, the inferred response type is @TakeSnapshotResponse@.
--
-- /See:/ 'newOperation_Response' smart constructor.
newtype Operation_Response = Operation_Response
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Operation_Response' with the minimum fields required to make a request.
newOperation_Response ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Operation_Response
newOperation_Response additional =
  Operation_Response {additional = additional}

instance Core.FromJSON Operation_Response where
  parseJSON =
    Core.withObject
      "Operation_Response"
      (\o -> Operation_Response Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Operation_Response where
  toJSON Operation_Response {..} = Core.toJSON additional

-- | Metadata describing an operation.
--
-- /See:/ 'newOperationMetadata' smart constructor.
data OperationMetadata = OperationMetadata
  { -- | Output only. The time the operation was submitted to the server.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Output only. The time when the operation terminated, regardless of its success. This field is unset if the operation is still ongoing.
    endTime :: (Core.Maybe Core.DateTime),
    -- | Output only. The type of operation being performed.
    operationType :: (Core.Maybe OperationMetadata_OperationType),
    -- | Output only. The resource being operated on, as a </apis/design/resource_names#relative_resource_name relative resource name>.
    resource :: (Core.Maybe Core.Text),
    -- | Output only. The UUID of the resource being operated on.
    resourceUuid :: (Core.Maybe Core.Text),
    -- | Output only. The current operation state.
    state :: (Core.Maybe OperationMetadata_State)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
newOperationMetadata ::
  OperationMetadata
newOperationMetadata =
  OperationMetadata
    { createTime = Core.Nothing,
      endTime = Core.Nothing,
      operationType = Core.Nothing,
      resource = Core.Nothing,
      resourceUuid = Core.Nothing,
      state = Core.Nothing
    }

instance Core.FromJSON OperationMetadata where
  parseJSON =
    Core.withObject
      "OperationMetadata"
      ( \o ->
          OperationMetadata
            Core.<$> (o Core..:? "createTime")
            Core.<*> (o Core..:? "endTime")
            Core.<*> (o Core..:? "operationType")
            Core.<*> (o Core..:? "resource")
            Core.<*> (o Core..:? "resourceUuid")
            Core.<*> (o Core..:? "state")
      )

instance Core.ToJSON OperationMetadata where
  toJSON OperationMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("createTime" Core..=) Core.<$> createTime,
            ("endTime" Core..=) Core.<$> endTime,
            ("operationType" Core..=) Core.<$> operationType,
            ("resource" Core..=) Core.<$> resource,
            ("resourceUuid" Core..=) Core.<$> resourceUuid,
            ("state" Core..=) Core.<$> state
          ]
      )

-- | Poll Airflow Command request.
--
-- /See:/ 'newPollAirflowCommandRequest' smart constructor.
data PollAirflowCommandRequest = PollAirflowCommandRequest
  { -- | The unique ID of the command execution.
    executionId :: (Core.Maybe Core.Text),
    -- | Line number from which new logs should be fetched.
    nextLineNumber :: (Core.Maybe Core.Int32),
    -- | The name of the pod where the command is executed.
    pod :: (Core.Maybe Core.Text),
    -- | The namespace of the pod where the command is executed.
    podNamespace :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PollAirflowCommandRequest' with the minimum fields required to make a request.
newPollAirflowCommandRequest ::
  PollAirflowCommandRequest
newPollAirflowCommandRequest =
  PollAirflowCommandRequest
    { executionId = Core.Nothing,
      nextLineNumber = Core.Nothing,
      pod = Core.Nothing,
      podNamespace = Core.Nothing
    }

instance Core.FromJSON PollAirflowCommandRequest where
  parseJSON =
    Core.withObject
      "PollAirflowCommandRequest"
      ( \o ->
          PollAirflowCommandRequest
            Core.<$> (o Core..:? "executionId")
            Core.<*> (o Core..:? "nextLineNumber")
            Core.<*> (o Core..:? "pod")
            Core.<*> (o Core..:? "podNamespace")
      )

instance Core.ToJSON PollAirflowCommandRequest where
  toJSON PollAirflowCommandRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("executionId" Core..=) Core.<$> executionId,
            ("nextLineNumber" Core..=) Core.<$> nextLineNumber,
            ("pod" Core..=) Core.<$> pod,
            ("podNamespace" Core..=) Core.<$> podNamespace
          ]
      )

-- | Response to PollAirflowCommandRequest.
--
-- /See:/ 'newPollAirflowCommandResponse' smart constructor.
data PollAirflowCommandResponse = PollAirflowCommandResponse
  { -- | The result exit status of the command.
    exitInfo :: (Core.Maybe ExitInfo),
    -- | Output from the command execution. It may not contain the full output and the caller may need to poll for more lines.
    output :: (Core.Maybe [Line]),
    -- | Whether the command execution has finished and there is no more output.
    outputEnd :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PollAirflowCommandResponse' with the minimum fields required to make a request.
newPollAirflowCommandResponse ::
  PollAirflowCommandResponse
newPollAirflowCommandResponse =
  PollAirflowCommandResponse
    { exitInfo = Core.Nothing,
      output = Core.Nothing,
      outputEnd = Core.Nothing
    }

instance Core.FromJSON PollAirflowCommandResponse where
  parseJSON =
    Core.withObject
      "PollAirflowCommandResponse"
      ( \o ->
          PollAirflowCommandResponse
            Core.<$> (o Core..:? "exitInfo")
            Core.<*> (o Core..:? "output")
            Core.<*> (o Core..:? "outputEnd")
      )

instance Core.ToJSON PollAirflowCommandResponse where
  toJSON PollAirflowCommandResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("exitInfo" Core..=) Core.<$> exitInfo,
            ("output" Core..=) Core.<$> output,
            ("outputEnd" Core..=) Core.<$> outputEnd
          ]
      )

-- | Configuration options for the private GKE cluster in a Cloud Composer environment.
--
-- /See:/ 'newPrivateClusterConfig' smart constructor.
data PrivateClusterConfig = PrivateClusterConfig
  { -- | Optional. If @true@, access to the public endpoint of the GKE cluster is denied.
    enablePrivateEndpoint :: (Core.Maybe Core.Bool),
    -- | Optional. The CIDR block from which IPv4 range for GKE master will be reserved. If left blank, the default value of \'172.16.0.0\/23\' is used.
    masterIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Output only. The IP range in CIDR notation to use for the hosted master network. This range is used for assigning internal IP addresses to the GKE cluster master or set of masters and to the internal load balancer virtual IP. This range must not overlap with any other ranges in use within the cluster\'s network.
    masterIpv4ReservedRange :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PrivateClusterConfig' with the minimum fields required to make a request.
newPrivateClusterConfig ::
  PrivateClusterConfig
newPrivateClusterConfig =
  PrivateClusterConfig
    { enablePrivateEndpoint = Core.Nothing,
      masterIpv4CidrBlock = Core.Nothing,
      masterIpv4ReservedRange = Core.Nothing
    }

instance Core.FromJSON PrivateClusterConfig where
  parseJSON =
    Core.withObject
      "PrivateClusterConfig"
      ( \o ->
          PrivateClusterConfig
            Core.<$> (o Core..:? "enablePrivateEndpoint")
            Core.<*> (o Core..:? "masterIpv4CidrBlock")
            Core.<*> (o Core..:? "masterIpv4ReservedRange")
      )

instance Core.ToJSON PrivateClusterConfig where
  toJSON PrivateClusterConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("enablePrivateEndpoint" Core..=) Core.<$> enablePrivateEndpoint,
            ("masterIpv4CidrBlock" Core..=) Core.<$> masterIpv4CidrBlock,
            ("masterIpv4ReservedRange" Core..=)
              Core.<$> masterIpv4ReservedRange
          ]
      )

-- | The configuration information for configuring a Private IP Cloud Composer environment.
--
-- /See:/ 'newPrivateEnvironmentConfig' smart constructor.
data PrivateEnvironmentConfig = PrivateEnvironmentConfig
  { -- | Optional. When specified, the environment will use Private Service Connect instead of VPC peerings to connect to Cloud SQL in the Tenant Project, and the PSC endpoint in the Customer Project will use an IP address from this subnetwork.
    cloudComposerConnectionSubnetwork :: (Core.Maybe Core.Text),
    -- | Optional. The CIDR block from which IP range for Cloud Composer Network in tenant project will be reserved. Needs to be disjoint from private/cluster/config.master/ipv4/cidr/block and cloud/sql/ipv4/cidr_block. This field is supported for Cloud Composer environments in versions composer-2././-airflow-/./.* and newer.
    cloudComposerNetworkIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Output only. The IP range reserved for the tenant project\'s Cloud Composer network. This field is supported for Cloud Composer environments in versions composer-2././-airflow-/./.* and newer.
    cloudComposerNetworkIpv4ReservedRange :: (Core.Maybe Core.Text),
    -- | Optional. The CIDR block from which IP range in tenant project will be reserved for Cloud SQL. Needs to be disjoint from @web_server_ipv4_cidr_block@.
    cloudSqlIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Optional. If @true@, builds performed during operations that install Python packages have only private connectivity to Google services (including Artifact Registry) and VPC network (if either @NodeConfig.network@ and @NodeConfig.subnetwork@ fields or @NodeConfig.composer_network_attachment@ field are specified). If @false@, the builds also have access to the internet. This field is supported for Cloud Composer environments in versions composer-3-airflow-/././-build./ and newer.
    enablePrivateBuildsOnly :: (Core.Maybe Core.Bool),
    -- | Optional. If @true@, a Private IP Cloud Composer environment is created. If this field is set to true, @IPAllocationPolicy.use_ip_aliases@ must be set to true for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    enablePrivateEnvironment :: (Core.Maybe Core.Bool),
    -- | Optional. When enabled, IPs from public (non-RFC1918) ranges can be used for @IPAllocationPolicy.cluster_ipv4_cidr_block@ and @IPAllocationPolicy.service_ipv4_cidr_block@.
    enablePrivatelyUsedPublicIps :: (Core.Maybe Core.Bool),
    -- | Optional. Configuration for the network connections configuration in the environment.
    networkingConfig :: (Core.Maybe NetworkingConfig),
    -- | Optional. Configuration for the private GKE cluster for a Private IP Cloud Composer environment.
    privateClusterConfig :: (Core.Maybe PrivateClusterConfig),
    -- | Optional. The CIDR block from which IP range for web server will be reserved. Needs to be disjoint from @private_cluster_config.master_ipv4_cidr_block@ and @cloud_sql_ipv4_cidr_block@. This field is supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    webServerIpv4CidrBlock :: (Core.Maybe Core.Text),
    -- | Output only. The IP range reserved for the tenant project\'s App Engine VMs. This field is supported for Cloud Composer environments in versions composer-1././-airflow-/./.*.
    webServerIpv4ReservedRange :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PrivateEnvironmentConfig' with the minimum fields required to make a request.
newPrivateEnvironmentConfig ::
  PrivateEnvironmentConfig
newPrivateEnvironmentConfig =
  PrivateEnvironmentConfig
    { cloudComposerConnectionSubnetwork =
        Core.Nothing,
      cloudComposerNetworkIpv4CidrBlock = Core.Nothing,
      cloudComposerNetworkIpv4ReservedRange = Core.Nothing,
      cloudSqlIpv4CidrBlock = Core.Nothing,
      enablePrivateBuildsOnly = Core.Nothing,
      enablePrivateEnvironment = Core.Nothing,
      enablePrivatelyUsedPublicIps = Core.Nothing,
      networkingConfig = Core.Nothing,
      privateClusterConfig = Core.Nothing,
      webServerIpv4CidrBlock = Core.Nothing,
      webServerIpv4ReservedRange = Core.Nothing
    }

instance Core.FromJSON PrivateEnvironmentConfig where
  parseJSON =
    Core.withObject
      "PrivateEnvironmentConfig"
      ( \o ->
          PrivateEnvironmentConfig
            Core.<$> (o Core..:? "cloudComposerConnectionSubnetwork")
            Core.<*> (o Core..:? "cloudComposerNetworkIpv4CidrBlock")
            Core.<*> (o Core..:? "cloudComposerNetworkIpv4ReservedRange")
            Core.<*> (o Core..:? "cloudSqlIpv4CidrBlock")
            Core.<*> (o Core..:? "enablePrivateBuildsOnly")
            Core.<*> (o Core..:? "enablePrivateEnvironment")
            Core.<*> (o Core..:? "enablePrivatelyUsedPublicIps")
            Core.<*> (o Core..:? "networkingConfig")
            Core.<*> (o Core..:? "privateClusterConfig")
            Core.<*> (o Core..:? "webServerIpv4CidrBlock")
            Core.<*> (o Core..:? "webServerIpv4ReservedRange")
      )

instance Core.ToJSON PrivateEnvironmentConfig where
  toJSON PrivateEnvironmentConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("cloudComposerConnectionSubnetwork" Core..=)
              Core.<$> cloudComposerConnectionSubnetwork,
            ("cloudComposerNetworkIpv4CidrBlock" Core..=)
              Core.<$> cloudComposerNetworkIpv4CidrBlock,
            ("cloudComposerNetworkIpv4ReservedRange" Core..=)
              Core.<$> cloudComposerNetworkIpv4ReservedRange,
            ("cloudSqlIpv4CidrBlock" Core..=) Core.<$> cloudSqlIpv4CidrBlock,
            ("enablePrivateBuildsOnly" Core..=)
              Core.<$> enablePrivateBuildsOnly,
            ("enablePrivateEnvironment" Core..=)
              Core.<$> enablePrivateEnvironment,
            ("enablePrivatelyUsedPublicIps" Core..=)
              Core.<$> enablePrivatelyUsedPublicIps,
            ("networkingConfig" Core..=) Core.<$> networkingConfig,
            ("privateClusterConfig" Core..=) Core.<$> privateClusterConfig,
            ("webServerIpv4CidrBlock" Core..=) Core.<$> webServerIpv4CidrBlock,
            ("webServerIpv4ReservedRange" Core..=)
              Core.<$> webServerIpv4ReservedRange
          ]
      )

-- | The Recovery settings of an environment.
--
-- /See:/ 'newRecoveryConfig' smart constructor.
newtype RecoveryConfig = RecoveryConfig
  { -- | Optional. The configuration for scheduled snapshot creation mechanism.
    scheduledSnapshotsConfig :: (Core.Maybe ScheduledSnapshotsConfig)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RecoveryConfig' with the minimum fields required to make a request.
newRecoveryConfig ::
  RecoveryConfig
newRecoveryConfig =
  RecoveryConfig {scheduledSnapshotsConfig = Core.Nothing}

instance Core.FromJSON RecoveryConfig where
  parseJSON =
    Core.withObject
      "RecoveryConfig"
      ( \o ->
          RecoveryConfig Core.<$> (o Core..:? "scheduledSnapshotsConfig")
      )

instance Core.ToJSON RecoveryConfig where
  toJSON RecoveryConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("scheduledSnapshotsConfig" Core..=)
              Core.<$> scheduledSnapshotsConfig
          ]
      )

-- | Request to create a snapshot of a Cloud Composer environment.
--
-- /See:/ 'newSaveSnapshotRequest' smart constructor.
newtype SaveSnapshotRequest = SaveSnapshotRequest
  { -- | Location in a Cloud Storage where the snapshot is going to be stored, e.g.: \"gs:\/\/my-bucket\/snapshots\".
    snapshotLocation :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SaveSnapshotRequest' with the minimum fields required to make a request.
newSaveSnapshotRequest ::
  SaveSnapshotRequest
newSaveSnapshotRequest =
  SaveSnapshotRequest {snapshotLocation = Core.Nothing}

instance Core.FromJSON SaveSnapshotRequest where
  parseJSON =
    Core.withObject
      "SaveSnapshotRequest"
      ( \o ->
          SaveSnapshotRequest Core.<$> (o Core..:? "snapshotLocation")
      )

instance Core.ToJSON SaveSnapshotRequest where
  toJSON SaveSnapshotRequest {..} =
    Core.object
      ( Core.catMaybes
          [("snapshotLocation" Core..=) Core.<$> snapshotLocation]
      )

-- | Response to SaveSnapshotRequest.
--
-- /See:/ 'newSaveSnapshotResponse' smart constructor.
newtype SaveSnapshotResponse = SaveSnapshotResponse
  { -- | The fully-resolved Cloud Storage path of the created snapshot, e.g.: \"gs:\/\/my-bucket\/snapshots\/project/location/environment_timestamp\". This field is populated only if the snapshot creation was successful.
    snapshotPath :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SaveSnapshotResponse' with the minimum fields required to make a request.
newSaveSnapshotResponse ::
  SaveSnapshotResponse
newSaveSnapshotResponse =
  SaveSnapshotResponse {snapshotPath = Core.Nothing}

instance Core.FromJSON SaveSnapshotResponse where
  parseJSON =
    Core.withObject
      "SaveSnapshotResponse"
      (\o -> SaveSnapshotResponse Core.<$> (o Core..:? "snapshotPath"))

instance Core.ToJSON SaveSnapshotResponse where
  toJSON SaveSnapshotResponse {..} =
    Core.object
      (Core.catMaybes [("snapshotPath" Core..=) Core.<$> snapshotPath])

-- | The configuration for scheduled snapshot creation mechanism.
--
-- /See:/ 'newScheduledSnapshotsConfig' smart constructor.
data ScheduledSnapshotsConfig = ScheduledSnapshotsConfig
  { -- | Optional. Whether scheduled snapshots creation is enabled.
    enabled :: (Core.Maybe Core.Bool),
    -- | Optional. The cron expression representing the time when snapshots creation mechanism runs. This field is subject to additional validation around frequency of execution.
    snapshotCreationSchedule :: (Core.Maybe Core.Text),
    -- | Optional. The Cloud Storage location for storing automatically created snapshots.
    snapshotLocation :: (Core.Maybe Core.Text),
    -- | Optional. Time zone that sets the context to interpret snapshot/creation/schedule.
    timeZone :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ScheduledSnapshotsConfig' with the minimum fields required to make a request.
newScheduledSnapshotsConfig ::
  ScheduledSnapshotsConfig
newScheduledSnapshotsConfig =
  ScheduledSnapshotsConfig
    { enabled = Core.Nothing,
      snapshotCreationSchedule = Core.Nothing,
      snapshotLocation = Core.Nothing,
      timeZone = Core.Nothing
    }

instance Core.FromJSON ScheduledSnapshotsConfig where
  parseJSON =
    Core.withObject
      "ScheduledSnapshotsConfig"
      ( \o ->
          ScheduledSnapshotsConfig
            Core.<$> (o Core..:? "enabled")
            Core.<*> (o Core..:? "snapshotCreationSchedule")
            Core.<*> (o Core..:? "snapshotLocation")
            Core.<*> (o Core..:? "timeZone")
      )

instance Core.ToJSON ScheduledSnapshotsConfig where
  toJSON ScheduledSnapshotsConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("enabled" Core..=) Core.<$> enabled,
            ("snapshotCreationSchedule" Core..=)
              Core.<$> snapshotCreationSchedule,
            ("snapshotLocation" Core..=) Core.<$> snapshotLocation,
            ("timeZone" Core..=) Core.<$> timeZone
          ]
      )

-- | Configuration for resources used by Airflow schedulers.
--
-- /See:/ 'newSchedulerResource' smart constructor.
data SchedulerResource = SchedulerResource
  { -- | Optional. The number of schedulers.
    count :: (Core.Maybe Core.Int32),
    -- | Optional. CPU request and limit for a single Airflow scheduler replica.
    cpu :: (Core.Maybe Core.Double),
    -- | Optional. Memory (GB) request and limit for a single Airflow scheduler replica.
    memoryGb :: (Core.Maybe Core.Double),
    -- | Optional. Storage (GB) request and limit for a single Airflow scheduler replica.
    storageGb :: (Core.Maybe Core.Double)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SchedulerResource' with the minimum fields required to make a request.
newSchedulerResource ::
  SchedulerResource
newSchedulerResource =
  SchedulerResource
    { count = Core.Nothing,
      cpu = Core.Nothing,
      memoryGb = Core.Nothing,
      storageGb = Core.Nothing
    }

instance Core.FromJSON SchedulerResource where
  parseJSON =
    Core.withObject
      "SchedulerResource"
      ( \o ->
          SchedulerResource
            Core.<$> (o Core..:? "count")
            Core.<*> (o Core..:? "cpu")
            Core.<*> (o Core..:? "memoryGb")
            Core.<*> (o Core..:? "storageGb")
      )

instance Core.ToJSON SchedulerResource where
  toJSON SchedulerResource {..} =
    Core.object
      ( Core.catMaybes
          [ ("count" Core..=) Core.<$> count,
            ("cpu" Core..=) Core.<$> cpu,
            ("memoryGb" Core..=) Core.<$> memoryGb,
            ("storageGb" Core..=) Core.<$> storageGb
          ]
      )

-- | Specifies the selection and configuration of software inside the environment.
--
-- /See:/ 'newSoftwareConfig' smart constructor.
data SoftwareConfig = SoftwareConfig
  { -- | Optional. Apache Airflow configuration properties to override. Property keys contain the section and property names, separated by a hyphen, for example \"core-dags/are/paused/at/creation\". Section names must not contain hyphens (\"-\"), opening square brackets (\"[\"), or closing square brackets (\"]\"). The property name must not be empty and must not contain an equals sign (\"=\") or semicolon (\";\"). Section and property names must not contain a period (\".\"). Apache Airflow configuration property names must be written in <https://en.wikipedia.org/wiki/Snake_case snake_case>. Property values can contain any character, and can be written in any lower\/upper case format. Certain Apache Airflow configuration property values are </composer/docs/concepts/airflow-configurations blocked>, and cannot be overridden.
    airflowConfigOverrides :: (Core.Maybe SoftwareConfig_AirflowConfigOverrides),
    -- | Optional. The configuration for Cloud Data Lineage integration.
    cloudDataLineageIntegration :: (Core.Maybe CloudDataLineageIntegration),
    -- | Optional. Additional environment variables to provide to the Apache Airflow scheduler, worker, and webserver processes. Environment variable names must match the regular expression @a-zA-Z_*@. They cannot specify Apache Airflow software configuration overrides (they cannot match the regular expression @AIRFLOW__[A-Z0-9_]+__[A-Z0-9_]+@), and they cannot match any of the following reserved names: * @AIRFLOW_HOME@ * @C_FORCE_ROOT@ * @CONTAINER_NAME@ * @DAGS_FOLDER@ * @GCP_PROJECT@ * @GCS_BUCKET@ * @GKE_CLUSTER_NAME@ * @SQL_DATABASE@ * @SQL_INSTANCE@ * @SQL_PASSWORD@ * @SQL_PROJECT@ * @SQL_REGION@ * @SQL_USER@
    envVariables :: (Core.Maybe SoftwareConfig_EnvVariables),
    -- | Optional. The version of the software running in the environment. This encapsulates both the version of Cloud Composer functionality and the version of Apache Airflow. It must match the regular expression @composer-([0-9]+(\\.[0-9]+\\.[0-9]+(-preview\\.[0-9]+)?)?|latest)-airflow-([0-9]+(\\.[0-9]+(\\.[0-9]+)?)?)@. When used as input, the server also checks if the provided version is supported and denies the request for an unsupported version. The Cloud Composer portion of the image version is a full <https://semver.org semantic version>, or an alias in the form of major version number or @latest@. When an alias is provided, the server replaces it with the current Cloud Composer version that satisfies the alias. The Apache Airflow portion of the image version is a full semantic version that points to one of the supported Apache Airflow versions, or an alias in the form of only major or major.minor versions specified. When an alias is provided, the server replaces it with the latest Apache Airflow version that
    -- satisfies the alias and is supported in the given Cloud Composer version. In all cases, the resolved image version is stored in the same field. See also </composer/docs/concepts/versioning/composer-versions version list> and </composer/docs/concepts/versioning/composer-versioning-overview versioning overview>.
    imageVersion :: (Core.Maybe Core.Text),
    -- | Optional. Custom Python Package Index (PyPI) packages to be installed in the environment. Keys refer to the lowercase package name such as \"numpy\" and values are the lowercase extras and version specifier such as \"==1.12.0\", \"[devel,gcp_api]\", or \"[devel]>=1.8.2, \<1.9.2\". To specify a package without pinning it to a version specifier, use the empty string as the value.
    pypiPackages :: (Core.Maybe SoftwareConfig_PypiPackages),
    -- | Optional. The major version of Python used to run the Apache Airflow scheduler, worker, and webserver processes. Can be set to \'2\' or \'3\'. If not specified, the default is \'3\'. Cannot be updated. This field is only supported for Cloud Composer environments in versions composer-1././-airflow-/./.*. Environments in newer versions always use Python major version 3.
    pythonVersion :: (Core.Maybe Core.Text),
    -- | Optional. The number of schedulers for Airflow. This field is supported for Cloud Composer environments in versions composer-1././-airflow-2././.
    schedulerCount :: (Core.Maybe Core.Int32),
    -- | Optional. Whether or not the web server uses custom plugins. If unspecified, the field defaults to @PLUGINS_ENABLED@. This field is supported for Cloud Composer environments in versions composer-3-airflow-/././-build./ and newer.
    webServerPluginsMode :: (Core.Maybe SoftwareConfig_WebServerPluginsMode)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SoftwareConfig' with the minimum fields required to make a request.
newSoftwareConfig ::
  SoftwareConfig
newSoftwareConfig =
  SoftwareConfig
    { airflowConfigOverrides = Core.Nothing,
      cloudDataLineageIntegration = Core.Nothing,
      envVariables = Core.Nothing,
      imageVersion = Core.Nothing,
      pypiPackages = Core.Nothing,
      pythonVersion = Core.Nothing,
      schedulerCount = Core.Nothing,
      webServerPluginsMode = Core.Nothing
    }

instance Core.FromJSON SoftwareConfig where
  parseJSON =
    Core.withObject
      "SoftwareConfig"
      ( \o ->
          SoftwareConfig
            Core.<$> (o Core..:? "airflowConfigOverrides")
            Core.<*> (o Core..:? "cloudDataLineageIntegration")
            Core.<*> (o Core..:? "envVariables")
            Core.<*> (o Core..:? "imageVersion")
            Core.<*> (o Core..:? "pypiPackages")
            Core.<*> (o Core..:? "pythonVersion")
            Core.<*> (o Core..:? "schedulerCount")
            Core.<*> (o Core..:? "webServerPluginsMode")
      )

instance Core.ToJSON SoftwareConfig where
  toJSON SoftwareConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("airflowConfigOverrides" Core..=)
              Core.<$> airflowConfigOverrides,
            ("cloudDataLineageIntegration" Core..=)
              Core.<$> cloudDataLineageIntegration,
            ("envVariables" Core..=) Core.<$> envVariables,
            ("imageVersion" Core..=) Core.<$> imageVersion,
            ("pypiPackages" Core..=) Core.<$> pypiPackages,
            ("pythonVersion" Core..=) Core.<$> pythonVersion,
            ("schedulerCount" Core..=) Core.<$> schedulerCount,
            ("webServerPluginsMode" Core..=) Core.<$> webServerPluginsMode
          ]
      )

-- | Optional. Apache Airflow configuration properties to override. Property keys contain the section and property names, separated by a hyphen, for example \"core-dags/are/paused/at/creation\". Section names must not contain hyphens (\"-\"), opening square brackets (\"[\"), or closing square brackets (\"]\"). The property name must not be empty and must not contain an equals sign (\"=\") or semicolon (\";\"). Section and property names must not contain a period (\".\"). Apache Airflow configuration property names must be written in <https://en.wikipedia.org/wiki/Snake_case snake_case>. Property values can contain any character, and can be written in any lower\/upper case format. Certain Apache Airflow configuration property values are </composer/docs/concepts/airflow-configurations blocked>, and cannot be overridden.
--
-- /See:/ 'newSoftwareConfig_AirflowConfigOverrides' smart constructor.
newtype SoftwareConfig_AirflowConfigOverrides = SoftwareConfig_AirflowConfigOverrides
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SoftwareConfig_AirflowConfigOverrides' with the minimum fields required to make a request.
newSoftwareConfig_AirflowConfigOverrides ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  SoftwareConfig_AirflowConfigOverrides
newSoftwareConfig_AirflowConfigOverrides additional =
  SoftwareConfig_AirflowConfigOverrides {additional = additional}

instance Core.FromJSON SoftwareConfig_AirflowConfigOverrides where
  parseJSON =
    Core.withObject
      "SoftwareConfig_AirflowConfigOverrides"
      ( \o ->
          SoftwareConfig_AirflowConfigOverrides
            Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON SoftwareConfig_AirflowConfigOverrides where
  toJSON SoftwareConfig_AirflowConfigOverrides {..} =
    Core.toJSON additional

-- | Optional. Additional environment variables to provide to the Apache Airflow scheduler, worker, and webserver processes. Environment variable names must match the regular expression @a-zA-Z_*@. They cannot specify Apache Airflow software configuration overrides (they cannot match the regular expression @AIRFLOW__[A-Z0-9_]+__[A-Z0-9_]+@), and they cannot match any of the following reserved names: * @AIRFLOW_HOME@ * @C_FORCE_ROOT@ * @CONTAINER_NAME@ * @DAGS_FOLDER@ * @GCP_PROJECT@ * @GCS_BUCKET@ * @GKE_CLUSTER_NAME@ * @SQL_DATABASE@ * @SQL_INSTANCE@ * @SQL_PASSWORD@ * @SQL_PROJECT@ * @SQL_REGION@ * @SQL_USER@
--
-- /See:/ 'newSoftwareConfig_EnvVariables' smart constructor.
newtype SoftwareConfig_EnvVariables = SoftwareConfig_EnvVariables
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SoftwareConfig_EnvVariables' with the minimum fields required to make a request.
newSoftwareConfig_EnvVariables ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  SoftwareConfig_EnvVariables
newSoftwareConfig_EnvVariables additional =
  SoftwareConfig_EnvVariables {additional = additional}

instance Core.FromJSON SoftwareConfig_EnvVariables where
  parseJSON =
    Core.withObject
      "SoftwareConfig_EnvVariables"
      ( \o ->
          SoftwareConfig_EnvVariables Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON SoftwareConfig_EnvVariables where
  toJSON SoftwareConfig_EnvVariables {..} = Core.toJSON additional

-- | Optional. Custom Python Package Index (PyPI) packages to be installed in the environment. Keys refer to the lowercase package name such as \"numpy\" and values are the lowercase extras and version specifier such as \"==1.12.0\", \"[devel,gcp_api]\", or \"[devel]>=1.8.2, \<1.9.2\". To specify a package without pinning it to a version specifier, use the empty string as the value.
--
-- /See:/ 'newSoftwareConfig_PypiPackages' smart constructor.
newtype SoftwareConfig_PypiPackages = SoftwareConfig_PypiPackages
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SoftwareConfig_PypiPackages' with the minimum fields required to make a request.
newSoftwareConfig_PypiPackages ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  SoftwareConfig_PypiPackages
newSoftwareConfig_PypiPackages additional =
  SoftwareConfig_PypiPackages {additional = additional}

instance Core.FromJSON SoftwareConfig_PypiPackages where
  parseJSON =
    Core.withObject
      "SoftwareConfig_PypiPackages"
      ( \o ->
          SoftwareConfig_PypiPackages Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON SoftwareConfig_PypiPackages where
  toJSON SoftwareConfig_PypiPackages {..} = Core.toJSON additional

-- | The @Status@ type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by <https://github.com/grpc gRPC>. Each @Status@ message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the <https://cloud.google.com/apis/design/errors API Design Guide>.
--
-- /See:/ 'newStatus' smart constructor.
data Status = Status
  { -- | The status code, which should be an enum value of google.rpc.Code.
    code :: (Core.Maybe Core.Int32),
    -- | A list of messages that carry the error details. There is a common set of message types for APIs to use.
    details :: (Core.Maybe [Status_DetailsItem]),
    -- | A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    message :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Status' with the minimum fields required to make a request.
newStatus ::
  Status
newStatus =
  Status
    { code = Core.Nothing,
      details = Core.Nothing,
      message = Core.Nothing
    }

instance Core.FromJSON Status where
  parseJSON =
    Core.withObject
      "Status"
      ( \o ->
          Status
            Core.<$> (o Core..:? "code")
            Core.<*> (o Core..:? "details")
            Core.<*> (o Core..:? "message")
      )

instance Core.ToJSON Status where
  toJSON Status {..} =
    Core.object
      ( Core.catMaybes
          [ ("code" Core..=) Core.<$> code,
            ("details" Core..=) Core.<$> details,
            ("message" Core..=) Core.<$> message
          ]
      )

--
-- /See:/ 'newStatus_DetailsItem' smart constructor.
newtype Status_DetailsItem = Status_DetailsItem
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Status_DetailsItem' with the minimum fields required to make a request.
newStatus_DetailsItem ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Status_DetailsItem
newStatus_DetailsItem additional =
  Status_DetailsItem {additional = additional}

instance Core.FromJSON Status_DetailsItem where
  parseJSON =
    Core.withObject
      "Status_DetailsItem"
      (\o -> Status_DetailsItem Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Status_DetailsItem where
  toJSON Status_DetailsItem {..} = Core.toJSON additional

-- | Stop Airflow Command request.
--
-- /See:/ 'newStopAirflowCommandRequest' smart constructor.
data StopAirflowCommandRequest = StopAirflowCommandRequest
  { -- | The unique ID of the command execution.
    executionId :: (Core.Maybe Core.Text),
    -- | If true, the execution is terminated forcefully (SIGKILL). If false, the execution is stopped gracefully, giving it time for cleanup.
    force :: (Core.Maybe Core.Bool),
    -- | The name of the pod where the command is executed.
    pod :: (Core.Maybe Core.Text),
    -- | The namespace of the pod where the command is executed.
    podNamespace :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'StopAirflowCommandRequest' with the minimum fields required to make a request.
newStopAirflowCommandRequest ::
  StopAirflowCommandRequest
newStopAirflowCommandRequest =
  StopAirflowCommandRequest
    { executionId = Core.Nothing,
      force = Core.Nothing,
      pod = Core.Nothing,
      podNamespace = Core.Nothing
    }

instance Core.FromJSON StopAirflowCommandRequest where
  parseJSON =
    Core.withObject
      "StopAirflowCommandRequest"
      ( \o ->
          StopAirflowCommandRequest
            Core.<$> (o Core..:? "executionId")
            Core.<*> (o Core..:? "force")
            Core.<*> (o Core..:? "pod")
            Core.<*> (o Core..:? "podNamespace")
      )

instance Core.ToJSON StopAirflowCommandRequest where
  toJSON StopAirflowCommandRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("executionId" Core..=) Core.<$> executionId,
            ("force" Core..=) Core.<$> force,
            ("pod" Core..=) Core.<$> pod,
            ("podNamespace" Core..=) Core.<$> podNamespace
          ]
      )

-- | Response to StopAirflowCommandRequest.
--
-- /See:/ 'newStopAirflowCommandResponse' smart constructor.
data StopAirflowCommandResponse = StopAirflowCommandResponse
  { -- | Whether the execution is still running.
    isDone :: (Core.Maybe Core.Bool),
    -- | Output message from stopping execution request.
    output :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'StopAirflowCommandResponse' with the minimum fields required to make a request.
newStopAirflowCommandResponse ::
  StopAirflowCommandResponse
newStopAirflowCommandResponse =
  StopAirflowCommandResponse
    { isDone = Core.Nothing,
      output = Core.Nothing
    }

instance Core.FromJSON StopAirflowCommandResponse where
  parseJSON =
    Core.withObject
      "StopAirflowCommandResponse"
      ( \o ->
          StopAirflowCommandResponse
            Core.<$> (o Core..:? "isDone")
            Core.<*> (o Core..:? "output")
      )

instance Core.ToJSON StopAirflowCommandResponse where
  toJSON StopAirflowCommandResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("isDone" Core..=) Core.<$> isDone,
            ("output" Core..=) Core.<$> output
          ]
      )

-- | The configuration for data storage in the environment.
--
-- /See:/ 'newStorageConfig' smart constructor.
newtype StorageConfig = StorageConfig
  { -- | Optional. The name of the Cloud Storage bucket used by the environment. No @gs:\/\/@ prefix.
    bucket :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'StorageConfig' with the minimum fields required to make a request.
newStorageConfig ::
  StorageConfig
newStorageConfig = StorageConfig {bucket = Core.Nothing}

instance Core.FromJSON StorageConfig where
  parseJSON =
    Core.withObject
      "StorageConfig"
      (\o -> StorageConfig Core.<$> (o Core..:? "bucket"))

instance Core.ToJSON StorageConfig where
  toJSON StorageConfig {..} =
    Core.object (Core.catMaybes [("bucket" Core..=) Core.<$> bucket])

-- | The configuration setting for Task Logs.
--
-- /See:/ 'newTaskLogsRetentionConfig' smart constructor.
newtype TaskLogsRetentionConfig = TaskLogsRetentionConfig
  { -- | Optional. The mode of storage for Airflow workers task logs.
    storageMode :: (Core.Maybe TaskLogsRetentionConfig_StorageMode)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'TaskLogsRetentionConfig' with the minimum fields required to make a request.
newTaskLogsRetentionConfig ::
  TaskLogsRetentionConfig
newTaskLogsRetentionConfig =
  TaskLogsRetentionConfig {storageMode = Core.Nothing}

instance Core.FromJSON TaskLogsRetentionConfig where
  parseJSON =
    Core.withObject
      "TaskLogsRetentionConfig"
      ( \o ->
          TaskLogsRetentionConfig Core.<$> (o Core..:? "storageMode")
      )

instance Core.ToJSON TaskLogsRetentionConfig where
  toJSON TaskLogsRetentionConfig {..} =
    Core.object
      (Core.catMaybes [("storageMode" Core..=) Core.<$> storageMode])

-- | Configuration for resources used by Airflow triggerers.
--
-- /See:/ 'newTriggererResource' smart constructor.
data TriggererResource = TriggererResource
  { -- | Optional. The number of triggerers.
    count :: (Core.Maybe Core.Int32),
    -- | Optional. CPU request and limit for a single Airflow triggerer replica.
    cpu :: (Core.Maybe Core.Double),
    -- | Optional. Memory (GB) request and limit for a single Airflow triggerer replica.
    memoryGb :: (Core.Maybe Core.Double)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'TriggererResource' with the minimum fields required to make a request.
newTriggererResource ::
  TriggererResource
newTriggererResource =
  TriggererResource
    { count = Core.Nothing,
      cpu = Core.Nothing,
      memoryGb = Core.Nothing
    }

instance Core.FromJSON TriggererResource where
  parseJSON =
    Core.withObject
      "TriggererResource"
      ( \o ->
          TriggererResource
            Core.<$> (o Core..:? "count")
            Core.<*> (o Core..:? "cpu")
            Core.<*> (o Core..:? "memoryGb")
      )

instance Core.ToJSON TriggererResource where
  toJSON TriggererResource {..} =
    Core.object
      ( Core.catMaybes
          [ ("count" Core..=) Core.<$> count,
            ("cpu" Core..=) Core.<$> cpu,
            ("memoryGb" Core..=) Core.<$> memoryGb
          ]
      )

-- | User workloads ConfigMap used by Airflow tasks that run with Kubernetes executor or KubernetesPodOperator.
--
-- /See:/ 'newUserWorkloadsConfigMap' smart constructor.
data UserWorkloadsConfigMap = UserWorkloadsConfigMap
  { -- | Optional. The \"data\" field of Kubernetes ConfigMap, organized in key-value pairs. For details see: https:\/\/kubernetes.io\/docs\/concepts\/configuration\/configmap\/ Example: { \"example/key\": \"example/value\", \"another/key\": \"another/value\" }
    data' :: (Core.Maybe UserWorkloadsConfigMap_Data),
    -- | Identifier. The resource name of the ConfigMap, in the form: \"projects\/{projectId}\/locations\/{locationId}\/environments\/{environmentId}\/userWorkloadsConfigMaps\/{userWorkloadsConfigMapId}\"
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UserWorkloadsConfigMap' with the minimum fields required to make a request.
newUserWorkloadsConfigMap ::
  UserWorkloadsConfigMap
newUserWorkloadsConfigMap =
  UserWorkloadsConfigMap {data' = Core.Nothing, name = Core.Nothing}

instance Core.FromJSON UserWorkloadsConfigMap where
  parseJSON =
    Core.withObject
      "UserWorkloadsConfigMap"
      ( \o ->
          UserWorkloadsConfigMap
            Core.<$> (o Core..:? "data")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON UserWorkloadsConfigMap where
  toJSON UserWorkloadsConfigMap {..} =
    Core.object
      ( Core.catMaybes
          [("data" Core..=) Core.<$> data', ("name" Core..=) Core.<$> name]
      )

-- | Optional. The \"data\" field of Kubernetes ConfigMap, organized in key-value pairs. For details see: https:\/\/kubernetes.io\/docs\/concepts\/configuration\/configmap\/ Example: { \"example/key\": \"example/value\", \"another/key\": \"another/value\" }
--
-- /See:/ 'newUserWorkloadsConfigMap_Data' smart constructor.
newtype UserWorkloadsConfigMap_Data = UserWorkloadsConfigMap_Data
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UserWorkloadsConfigMap_Data' with the minimum fields required to make a request.
newUserWorkloadsConfigMap_Data ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  UserWorkloadsConfigMap_Data
newUserWorkloadsConfigMap_Data additional =
  UserWorkloadsConfigMap_Data {additional = additional}

instance Core.FromJSON UserWorkloadsConfigMap_Data where
  parseJSON =
    Core.withObject
      "UserWorkloadsConfigMap_Data"
      ( \o ->
          UserWorkloadsConfigMap_Data Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON UserWorkloadsConfigMap_Data where
  toJSON UserWorkloadsConfigMap_Data {..} = Core.toJSON additional

-- | User workloads Secret used by Airflow tasks that run with Kubernetes executor or KubernetesPodOperator.
--
-- /See:/ 'newUserWorkloadsSecret' smart constructor.
data UserWorkloadsSecret = UserWorkloadsSecret
  { -- | Optional. The \"data\" field of Kubernetes Secret, organized in key-value pairs, which can contain sensitive values such as a password, a token, or a key. The values for all keys have to be base64-encoded strings. For details see: https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/ Example: { \"example\": \"ZXhhbXBsZV92YWx1ZQ==\", \"another-example\": \"YW5vdGhlcl9leGFtcGxlX3ZhbHVl\" }
    data' :: (Core.Maybe UserWorkloadsSecret_Data),
    -- | Identifier. The resource name of the Secret, in the form: \"projects\/{projectId}\/locations\/{locationId}\/environments\/{environmentId}\/userWorkloadsSecrets\/{userWorkloadsSecretId}\"
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UserWorkloadsSecret' with the minimum fields required to make a request.
newUserWorkloadsSecret ::
  UserWorkloadsSecret
newUserWorkloadsSecret =
  UserWorkloadsSecret {data' = Core.Nothing, name = Core.Nothing}

instance Core.FromJSON UserWorkloadsSecret where
  parseJSON =
    Core.withObject
      "UserWorkloadsSecret"
      ( \o ->
          UserWorkloadsSecret
            Core.<$> (o Core..:? "data")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON UserWorkloadsSecret where
  toJSON UserWorkloadsSecret {..} =
    Core.object
      ( Core.catMaybes
          [("data" Core..=) Core.<$> data', ("name" Core..=) Core.<$> name]
      )

-- | Optional. The \"data\" field of Kubernetes Secret, organized in key-value pairs, which can contain sensitive values such as a password, a token, or a key. The values for all keys have to be base64-encoded strings. For details see: https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/ Example: { \"example\": \"ZXhhbXBsZV92YWx1ZQ==\", \"another-example\": \"YW5vdGhlcl9leGFtcGxlX3ZhbHVl\" }
--
-- /See:/ 'newUserWorkloadsSecret_Data' smart constructor.
newtype UserWorkloadsSecret_Data = UserWorkloadsSecret_Data
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UserWorkloadsSecret_Data' with the minimum fields required to make a request.
newUserWorkloadsSecret_Data ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  UserWorkloadsSecret_Data
newUserWorkloadsSecret_Data additional =
  UserWorkloadsSecret_Data {additional = additional}

instance Core.FromJSON UserWorkloadsSecret_Data where
  parseJSON =
    Core.withObject
      "UserWorkloadsSecret_Data"
      (\o -> UserWorkloadsSecret_Data Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON UserWorkloadsSecret_Data where
  toJSON UserWorkloadsSecret_Data {..} = Core.toJSON additional

-- | The configuration settings for the Airflow web server App Engine instance. Supported for Cloud Composer environments in versions composer-1././-airflow-/./.*
--
-- /See:/ 'newWebServerConfig' smart constructor.
newtype WebServerConfig = WebServerConfig
  { -- | Optional. Machine type on which Airflow web server is running. It has to be one of: composer-n1-webserver-2, composer-n1-webserver-4 or composer-n1-webserver-8. If not specified, composer-n1-webserver-2 will be used. Value custom is returned only in response, if Airflow web server parameters were manually changed to a non-standard values.
    machineType :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WebServerConfig' with the minimum fields required to make a request.
newWebServerConfig ::
  WebServerConfig
newWebServerConfig = WebServerConfig {machineType = Core.Nothing}

instance Core.FromJSON WebServerConfig where
  parseJSON =
    Core.withObject
      "WebServerConfig"
      (\o -> WebServerConfig Core.<$> (o Core..:? "machineType"))

instance Core.ToJSON WebServerConfig where
  toJSON WebServerConfig {..} =
    Core.object
      (Core.catMaybes [("machineType" Core..=) Core.<$> machineType])

-- | Network-level access control policy for the Airflow web server.
--
-- /See:/ 'newWebServerNetworkAccessControl' smart constructor.
newtype WebServerNetworkAccessControl = WebServerNetworkAccessControl
  { -- | A collection of allowed IP ranges with descriptions.
    allowedIpRanges :: (Core.Maybe [AllowedIpRange])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WebServerNetworkAccessControl' with the minimum fields required to make a request.
newWebServerNetworkAccessControl ::
  WebServerNetworkAccessControl
newWebServerNetworkAccessControl =
  WebServerNetworkAccessControl {allowedIpRanges = Core.Nothing}

instance Core.FromJSON WebServerNetworkAccessControl where
  parseJSON =
    Core.withObject
      "WebServerNetworkAccessControl"
      ( \o ->
          WebServerNetworkAccessControl
            Core.<$> (o Core..:? "allowedIpRanges")
      )

instance Core.ToJSON WebServerNetworkAccessControl where
  toJSON WebServerNetworkAccessControl {..} =
    Core.object
      ( Core.catMaybes
          [("allowedIpRanges" Core..=) Core.<$> allowedIpRanges]
      )

-- | Configuration for resources used by Airflow web server.
--
-- /See:/ 'newWebServerResource' smart constructor.
data WebServerResource = WebServerResource
  { -- | Optional. CPU request and limit for Airflow web server.
    cpu :: (Core.Maybe Core.Double),
    -- | Optional. Memory (GB) request and limit for Airflow web server.
    memoryGb :: (Core.Maybe Core.Double),
    -- | Optional. Storage (GB) request and limit for Airflow web server.
    storageGb :: (Core.Maybe Core.Double)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WebServerResource' with the minimum fields required to make a request.
newWebServerResource ::
  WebServerResource
newWebServerResource =
  WebServerResource
    { cpu = Core.Nothing,
      memoryGb = Core.Nothing,
      storageGb = Core.Nothing
    }

instance Core.FromJSON WebServerResource where
  parseJSON =
    Core.withObject
      "WebServerResource"
      ( \o ->
          WebServerResource
            Core.<$> (o Core..:? "cpu")
            Core.<*> (o Core..:? "memoryGb")
            Core.<*> (o Core..:? "storageGb")
      )

instance Core.ToJSON WebServerResource where
  toJSON WebServerResource {..} =
    Core.object
      ( Core.catMaybes
          [ ("cpu" Core..=) Core.<$> cpu,
            ("memoryGb" Core..=) Core.<$> memoryGb,
            ("storageGb" Core..=) Core.<$> storageGb
          ]
      )

-- | Configuration for resources used by Airflow workers.
--
-- /See:/ 'newWorkerResource' smart constructor.
data WorkerResource = WorkerResource
  { -- | Optional. CPU request and limit for a single Airflow worker replica.
    cpu :: (Core.Maybe Core.Double),
    -- | Optional. Maximum number of workers for autoscaling.
    maxCount :: (Core.Maybe Core.Int32),
    -- | Optional. Memory (GB) request and limit for a single Airflow worker replica.
    memoryGb :: (Core.Maybe Core.Double),
    -- | Optional. Minimum number of workers for autoscaling.
    minCount :: (Core.Maybe Core.Int32),
    -- | Optional. Storage (GB) request and limit for a single Airflow worker replica.
    storageGb :: (Core.Maybe Core.Double)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WorkerResource' with the minimum fields required to make a request.
newWorkerResource ::
  WorkerResource
newWorkerResource =
  WorkerResource
    { cpu = Core.Nothing,
      maxCount = Core.Nothing,
      memoryGb = Core.Nothing,
      minCount = Core.Nothing,
      storageGb = Core.Nothing
    }

instance Core.FromJSON WorkerResource where
  parseJSON =
    Core.withObject
      "WorkerResource"
      ( \o ->
          WorkerResource
            Core.<$> (o Core..:? "cpu")
            Core.<*> (o Core..:? "maxCount")
            Core.<*> (o Core..:? "memoryGb")
            Core.<*> (o Core..:? "minCount")
            Core.<*> (o Core..:? "storageGb")
      )

instance Core.ToJSON WorkerResource where
  toJSON WorkerResource {..} =
    Core.object
      ( Core.catMaybes
          [ ("cpu" Core..=) Core.<$> cpu,
            ("maxCount" Core..=) Core.<$> maxCount,
            ("memoryGb" Core..=) Core.<$> memoryGb,
            ("minCount" Core..=) Core.<$> minCount,
            ("storageGb" Core..=) Core.<$> storageGb
          ]
      )

-- | The Kubernetes workloads configuration for GKE cluster associated with the Cloud Composer environment. Supported for Cloud Composer environments in versions composer-2././-airflow-/./.* and newer.
--
-- /See:/ 'newWorkloadsConfig' smart constructor.
data WorkloadsConfig = WorkloadsConfig
  { -- | Optional. Resources used by Airflow DAG processors. This field is supported for Cloud Composer environments in versions composer-3-airflow-/././-build./ and newer.
    dagProcessor :: (Core.Maybe DagProcessorResource),
    -- | Optional. Resources used by Airflow schedulers.
    scheduler :: (Core.Maybe SchedulerResource),
    -- | Optional. Resources used by Airflow triggerers.
    triggerer :: (Core.Maybe TriggererResource),
    -- | Optional. Resources used by Airflow web server.
    webServer :: (Core.Maybe WebServerResource),
    -- | Optional. Resources used by Airflow workers.
    worker :: (Core.Maybe WorkerResource)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WorkloadsConfig' with the minimum fields required to make a request.
newWorkloadsConfig ::
  WorkloadsConfig
newWorkloadsConfig =
  WorkloadsConfig
    { dagProcessor = Core.Nothing,
      scheduler = Core.Nothing,
      triggerer = Core.Nothing,
      webServer = Core.Nothing,
      worker = Core.Nothing
    }

instance Core.FromJSON WorkloadsConfig where
  parseJSON =
    Core.withObject
      "WorkloadsConfig"
      ( \o ->
          WorkloadsConfig
            Core.<$> (o Core..:? "dagProcessor")
            Core.<*> (o Core..:? "scheduler")
            Core.<*> (o Core..:? "triggerer")
            Core.<*> (o Core..:? "webServer")
            Core.<*> (o Core..:? "worker")
      )

instance Core.ToJSON WorkloadsConfig where
  toJSON WorkloadsConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("dagProcessor" Core..=) Core.<$> dagProcessor,
            ("scheduler" Core..=) Core.<$> scheduler,
            ("triggerer" Core..=) Core.<$> triggerer,
            ("webServer" Core..=) Core.<$> webServer,
            ("worker" Core..=) Core.<$> worker
          ]
      )