Current section

Files

Jump to
aws_erlang src aws_ecr.erl
Raw

src/aws_ecr.erl

%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
%% See https://github.com/aws-beam/aws-codegen for more details.
%% @doc Amazon Elastic Container Registry
%%
%% Amazon Elastic Container Registry (Amazon ECR) is a managed container
%% image registry service.
%%
%% Customers can use the familiar Docker CLI, or their preferred client, to
%% push, pull, and manage images. Amazon ECR provides a secure, scalable, and
%% reliable registry for your Docker or Open Container Initiative (OCI)
%% images. Amazon ECR supports private repositories with resource-based
%% permissions using IAM so that specific users or Amazon EC2 instances can
%% access repositories and images.
%%
%% Amazon ECR has service endpoints in each supported Region. For more
%% information, see Amazon ECR endpoints in the Amazon Web Services General
%% Reference.
-module(aws_ecr).
-export([batch_check_layer_availability/2,
batch_check_layer_availability/3,
batch_delete_image/2,
batch_delete_image/3,
batch_get_image/2,
batch_get_image/3,
batch_get_repository_scanning_configuration/2,
batch_get_repository_scanning_configuration/3,
complete_layer_upload/2,
complete_layer_upload/3,
create_pull_through_cache_rule/2,
create_pull_through_cache_rule/3,
create_repository/2,
create_repository/3,
delete_lifecycle_policy/2,
delete_lifecycle_policy/3,
delete_pull_through_cache_rule/2,
delete_pull_through_cache_rule/3,
delete_registry_policy/2,
delete_registry_policy/3,
delete_repository/2,
delete_repository/3,
delete_repository_policy/2,
delete_repository_policy/3,
describe_image_replication_status/2,
describe_image_replication_status/3,
describe_image_scan_findings/2,
describe_image_scan_findings/3,
describe_images/2,
describe_images/3,
describe_pull_through_cache_rules/2,
describe_pull_through_cache_rules/3,
describe_registry/2,
describe_registry/3,
describe_repositories/2,
describe_repositories/3,
get_authorization_token/2,
get_authorization_token/3,
get_download_url_for_layer/2,
get_download_url_for_layer/3,
get_lifecycle_policy/2,
get_lifecycle_policy/3,
get_lifecycle_policy_preview/2,
get_lifecycle_policy_preview/3,
get_registry_policy/2,
get_registry_policy/3,
get_registry_scanning_configuration/2,
get_registry_scanning_configuration/3,
get_repository_policy/2,
get_repository_policy/3,
initiate_layer_upload/2,
initiate_layer_upload/3,
list_images/2,
list_images/3,
list_tags_for_resource/2,
list_tags_for_resource/3,
put_image/2,
put_image/3,
put_image_scanning_configuration/2,
put_image_scanning_configuration/3,
put_image_tag_mutability/2,
put_image_tag_mutability/3,
put_lifecycle_policy/2,
put_lifecycle_policy/3,
put_registry_policy/2,
put_registry_policy/3,
put_registry_scanning_configuration/2,
put_registry_scanning_configuration/3,
put_replication_configuration/2,
put_replication_configuration/3,
set_repository_policy/2,
set_repository_policy/3,
start_image_scan/2,
start_image_scan/3,
start_lifecycle_policy_preview/2,
start_lifecycle_policy_preview/3,
tag_resource/2,
tag_resource/3,
untag_resource/2,
untag_resource/3,
upload_layer_part/2,
upload_layer_part/3]).
-include_lib("hackney/include/hackney_lib.hrl").
%%====================================================================
%% API
%%====================================================================
%% @doc Checks the availability of one or more image layers in a repository.
%%
%% When an image is pushed to a repository, each image layer is checked to
%% verify if it has been uploaded before. If it has been uploaded, then the
%% image layer is skipped.
%%
%% This operation is used by the Amazon ECR proxy and is not generally used
%% by customers for pulling and pushing images. In most cases, you should use
%% the `docker' CLI to pull, tag, and push images.
batch_check_layer_availability(Client, Input)
when is_map(Client), is_map(Input) ->
batch_check_layer_availability(Client, Input, []).
batch_check_layer_availability(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"BatchCheckLayerAvailability">>, Input, Options).
%% @doc Deletes a list of specified images within a repository.
%%
%% Images are specified with either an `imageTag' or `imageDigest'.
%%
%% You can remove a tag from an image by specifying the image's tag in your
%% request. When you remove the last tag from an image, the image is deleted
%% from your repository.
%%
%% You can completely delete an image (and all of its tags) by specifying the
%% image's digest in your request.
batch_delete_image(Client, Input)
when is_map(Client), is_map(Input) ->
batch_delete_image(Client, Input, []).
batch_delete_image(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"BatchDeleteImage">>, Input, Options).
%% @doc Gets detailed information for an image.
%%
%% Images are specified with either an `imageTag' or `imageDigest'.
%%
%% When an image is pulled, the BatchGetImage API is called once to retrieve
%% the image manifest.
batch_get_image(Client, Input)
when is_map(Client), is_map(Input) ->
batch_get_image(Client, Input, []).
batch_get_image(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"BatchGetImage">>, Input, Options).
%% @doc Gets the scanning configuration for one or more repositories.
batch_get_repository_scanning_configuration(Client, Input)
when is_map(Client), is_map(Input) ->
batch_get_repository_scanning_configuration(Client, Input, []).
batch_get_repository_scanning_configuration(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"BatchGetRepositoryScanningConfiguration">>, Input, Options).
%% @doc Informs Amazon ECR that the image layer upload has completed for a
%% specified registry, repository name, and upload ID.
%%
%% You can optionally provide a `sha256' digest of the image layer for data
%% validation purposes.
%%
%% When an image is pushed, the CompleteLayerUpload API is called once per
%% each new image layer to verify that the upload has completed.
%%
%% This operation is used by the Amazon ECR proxy and is not generally used
%% by customers for pulling and pushing images. In most cases, you should use
%% the `docker' CLI to pull, tag, and push images.
complete_layer_upload(Client, Input)
when is_map(Client), is_map(Input) ->
complete_layer_upload(Client, Input, []).
complete_layer_upload(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CompleteLayerUpload">>, Input, Options).
%% @doc Creates a pull through cache rule.
%%
%% A pull through cache rule provides a way to cache images from an external
%% public registry in your Amazon ECR private registry.
create_pull_through_cache_rule(Client, Input)
when is_map(Client), is_map(Input) ->
create_pull_through_cache_rule(Client, Input, []).
create_pull_through_cache_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreatePullThroughCacheRule">>, Input, Options).
%% @doc Creates a repository.
%%
%% For more information, see Amazon ECR repositories in the Amazon Elastic
%% Container Registry User Guide.
create_repository(Client, Input)
when is_map(Client), is_map(Input) ->
create_repository(Client, Input, []).
create_repository(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateRepository">>, Input, Options).
%% @doc Deletes the lifecycle policy associated with the specified
%% repository.
delete_lifecycle_policy(Client, Input)
when is_map(Client), is_map(Input) ->
delete_lifecycle_policy(Client, Input, []).
delete_lifecycle_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteLifecyclePolicy">>, Input, Options).
%% @doc Deletes a pull through cache rule.
delete_pull_through_cache_rule(Client, Input)
when is_map(Client), is_map(Input) ->
delete_pull_through_cache_rule(Client, Input, []).
delete_pull_through_cache_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeletePullThroughCacheRule">>, Input, Options).
%% @doc Deletes the registry permissions policy.
delete_registry_policy(Client, Input)
when is_map(Client), is_map(Input) ->
delete_registry_policy(Client, Input, []).
delete_registry_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteRegistryPolicy">>, Input, Options).
%% @doc Deletes a repository.
%%
%% If the repository contains images, you must either delete all images in
%% the repository or use the `force' option to delete the repository.
delete_repository(Client, Input)
when is_map(Client), is_map(Input) ->
delete_repository(Client, Input, []).
delete_repository(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteRepository">>, Input, Options).
%% @doc Deletes the repository policy associated with the specified
%% repository.
delete_repository_policy(Client, Input)
when is_map(Client), is_map(Input) ->
delete_repository_policy(Client, Input, []).
delete_repository_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteRepositoryPolicy">>, Input, Options).
%% @doc Returns the replication status for a specified image.
describe_image_replication_status(Client, Input)
when is_map(Client), is_map(Input) ->
describe_image_replication_status(Client, Input, []).
describe_image_replication_status(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeImageReplicationStatus">>, Input, Options).
%% @doc Returns the scan findings for the specified image.
describe_image_scan_findings(Client, Input)
when is_map(Client), is_map(Input) ->
describe_image_scan_findings(Client, Input, []).
describe_image_scan_findings(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeImageScanFindings">>, Input, Options).
%% @doc Returns metadata about the images in a repository.
%%
%% Beginning with Docker version 1.9, the Docker client compresses image
%% layers before pushing them to a V2 Docker registry. The output of the
%% `docker images' command shows the uncompressed image size, so it may
%% return a larger image size than the image sizes returned by
%% `DescribeImages'.
describe_images(Client, Input)
when is_map(Client), is_map(Input) ->
describe_images(Client, Input, []).
describe_images(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeImages">>, Input, Options).
%% @doc Returns the pull through cache rules for a registry.
describe_pull_through_cache_rules(Client, Input)
when is_map(Client), is_map(Input) ->
describe_pull_through_cache_rules(Client, Input, []).
describe_pull_through_cache_rules(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribePullThroughCacheRules">>, Input, Options).
%% @doc Describes the settings for a registry.
%%
%% The replication configuration for a repository can be created or updated
%% with the `PutReplicationConfiguration' API action.
describe_registry(Client, Input)
when is_map(Client), is_map(Input) ->
describe_registry(Client, Input, []).
describe_registry(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeRegistry">>, Input, Options).
%% @doc Describes image repositories in a registry.
describe_repositories(Client, Input)
when is_map(Client), is_map(Input) ->
describe_repositories(Client, Input, []).
describe_repositories(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeRepositories">>, Input, Options).
%% @doc Retrieves an authorization token.
%%
%% An authorization token represents your IAM authentication credentials and
%% can be used to access any Amazon ECR registry that your IAM principal has
%% access to. The authorization token is valid for 12 hours.
%%
%% The `authorizationToken' returned is a base64 encoded string that can be
%% decoded and used in a `docker login' command to authenticate to a
%% registry. The CLI offers an `get-login-password' command that simplifies
%% the login process. For more information, see Registry authentication in
%% the Amazon Elastic Container Registry User Guide.
get_authorization_token(Client, Input)
when is_map(Client), is_map(Input) ->
get_authorization_token(Client, Input, []).
get_authorization_token(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetAuthorizationToken">>, Input, Options).
%% @doc Retrieves the pre-signed Amazon S3 download URL corresponding to an
%% image layer.
%%
%% You can only get URLs for image layers that are referenced in an image.
%%
%% When an image is pulled, the GetDownloadUrlForLayer API is called once per
%% image layer that is not already cached.
%%
%% This operation is used by the Amazon ECR proxy and is not generally used
%% by customers for pulling and pushing images. In most cases, you should use
%% the `docker' CLI to pull, tag, and push images.
get_download_url_for_layer(Client, Input)
when is_map(Client), is_map(Input) ->
get_download_url_for_layer(Client, Input, []).
get_download_url_for_layer(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetDownloadUrlForLayer">>, Input, Options).
%% @doc Retrieves the lifecycle policy for the specified repository.
get_lifecycle_policy(Client, Input)
when is_map(Client), is_map(Input) ->
get_lifecycle_policy(Client, Input, []).
get_lifecycle_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetLifecyclePolicy">>, Input, Options).
%% @doc Retrieves the results of the lifecycle policy preview request for the
%% specified repository.
get_lifecycle_policy_preview(Client, Input)
when is_map(Client), is_map(Input) ->
get_lifecycle_policy_preview(Client, Input, []).
get_lifecycle_policy_preview(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetLifecyclePolicyPreview">>, Input, Options).
%% @doc Retrieves the permissions policy for a registry.
get_registry_policy(Client, Input)
when is_map(Client), is_map(Input) ->
get_registry_policy(Client, Input, []).
get_registry_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetRegistryPolicy">>, Input, Options).
%% @doc Retrieves the scanning configuration for a registry.
get_registry_scanning_configuration(Client, Input)
when is_map(Client), is_map(Input) ->
get_registry_scanning_configuration(Client, Input, []).
get_registry_scanning_configuration(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetRegistryScanningConfiguration">>, Input, Options).
%% @doc Retrieves the repository policy for the specified repository.
get_repository_policy(Client, Input)
when is_map(Client), is_map(Input) ->
get_repository_policy(Client, Input, []).
get_repository_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetRepositoryPolicy">>, Input, Options).
%% @doc Notifies Amazon ECR that you intend to upload an image layer.
%%
%% When an image is pushed, the InitiateLayerUpload API is called once per
%% image layer that has not already been uploaded. Whether or not an image
%% layer has been uploaded is determined by the BatchCheckLayerAvailability
%% API action.
%%
%% This operation is used by the Amazon ECR proxy and is not generally used
%% by customers for pulling and pushing images. In most cases, you should use
%% the `docker' CLI to pull, tag, and push images.
initiate_layer_upload(Client, Input)
when is_map(Client), is_map(Input) ->
initiate_layer_upload(Client, Input, []).
initiate_layer_upload(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"InitiateLayerUpload">>, Input, Options).
%% @doc Lists all the image IDs for the specified repository.
%%
%% You can filter images based on whether or not they are tagged by using the
%% `tagStatus' filter and specifying either `TAGGED', `UNTAGGED' or `ANY'.
%% For example, you can filter your results to return only `UNTAGGED' images
%% and then pipe that result to a `BatchDeleteImage' operation to delete
%% them. Or, you can filter your results to return only `TAGGED' images to
%% list all of the tags in your repository.
list_images(Client, Input)
when is_map(Client), is_map(Input) ->
list_images(Client, Input, []).
list_images(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListImages">>, Input, Options).
%% @doc List the tags for an Amazon ECR resource.
list_tags_for_resource(Client, Input)
when is_map(Client), is_map(Input) ->
list_tags_for_resource(Client, Input, []).
list_tags_for_resource(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListTagsForResource">>, Input, Options).
%% @doc Creates or updates the image manifest and tags associated with an
%% image.
%%
%% When an image is pushed and all new image layers have been uploaded, the
%% PutImage API is called once to create or update the image manifest and the
%% tags associated with the image.
%%
%% This operation is used by the Amazon ECR proxy and is not generally used
%% by customers for pulling and pushing images. In most cases, you should use
%% the `docker' CLI to pull, tag, and push images.
put_image(Client, Input)
when is_map(Client), is_map(Input) ->
put_image(Client, Input, []).
put_image(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutImage">>, Input, Options).
%% @doc The `PutImageScanningConfiguration' API is being deprecated, in favor
%% of specifying the image scanning configuration at the registry level.
%%
%% For more information, see `PutRegistryScanningConfiguration'.
%%
%% Updates the image scanning configuration for the specified repository.
put_image_scanning_configuration(Client, Input)
when is_map(Client), is_map(Input) ->
put_image_scanning_configuration(Client, Input, []).
put_image_scanning_configuration(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutImageScanningConfiguration">>, Input, Options).
%% @doc Updates the image tag mutability settings for the specified
%% repository.
%%
%% For more information, see Image tag mutability in the Amazon Elastic
%% Container Registry User Guide.
put_image_tag_mutability(Client, Input)
when is_map(Client), is_map(Input) ->
put_image_tag_mutability(Client, Input, []).
put_image_tag_mutability(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutImageTagMutability">>, Input, Options).
%% @doc Creates or updates the lifecycle policy for the specified repository.
%%
%% For more information, see Lifecycle policy template.
put_lifecycle_policy(Client, Input)
when is_map(Client), is_map(Input) ->
put_lifecycle_policy(Client, Input, []).
put_lifecycle_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutLifecyclePolicy">>, Input, Options).
%% @doc Creates or updates the permissions policy for your registry.
%%
%% A registry policy is used to specify permissions for another Amazon Web
%% Services account and is used when configuring cross-account replication.
%% For more information, see Registry permissions in the Amazon Elastic
%% Container Registry User Guide.
put_registry_policy(Client, Input)
when is_map(Client), is_map(Input) ->
put_registry_policy(Client, Input, []).
put_registry_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutRegistryPolicy">>, Input, Options).
%% @doc Creates or updates the scanning configuration for your private
%% registry.
put_registry_scanning_configuration(Client, Input)
when is_map(Client), is_map(Input) ->
put_registry_scanning_configuration(Client, Input, []).
put_registry_scanning_configuration(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutRegistryScanningConfiguration">>, Input, Options).
%% @doc Creates or updates the replication configuration for a registry.
%%
%% The existing replication configuration for a repository can be retrieved
%% with the `DescribeRegistry' API action. The first time the
%% PutReplicationConfiguration API is called, a service-linked IAM role is
%% created in your account for the replication process. For more information,
%% see Using service-linked roles for Amazon ECR in the Amazon Elastic
%% Container Registry User Guide.
%%
%% When configuring cross-account replication, the destination account must
%% grant the source account permission to replicate. This permission is
%% controlled using a registry permissions policy. For more information, see
%% `PutRegistryPolicy'.
put_replication_configuration(Client, Input)
when is_map(Client), is_map(Input) ->
put_replication_configuration(Client, Input, []).
put_replication_configuration(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutReplicationConfiguration">>, Input, Options).
%% @doc Applies a repository policy to the specified repository to control
%% access permissions.
%%
%% For more information, see Amazon ECR Repository policies in the Amazon
%% Elastic Container Registry User Guide.
set_repository_policy(Client, Input)
when is_map(Client), is_map(Input) ->
set_repository_policy(Client, Input, []).
set_repository_policy(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"SetRepositoryPolicy">>, Input, Options).
%% @doc Starts an image vulnerability scan.
%%
%% An image scan can only be started once per 24 hours on an individual
%% image. This limit includes if an image was scanned on initial push. For
%% more information, see Image scanning in the Amazon Elastic Container
%% Registry User Guide.
start_image_scan(Client, Input)
when is_map(Client), is_map(Input) ->
start_image_scan(Client, Input, []).
start_image_scan(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"StartImageScan">>, Input, Options).
%% @doc Starts a preview of a lifecycle policy for the specified repository.
%%
%% This allows you to see the results before associating the lifecycle policy
%% with the repository.
start_lifecycle_policy_preview(Client, Input)
when is_map(Client), is_map(Input) ->
start_lifecycle_policy_preview(Client, Input, []).
start_lifecycle_policy_preview(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"StartLifecyclePolicyPreview">>, Input, Options).
%% @doc Adds specified tags to a resource with the specified ARN.
%%
%% Existing tags on a resource are not changed if they are not specified in
%% the request parameters.
tag_resource(Client, Input)
when is_map(Client), is_map(Input) ->
tag_resource(Client, Input, []).
tag_resource(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"TagResource">>, Input, Options).
%% @doc Deletes specified tags from a resource.
untag_resource(Client, Input)
when is_map(Client), is_map(Input) ->
untag_resource(Client, Input, []).
untag_resource(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UntagResource">>, Input, Options).
%% @doc Uploads an image layer part to Amazon ECR.
%%
%% When an image is pushed, each new image layer is uploaded in parts. The
%% maximum size of each image layer part can be 20971520 bytes (or about
%% 20MB). The UploadLayerPart API is called once per each new image layer
%% part.
%%
%% This operation is used by the Amazon ECR proxy and is not generally used
%% by customers for pulling and pushing images. In most cases, you should use
%% the `docker' CLI to pull, tag, and push images.
upload_layer_part(Client, Input)
when is_map(Client), is_map(Input) ->
upload_layer_part(Client, Input, []).
upload_layer_part(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UploadLayerPart">>, Input, Options).
%%====================================================================
%% Internal functions
%%====================================================================
-spec request(aws_client:aws_client(), binary(), map(), list()) ->
{ok, Result, {integer(), list(), hackney:client()}} |
{error, Error, {integer(), list(), hackney:client()}} |
{error, term()} when
Result :: map() | undefined,
Error :: map().
request(Client, Action, Input, Options) ->
RequestFun = fun() -> do_request(Client, Action, Input, Options) end,
aws_request:request(RequestFun, Options).
do_request(Client, Action, Input0, Options) ->
Client1 = Client#{service => <<"ecr">>},
Host = build_host(<<"api.ecr">>, Client1),
URL = build_url(Host, Client1),
Headers = [
{<<"Host">>, Host},
{<<"Content-Type">>, <<"application/x-amz-json-1.1">>},
{<<"X-Amz-Target">>, <<"AmazonEC2ContainerRegistry_V20150921.", Action/binary>>}
],
Input = Input0,
Payload = jsx:encode(Input),
SignedHeaders = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload),
Response = hackney:request(post, URL, SignedHeaders, Payload, Options),
handle_response(Response).
handle_response({ok, 200, ResponseHeaders, Client}) ->
case hackney:body(Client) of
{ok, <<>>} ->
{ok, undefined, {200, ResponseHeaders, Client}};
{ok, Body} ->
Result = jsx:decode(Body),
{ok, Result, {200, ResponseHeaders, Client}}
end;
handle_response({ok, StatusCode, ResponseHeaders, Client}) ->
{ok, Body} = hackney:body(Client),
Error = jsx:decode(Body),
{error, Error, {StatusCode, ResponseHeaders, Client}};
handle_response({error, Reason}) ->
{error, Reason}.
build_host(_EndpointPrefix, #{region := <<"local">>, endpoint := Endpoint}) ->
Endpoint;
build_host(_EndpointPrefix, #{region := <<"local">>}) ->
<<"localhost">>;
build_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) ->
aws_util:binary_join([EndpointPrefix, Region, Endpoint], <<".">>).
build_url(Host, Client) ->
Proto = maps:get(proto, Client),
Port = maps:get(port, Client),
aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).