%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc Amazon Elastic Container Registry Public %% %% Amazon Elastic Container Registry Public (Amazon ECR Public) is a managed %% container image registry service. %% %% Amazon ECR provides both public and private registries to host your %% container images. You can use the Docker CLI or your 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 public repositories with this API. For %% information about the Amazon ECR API for private repositories, see Amazon %% Elastic Container Registry API Reference. -module(aws_ecr_public). -export([batch_check_layer_availability/2, batch_check_layer_availability/3, batch_delete_image/2, batch_delete_image/3, complete_layer_upload/2, complete_layer_upload/3, create_repository/2, create_repository/3, delete_repository/2, delete_repository/3, delete_repository_policy/2, delete_repository_policy/3, describe_image_tags/2, describe_image_tags/3, describe_images/2, describe_images/3, describe_registries/2, describe_registries/3, describe_repositories/2, describe_repositories/3, get_authorization_token/2, get_authorization_token/3, get_registry_catalog_data/2, get_registry_catalog_data/3, get_repository_catalog_data/2, get_repository_catalog_data/3, get_repository_policy/2, get_repository_policy/3, initiate_layer_upload/2, initiate_layer_upload/3, list_tags_for_resource/2, list_tags_for_resource/3, put_image/2, put_image/3, put_registry_catalog_data/2, put_registry_catalog_data/3, put_repository_catalog_data/2, put_repository_catalog_data/3, set_repository_policy/2, set_repository_policy/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 that are within a %% repository in a public registry. %% %% 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 that are within a repository in a %% public registry. %% %% 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 %% digest of the image 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 Informs Amazon ECR that the image layer upload is complete for a %% specified public 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 for %% each new image layer to verify that the upload is complete. %% %% 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 repository in a public registry. %% %% 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 a repository in a public registry. %% %% If the repository contains images, you must either manually delete all %% images in the repository or use the `force' option. This option %% deletes all images on your behalf before deleting 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 that's 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 image tag details for a repository in a public registry. describe_image_tags(Client, Input) when is_map(Client), is_map(Input) -> describe_image_tags(Client, Input, []). describe_image_tags(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeImageTags">>, Input, Options). %% @doc Returns metadata that's related to the images in a repository in %% a public registry. %% %% 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. Therefore, %% it might return a larger image size than the image sizes that are 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 details for a public registry. describe_registries(Client, Input) when is_map(Client), is_map(Input) -> describe_registries(Client, Input, []). describe_registries(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeRegistries">>, Input, Options). %% @doc Describes repositories that are in a public 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. You %% can use it to access any Amazon ECR registry that your IAM principal has %% access to. The authorization token is valid for 12 hours. This API %% requires the `ecr-public:GetAuthorizationToken' and %% `sts:GetServiceBearerToken' permissions. 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 catalog metadata for a public registry. get_registry_catalog_data(Client, Input) when is_map(Client), is_map(Input) -> get_registry_catalog_data(Client, Input, []). get_registry_catalog_data(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetRegistryCatalogData">>, Input, Options). %% @doc Retrieve catalog metadata for a repository in a public registry. %% %% This metadata is displayed publicly in the Amazon ECR Public Gallery. get_repository_catalog_data(Client, Input) when is_map(Client), is_map(Input) -> get_repository_catalog_data(Client, Input, []). get_repository_catalog_data(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetRepositoryCatalogData">>, 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 for %% each image layer that hasn't already been uploaded. Whether an image %% layer uploads 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 List the tags for an Amazon ECR Public 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 that are 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 that are 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 Create or update the catalog data for a public registry. put_registry_catalog_data(Client, Input) when is_map(Client), is_map(Input) -> put_registry_catalog_data(Client, Input, []). put_registry_catalog_data(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutRegistryCatalogData">>, Input, Options). %% @doc Creates or updates the catalog data for a repository in a public %% registry. put_repository_catalog_data(Client, Input) when is_map(Client), is_map(Input) -> put_repository_catalog_data(Client, Input, []). put_repository_catalog_data(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutRepositoryCatalogData">>, Input, Options). %% @doc Applies a repository policy to the specified public 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 Associates the specified tags to a resource with the specified %% `resourceArn'. %% %% If existing tags on a resource aren't specified in the request %% parameters, they aren't changed. When a resource is deleted, the tags %% associated with that resource are also deleted. 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 (about 20MB). %% The UploadLayerPart API is called once for 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-public">>}, Host = build_host(<<"api.ecr-public">>, Client1), URL = build_url(Host, Client1), Headers = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, <<"SpencerFrontendService.", 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, <<"/">>], <<"">>).