lib/aws/generated/proton.ex

# WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
# See https://github.com/aws-beam/aws-codegen for more details.

defmodule AWS.Proton do
  @moduledoc """
  This is the Proton Service API Reference.

  It provides descriptions, syntax and usage examples for each of the
  [actions](https://docs.aws.amazon.com/proton/latest/APIReference/API_Operations.html) and [data
  types](https://docs.aws.amazon.com/proton/latest/APIReference/API_Types.html)
  for the Proton service.

  The documentation for each action shows the Query API request parameters and the
  XML response.

  Alternatively, you can use the Amazon Web Services CLI to access an API. For
  more information, see the [Amazon Web Services Command Line Interface User Guide](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).

  The Proton service is a two-pronged automation framework. Administrators create
  service templates to provide standardized infrastructure and deployment tooling
  for serverless and container based applications. Developers, in turn, select
  from the available service templates to automate their application or service
  deployments.

  Because administrators define the infrastructure and tooling that Proton deploys
  and manages, they need permissions to use all of the listed API operations.

  When developers select a specific infrastructure and tooling set, Proton deploys
  their applications. To monitor their applications that are running on Proton,
  developers need permissions to the service *create*, *list*, *update* and
  *delete* API operations and the service instance *list* and *update* API
  operations.

  To learn more about Proton administration, see the [Proton Administrator Guide](https://docs.aws.amazon.com/proton/latest/adminguide/Welcome.html).

  To learn more about deploying serverless and containerized applications on
  Proton, see the [Proton User Guide](https://docs.aws.amazon.com/proton/latest/userguide/Welcome.html).

  ## Ensuring Idempotency

  When you make a mutating API request, the request typically returns a result
  before the asynchronous workflows of the operation are complete. Operations
  might also time out or encounter other server issues before they're complete,
  even if the request already returned a result. This might make it difficult to
  determine whether the request succeeded. Moreover, you might need to retry the
  request multiple times to ensure that the operation completes successfully.
  However, if the original request and the subsequent retries are successful, the
  operation occurs multiple times. This means that you might create more resources
  than you intended.

  *Idempotency* ensures that an API request action completes no more than one
  time. With an idempotent request, if the original request action completes
  successfully, any subsequent retries complete successfully without performing
  any further actions. However, the result might contain updated information, such
  as the current creation status.

  The following lists of APIs are grouped according to methods that ensure
  idempotency.

  ## Idempotent create APIs with a client token

  The API actions in this list support idempotency with the use of a *client
  token*. The corresponding Amazon Web Services CLI commands also support
  idempotency using a client token. A client token is a unique, case-sensitive
  string of up to 64 ASCII characters. To make an idempotent API request using one
  of these actions, specify a client token in the request. We recommend that you
  *don't* reuse the same client token for other API requests. If you don’t provide
  a client token for these APIs, a default client token is automatically provided
  by SDKs.

  Given a request action that has succeeded:

  If you retry the request using the same client token and the same parameters,
  the retry succeeds without performing any further actions other than returning
  the original resource detail data in the response.

  If you retry the request using the same client token, but one or more of the
  parameters are different, the retry throws a `ValidationException` with an
  `IdempotentParameterMismatch` error.

  Client tokens expire eight hours after a request is made. If you retry the
  request with the expired token, a new resource is created.

  If the original resource is deleted and you retry the request, a new resource is
  created.

  Idempotent create APIs with a client token:

    * CreateEnvironmentTemplateVersion

    * CreateServiceTemplateVersion

    * CreateEnvironmentAccountConnection

  ## Idempotent create APIs

  Given a request action that has succeeded:

  If you retry the request with an API from this group, and the original resource
  *hasn't* been modified, the retry succeeds without performing any further
  actions other than returning the original resource detail data in the response.

  If the original resource has been modified, the retry throws a
  `ConflictException`.

  If you retry with different input parameters, the retry throws a
  `ValidationException` with an `IdempotentParameterMismatch` error.

  Idempotent create APIs:

    * CreateEnvironmentTemplate

    * CreateServiceTemplate

    * CreateEnvironment

    * CreateService

  ## Idempotent delete APIs

  Given a request action that has succeeded:

  When you retry the request with an API from this group and the resource was
  deleted, its metadata is returned in the response.

  If you retry and the resource doesn't exist, the response is empty.

  In both cases, the retry succeeds.

  Idempotent delete APIs:

    * DeleteEnvironmentTemplate

    * DeleteEnvironmentTemplateVersion

    * DeleteServiceTemplate

    * DeleteServiceTemplateVersion

    * DeleteEnvironmentAccountConnection

  ## Asynchronous idempotent delete APIs

  Given a request action that has succeeded:

  If you retry the request with an API from this group, if the original request
  delete operation status is `DELETE_IN_PROGRESS`, the retry returns the resource
  detail data in the response without performing any further actions.

  If the original request delete operation is complete, a retry returns an empty
  response.

  Asynchronous idempotent delete APIs:

    * DeleteEnvironment

    * DeleteService
  """

  alias AWS.Client
  alias AWS.Request

  def metadata do
    %AWS.ServiceMetadata{
      abbreviation: nil,
      api_version: "2020-07-20",
      content_type: "application/x-amz-json-1.0",
      credential_scope: nil,
      endpoint_prefix: "proton",
      global?: false,
      protocol: "json",
      service_id: "Proton",
      signature_version: "v4",
      signing_name: "proton",
      target_prefix: "AwsProton20200720"
    }
  end

  @doc """
  In a management account, an environment account connection request is accepted.

  When the environment account connection request is accepted, Proton can use the
  associated IAM role to provision environment infrastructure resources in the
  associated environment account.

  For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def accept_environment_account_connection(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "AcceptEnvironmentAccountConnection", input, options)
  end

  @doc """
  Attempts to cancel an environment deployment on an `UpdateEnvironment` action,
  if the deployment is `IN_PROGRESS`.

  For more information, see [Update an environment](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-update.html)
  in the *Proton Administrator guide*.

  The following list includes potential cancellation scenarios.

    * If the cancellation attempt succeeds, the resulting deployment
  state is `CANCELLED`.

    * If the cancellation attempt fails, the resulting deployment state
  is `FAILED`.

    * If the current `UpdateEnvironment` action succeeds before the
  cancellation attempt starts, the resulting deployment state is `SUCCEEDED` and
  the cancellation attempt has no effect.
  """
  def cancel_environment_deployment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CancelEnvironmentDeployment", input, options)
  end

  @doc """
  Attempts to cancel a service instance deployment on an `UpdateServiceInstance`
  action, if the deployment is `IN_PROGRESS`.

  For more information, see *Update a service instance* in the [Proton Administrator
  guide](https://docs.aws.amazon.com/proton/latest/adminguide/ag-svc-instance-update.html)
  or the [Proton User guide](https://docs.aws.amazon.com/proton/latest/userguide/ug-svc-instance-update.html).

  The following list includes potential cancellation scenarios.

    * If the cancellation attempt succeeds, the resulting deployment
  state is `CANCELLED`.

    * If the cancellation attempt fails, the resulting deployment state
  is `FAILED`.

    * If the current `UpdateServiceInstance` action succeeds before the
  cancellation attempt starts, the resulting deployment state is `SUCCEEDED` and
  the cancellation attempt has no effect.
  """
  def cancel_service_instance_deployment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CancelServiceInstanceDeployment", input, options)
  end

  @doc """
  Attempts to cancel a service pipeline deployment on an `UpdateServicePipeline`
  action, if the deployment is `IN_PROGRESS`.

  For more information, see *Update a service pipeline* in the [Proton Administrator
  guide](https://docs.aws.amazon.com/proton/latest/adminguide/ag-svc-pipeline-update.html)
  or the [Proton User guide](https://docs.aws.amazon.com/proton/latest/userguide/ug-svc-pipeline-update.html).

  The following list includes potential cancellation scenarios.

    * If the cancellation attempt succeeds, the resulting deployment
  state is `CANCELLED`.

    * If the cancellation attempt fails, the resulting deployment state
  is `FAILED`.

    * If the current `UpdateServicePipeline` action succeeds before the
  cancellation attempt starts, the resulting deployment state is `SUCCEEDED` and
  the cancellation attempt has no effect.
  """
  def cancel_service_pipeline_deployment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CancelServicePipelineDeployment", input, options)
  end

  @doc """
  Deploy a new environment.

  An Proton environment is created from an environment template that defines
  infrastructure and resources that can be shared across services.

  ## You can provision environments using the following methods:

    * Standard provisioning: Proton makes direct calls to provision your
  resources.

    * Pull request provisioning: Proton makes pull requests on your
  repository to provide compiled infrastructure as code (IaC) files that your IaC
  engine uses to provision resources.

  For more information, see the
  [Environments](https://docs.aws.amazon.com/proton/latest/adminguide/ag-environments.html)
  in the *Proton Administrator Guide.*
  """
  def create_environment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateEnvironment", input, options)
  end

  @doc """
  Create an environment account connection in an environment account so that
  environment infrastructure resources can be provisioned in the environment
  account from a management account.

  An environment account connection is a secure bi-directional connection between
  a *management account* and an *environment account* that maintains authorization
  and permissions. For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def create_environment_account_connection(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateEnvironmentAccountConnection", input, options)
  end

  @doc """
  Create an environment template for Proton.

  For more information, see [Environment Templates](https://docs.aws.amazon.com/proton/latest/adminguide/ag-templates.html)
  in the *Proton Administrator Guide*.

  You can create an environment template in one of the two following ways:

    * Register and publish a *standard* environment template that
  instructs Proton to deploy and manage environment infrastructure.

    * Register and publish a *customer managed* environment template
  that connects Proton to your existing provisioned infrastructure that you
  manage. Proton *doesn't* manage your existing provisioned infrastructure. To
  create an environment template for customer provisioned and managed
  infrastructure, include the `provisioning` parameter and set the value to
  `CUSTOMER_MANAGED`. For more information, see [Register and publish an environment
  template](https://docs.aws.amazon.com/proton/latest/adminguide/template-create.html)
  in the *Proton Administrator Guide*.
  """
  def create_environment_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateEnvironmentTemplate", input, options)
  end

  @doc """
  Create a new major or minor version of an environment template.

  A major version of an environment template is a version that *isn't* backwards
  compatible. A minor version of an environment template is a version that's
  backwards compatible within its major version.
  """
  def create_environment_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateEnvironmentTemplateVersion", input, options)
  end

  @doc """
  Create and register a link to a repository that can be used with pull request
  provisioning or template sync configurations.

  For more information, see [Template bundles](https://docs.aws.amazon.com/proton/latest/adminguide/ag-template-bundles.html)
  and [Template sync configurations](https://docs.aws.amazon.com/proton/latest/adminguide/ag-template-sync-configs.html)
  in the *Proton Administrator Guide*.
  """
  def create_repository(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateRepository", input, options)
  end

  @doc """
  Create an Proton service.

  An Proton service is an instantiation of a service template and often includes
  several service instances and pipeline. For more information, see
  [Services](https://docs.aws.amazon.com/proton/latest/adminguide/ag-services.html) in the *Proton Administrator Guide* and
  [Services](https://docs.aws.amazon.com/proton/latest/userguide/ug-service.html)
  in the *Proton User Guide*.
  """
  def create_service(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateService", input, options)
  end

  @doc """
  Create a service template.

  The administrator creates a service template to define standardized
  infrastructure and an optional CICD service pipeline. Developers, in turn,
  select the service template from Proton. If the selected service template
  includes a service pipeline definition, they provide a link to their source code
  repository. Proton then deploys and manages the infrastructure defined by the
  selected service template. For more information, see [Service Templates](https://docs.aws.amazon.com/proton/latest/adminguide/managing-svc-templates.html)
  in the *Proton Administrator Guide*.
  """
  def create_service_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateServiceTemplate", input, options)
  end

  @doc """
  Create a new major or minor version of a service template.

  A major version of a service template is a version that *isn't* backward
  compatible. A minor version of a service template is a version that's backward
  compatible within its major version.
  """
  def create_service_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateServiceTemplateVersion", input, options)
  end

  @doc """
  Set up a template for automated template version creation.

  When a commit is pushed to your registered
  [repository](https://docs.aws.amazon.com/proton/latest/APIReference/API_Repository.html), Proton checks for changes to your repository template bundles. If it detects a
  template bundle change, a new minor or major version of its template is created,
  if the version doesn’t already exist. For more information, see [Template sync
  configurations](https://docs.aws.amazon.com/proton/latest/adminguide/ag-template-sync-configs.html)
  in the *Proton Administrator Guide*.
  """
  def create_template_sync_config(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "CreateTemplateSyncConfig", input, options)
  end

  @doc """
  Delete an environment.
  """
  def delete_environment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteEnvironment", input, options)
  end

  @doc """
  In an environment account, delete an environment account connection.

  After you delete an environment account connection that’s in use by an Proton
  environment, Proton *can’t* manage the environment infrastructure resources
  until a new environment account connection is accepted for the environment
  account and associated environment. You're responsible for cleaning up
  provisioned resources that remain without an environment connection.

  For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def delete_environment_account_connection(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteEnvironmentAccountConnection", input, options)
  end

  @doc """
  If no other major or minor versions of an environment template exist, delete the
  environment template.
  """
  def delete_environment_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteEnvironmentTemplate", input, options)
  end

  @doc """
  If no other minor versions of an environment template exist, delete a major
  version of the environment template if it's not the `Recommended` version.

  Delete the `Recommended` version of the environment template if no other major
  versions or minor versions of the environment template exist. A major version of
  an environment template is a version that's not backward compatible.

  Delete a minor version of an environment template if it *isn't* the
  `Recommended` version. Delete a `Recommended` minor version of the environment
  template if no other minor versions of the environment template exist. A minor
  version of an environment template is a version that's backward compatible.
  """
  def delete_environment_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteEnvironmentTemplateVersion", input, options)
  end

  @doc """
  De-register and unlink your repository.
  """
  def delete_repository(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteRepository", input, options)
  end

  @doc """
  Delete a service.
  """
  def delete_service(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteService", input, options)
  end

  @doc """
  If no other major or minor versions of the service template exist, delete the
  service template.
  """
  def delete_service_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteServiceTemplate", input, options)
  end

  @doc """
  If no other minor versions of a service template exist, delete a major version
  of the service template if it's not the `Recommended` version.

  Delete the `Recommended` version of the service template if no other major
  versions or minor versions of the service template exist. A major version of a
  service template is a version that *isn't* backwards compatible.

  Delete a minor version of a service template if it's not the `Recommended`
  version. Delete a `Recommended` minor version of the service template if no
  other minor versions of the service template exist. A minor version of a service
  template is a version that's backwards compatible.
  """
  def delete_service_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteServiceTemplateVersion", input, options)
  end

  @doc """
  Delete a template sync configuration.
  """
  def delete_template_sync_config(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "DeleteTemplateSyncConfig", input, options)
  end

  @doc """
  Get detail data for the Proton pipeline service role.
  """
  def get_account_settings(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetAccountSettings", input, options)
  end

  @doc """
  Get detail data for an environment.
  """
  def get_environment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetEnvironment", input, options)
  end

  @doc """
  In an environment account, view the detail data for an environment account
  connection.

  For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def get_environment_account_connection(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetEnvironmentAccountConnection", input, options)
  end

  @doc """
  Get detail data for an environment template.
  """
  def get_environment_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetEnvironmentTemplate", input, options)
  end

  @doc """
  View detail data for a major or minor version of an environment template.
  """
  def get_environment_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetEnvironmentTemplateVersion", input, options)
  end

  @doc """
  Get detail data for a repository.
  """
  def get_repository(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetRepository", input, options)
  end

  @doc """
  Get the repository sync status.
  """
  def get_repository_sync_status(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetRepositorySyncStatus", input, options)
  end

  @doc """
  Get detail data for a service.
  """
  def get_service(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetService", input, options)
  end

  @doc """
  Get detail data for a service instance.

  A service instance is an instantiation of service template, which is running in
  a specific environment.
  """
  def get_service_instance(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetServiceInstance", input, options)
  end

  @doc """
  Get detail data for a service template.
  """
  def get_service_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetServiceTemplate", input, options)
  end

  @doc """
  View detail data for a major or minor version of a service template.
  """
  def get_service_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetServiceTemplateVersion", input, options)
  end

  @doc """
  Get detail data for a template sync configuration.
  """
  def get_template_sync_config(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetTemplateSyncConfig", input, options)
  end

  @doc """
  Get the status of a template sync.
  """
  def get_template_sync_status(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "GetTemplateSyncStatus", input, options)
  end

  @doc """
  View a list of environment account connections.

  For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def list_environment_account_connections(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListEnvironmentAccountConnections", input, options)
  end

  @doc """
  List the infrastructure as code outputs for your environment.
  """
  def list_environment_outputs(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListEnvironmentOutputs", input, options)
  end

  @doc """
  List the provisioned resources for your environment.
  """
  def list_environment_provisioned_resources(%Client{} = client, input, options \\ []) do
    Request.request_post(
      client,
      metadata(),
      "ListEnvironmentProvisionedResources",
      input,
      options
    )
  end

  @doc """
  List major or minor versions of an environment template with detail data.
  """
  def list_environment_template_versions(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListEnvironmentTemplateVersions", input, options)
  end

  @doc """
  List environment templates.
  """
  def list_environment_templates(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListEnvironmentTemplates", input, options)
  end

  @doc """
  List environments with detail data summaries.
  """
  def list_environments(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListEnvironments", input, options)
  end

  @doc """
  List repositories with detail data.
  """
  def list_repositories(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListRepositories", input, options)
  end

  @doc """
  List repository sync definitions with detail data.
  """
  def list_repository_sync_definitions(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListRepositorySyncDefinitions", input, options)
  end

  @doc """
  View a list service instance infrastructure as code outputs with detail data.
  """
  def list_service_instance_outputs(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListServiceInstanceOutputs", input, options)
  end

  @doc """
  List provisioned resources for a service instance with details.
  """
  def list_service_instance_provisioned_resources(%Client{} = client, input, options \\ []) do
    Request.request_post(
      client,
      metadata(),
      "ListServiceInstanceProvisionedResources",
      input,
      options
    )
  end

  @doc """
  List service instances with summaries of detail data.
  """
  def list_service_instances(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListServiceInstances", input, options)
  end

  @doc """
  View a list service pipeline infrastructure as code outputs with detail.
  """
  def list_service_pipeline_outputs(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListServicePipelineOutputs", input, options)
  end

  @doc """
  List provisioned resources for a service and pipeline with details.
  """
  def list_service_pipeline_provisioned_resources(%Client{} = client, input, options \\ []) do
    Request.request_post(
      client,
      metadata(),
      "ListServicePipelineProvisionedResources",
      input,
      options
    )
  end

  @doc """
  List major or minor versions of a service template with detail data.
  """
  def list_service_template_versions(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListServiceTemplateVersions", input, options)
  end

  @doc """
  List service templates with detail data.
  """
  def list_service_templates(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListServiceTemplates", input, options)
  end

  @doc """
  List services with summaries of detail data.
  """
  def list_services(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListServices", input, options)
  end

  @doc """
  List tags for a resource.

  For more information, see *Proton resources and tagging* in the [Proton Administrator
  Guide](https://docs.aws.amazon.com/proton/latest/adminguide/resources.html) or
  [Proton User Guide](https://docs.aws.amazon.com/proton/latest/userguide/resources.html).
  """
  def list_tags_for_resource(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "ListTagsForResource", input, options)
  end

  @doc """
  Notify Proton of status changes to a provisioned resource when you use pull
  request provisioning.

  For more information, see [Template bundles](https://docs.aws.amazon.com/proton/latest/adminguide/ag-template-bundles.html).

  Provisioning by pull request is currently in feature preview and is only usable
  with Terraform based Proton Templates. To learn more about [Amazon Web Services Feature Preview terms](https://aws.amazon.com/service-terms), see section 2 on
  Beta and Previews.
  """
  def notify_resource_deployment_status_change(%Client{} = client, input, options \\ []) do
    Request.request_post(
      client,
      metadata(),
      "NotifyResourceDeploymentStatusChange",
      input,
      options
    )
  end

  @doc """
  In a management account, reject an environment account connection from another
  environment account.

  After you reject an environment account connection request, you *won’t* be able
  to accept or use the rejected environment account connection.

  You *can’t* reject an environment account connection that is connected to an
  environment.

  For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def reject_environment_account_connection(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "RejectEnvironmentAccountConnection", input, options)
  end

  @doc """
  Tag a resource.

  For more information, see *Proton resources and tagging* in the [Proton Administrator
  Guide](https://docs.aws.amazon.com/proton/latest/adminguide/resources.html) or
  [Proton User Guide](https://docs.aws.amazon.com/proton/latest/userguide/resources.html).
  """
  def tag_resource(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "TagResource", input, options)
  end

  @doc """
  Remove a tag from a resource.

  For more information, see *Proton resources and tagging* in the [Proton Administrator
  Guide](https://docs.aws.amazon.com/proton/latest/adminguide/resources.html) or
  [Proton User Guide](https://docs.aws.amazon.com/proton/latest/userguide/resources.html).
  """
  def untag_resource(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UntagResource", input, options)
  end

  @doc """
  Update the Proton service pipeline role or repository settings.
  """
  def update_account_settings(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateAccountSettings", input, options)
  end

  @doc """
  Update an environment.

  If the environment is associated with an environment account connection, *don't*
  update or include the `protonServiceRoleArn` and `provisioningRepository`
  parameter to update or connect to an environment account connection.

  You can only update to a new environment account connection if it was created in
  the same environment account that the current environment account connection was
  created in and is associated with the current environment.

  If the environment *isn't* associated with an environment account connection,
  *don't* update or include the `environmentAccountConnectionId` parameter to
  update or connect to an environment account connection.

  You can update either the `environmentAccountConnectionId` or
  `protonServiceRoleArn` parameter and value. You can’t update both.

  If the environment was provisioned with pull request provisioning, include the
  `provisioningRepository` parameter and omit the `protonServiceRoleArn` and
  `environmentAccountConnectionId` parameters.

  If the environment wasn't provisioned with pull request provisioning, omit the
  `provisioningRepository` parameter.

  There are four modes for updating an environment as described in the following.
  The `deploymentType` field defines the mode.

  ## Definitions

  ###

  `NONE`

  In this mode, a deployment *doesn't* occur. Only the requested metadata
  parameters are updated.

  ###

  `CURRENT_VERSION`

  In this mode, the environment is deployed and updated with the new spec that you
  provide. Only requested parameters are updated. *Don’t* include minor or major
  version parameters when you use this `deployment-type`.

  ###

  `MINOR_VERSION`

  In this mode, the environment is deployed and updated with the published,
  recommended (latest) minor version of the current major version in use, by
  default. You can also specify a different minor version of the current major
  version in use.

  ###

  `MAJOR_VERSION`

  In this mode, the environment is deployed and updated with the published,
  recommended (latest) major and minor version of the current template, by
  default. You can also specify a different major version that's higher than the
  major version in use and a minor version (optional).
  """
  def update_environment(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateEnvironment", input, options)
  end

  @doc """
  In an environment account, update an environment account connection to use a new
  IAM role.

  For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/adminguide/ag-env-account-connections.html)
  in the *Proton Administrator guide*.
  """
  def update_environment_account_connection(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateEnvironmentAccountConnection", input, options)
  end

  @doc """
  Update an environment template.
  """
  def update_environment_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateEnvironmentTemplate", input, options)
  end

  @doc """
  Update a major or minor version of an environment template.
  """
  def update_environment_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateEnvironmentTemplateVersion", input, options)
  end

  @doc """
  Edit a service description or use a spec to add and delete service instances.

  Existing service instances and the service pipeline *can't* be edited using this
  API. They can only be deleted.

  Use the `description` parameter to modify the description.

  Edit the `spec` parameter to add or delete instances.
  """
  def update_service(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateService", input, options)
  end

  @doc """
  Update a service instance.

  There are four modes for updating a service instance as described in the
  following. The `deploymentType` field defines the mode.

  ## Definitions

  ###

  `NONE`

  In this mode, a deployment *doesn't* occur. Only the requested metadata
  parameters are updated.

  ###

  `CURRENT_VERSION`

  In this mode, the service instance is deployed and updated with the new spec
  that you provide. Only requested parameters are updated. *Don’t* include minor
  or major version parameters when you use this `deployment-type`.

  ###

  `MINOR_VERSION`

  In this mode, the service instance is deployed and updated with the published,
  recommended (latest) minor version of the current major version in use, by
  default. You can also specify a different minor version of the current major
  version in use.

  ###

  `MAJOR_VERSION`

  In this mode, the service instance is deployed and updated with the published,
  recommended (latest) major and minor version of the current template, by
  default. You can also specify a different major version that is higher than the
  major version in use and a minor version (optional).
  """
  def update_service_instance(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateServiceInstance", input, options)
  end

  @doc """
  Update the service pipeline.

  There are four modes for updating a service pipeline as described in the
  following. The `deploymentType` field defines the mode.

  ## Definitions

  ###

  `NONE`

  In this mode, a deployment *doesn't* occur. Only the requested metadata
  parameters are updated.

  ###

  `CURRENT_VERSION`

  In this mode, the service pipeline is deployed and updated with the new spec
  that you provide. Only requested parameters are updated. *Don’t* include minor
  or major version parameters when you use this `deployment-type`.

  ###

  `MINOR_VERSION`

  In this mode, the service pipeline is deployed and updated with the published,
  recommended (latest) minor version of the current major version in use, by
  default. You can also specify a different minor version of the current major
  version in use.

  ###

  `MAJOR_VERSION`

  In this mode, the service pipeline is deployed and updated with the published,
  recommended (latest) major and minor version of the current template by default.
  You can also specify a different major version that is higher than the major
  version in use and a minor version (optional).
  """
  def update_service_pipeline(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateServicePipeline", input, options)
  end

  @doc """
  Update a service template.
  """
  def update_service_template(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateServiceTemplate", input, options)
  end

  @doc """
  Update a major or minor version of a service template.
  """
  def update_service_template_version(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateServiceTemplateVersion", input, options)
  end

  @doc """
  Update template sync configuration parameters, except for the `templateName` and
  `templateType`.
  """
  def update_template_sync_config(%Client{} = client, input, options \\ []) do
    Request.request_post(client, metadata(), "UpdateTemplateSyncConfig", input, options)
  end
end