%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc Amazon FSx is a fully managed service that makes it easy for storage %% and application administrators to launch and use shared file storage. -module(aws_fsx). -export([associate_file_system_aliases/2, associate_file_system_aliases/3, cancel_data_repository_task/2, cancel_data_repository_task/3, copy_backup/2, copy_backup/3, create_backup/2, create_backup/3, create_data_repository_task/2, create_data_repository_task/3, create_file_system/2, create_file_system/3, create_file_system_from_backup/2, create_file_system_from_backup/3, create_storage_virtual_machine/2, create_storage_virtual_machine/3, create_volume/2, create_volume/3, create_volume_from_backup/2, create_volume_from_backup/3, delete_backup/2, delete_backup/3, delete_file_system/2, delete_file_system/3, delete_storage_virtual_machine/2, delete_storage_virtual_machine/3, delete_volume/2, delete_volume/3, describe_backups/2, describe_backups/3, describe_data_repository_tasks/2, describe_data_repository_tasks/3, describe_file_system_aliases/2, describe_file_system_aliases/3, describe_file_systems/2, describe_file_systems/3, describe_storage_virtual_machines/2, describe_storage_virtual_machines/3, describe_volumes/2, describe_volumes/3, disassociate_file_system_aliases/2, disassociate_file_system_aliases/3, list_tags_for_resource/2, list_tags_for_resource/3, tag_resource/2, tag_resource/3, untag_resource/2, untag_resource/3, update_file_system/2, update_file_system/3, update_storage_virtual_machine/2, update_storage_virtual_machine/3, update_volume/2, update_volume/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Use this action to associate one or more Domain Name Server (DNS) %% aliases with an existing Amazon FSx for Windows File Server file system. %% %% A file system can have a maximum of 50 DNS aliases associated with it at %% any one time. If you try to associate a DNS alias that is already %% associated with the file system, FSx takes no action on that alias in the %% request. For more information, see Working with DNS Aliases and %% Walkthrough 5: Using DNS aliases to access your file system, including %% additional steps you must take to be able to access your file system using %% a DNS alias. %% %% The system response shows the DNS aliases that Amazon FSx is attempting to %% associate with the file system. Use the API operation to monitor the %% status of the aliases Amazon FSx is associating with the file system. associate_file_system_aliases(Client, Input) when is_map(Client), is_map(Input) -> associate_file_system_aliases(Client, Input, []). associate_file_system_aliases(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AssociateFileSystemAliases">>, Input, Options). %% @doc Cancels an existing Amazon FSx for Lustre data repository task if %% that task is in either the `PENDING' or `EXECUTING' state. %% %% When you cancel a task, Amazon FSx does the following. %% %% cancel_data_repository_task(Client, Input) when is_map(Client), is_map(Input) -> cancel_data_repository_task(Client, Input, []). cancel_data_repository_task(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CancelDataRepositoryTask">>, Input, Options). %% @doc Copies an existing backup within the same Amazon Web Services account %% to another Amazon Web Services Region (cross-Region copy) or within the %% same Amazon Web Services Region (in-Region copy). %% %% You can have up to five backup copy requests in progress to a single %% destination Region per account. %% %% You can use cross-Region backup copies for cross-region disaster recovery. %% You periodically take backups and copy them to another Region so that in %% the event of a disaster in the primary Region, you can restore from backup %% and recover availability quickly in the other Region. You can make %% cross-Region copies only within your Amazon Web Services partition. %% %% You can also use backup copies to clone your file data set to another %% Region or within the same Region. %% %% You can use the `SourceRegion' parameter to specify the Amazon Web %% Services Region from which the backup will be copied. For example, if you %% make the call from the `us-west-1' Region and want to copy a backup from %% the `us-east-2' Region, you specify `us-east-2' in the `SourceRegion' %% parameter to make a cross-Region copy. If you don't specify a Region, the %% backup copy is created in the same Region where the request is sent from %% (in-Region copy). %% %% For more information on creating backup copies, see Copying backups in the %% Amazon FSx for Windows User Guide and Copying backups in the Amazon FSx %% for Lustre User Guide. copy_backup(Client, Input) when is_map(Client), is_map(Input) -> copy_backup(Client, Input, []). copy_backup(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CopyBackup">>, Input, Options). %% @doc Creates a backup of an existing Amazon FSx for Windows File Server or %% Amazon FSx for Lustre file system, or of an Amazon FSx for NetApp ONTAP %% volume. %% %% Creating regular backups is a best practice, enabling you to restore a %% file system or volume from a backup if an issue arises with the original %% file system or volume. %% %% For Amazon FSx for Lustre file systems, you can create a backup only for %% file systems with the following configuration: %% %% For more information about backups, see the following: %% %% If a backup with the specified client request token exists, %% and the parameters match, this operation returns the description of the %% existing backup. If a backup specified client request token exists, and %% the parameters don't match, this operation returns %% `IncompatibleParameterError'. If a backup with the specified client %% request token doesn't exist, `CreateBackup' does the following: %% %% By using the idempotent operation, you can retry a %% `CreateBackup' operation without the risk of creating an extra backup. %% This approach can be useful when an initial call fails in a way that makes %% it unclear whether a backup was created. If you use the same client %% request token and the initial call created a backup, the operation returns %% a successful result because all the parameters are the same. %% %% The `CreateBackup' operation returns while the backup's lifecycle state is %% still `CREATING'. You can check the backup creation status by calling the %% `DescribeBackups' operation, which returns the backup state along with %% other information. create_backup(Client, Input) when is_map(Client), is_map(Input) -> create_backup(Client, Input, []). create_backup(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateBackup">>, Input, Options). %% @doc Creates an Amazon FSx for Lustre data repository task. %% %% You use data repository tasks to perform bulk operations between your %% Amazon FSx file system and its linked data repository. An example of a %% data repository task is exporting any data and metadata changes, including %% POSIX metadata, to files, directories, and symbolic links (symlinks) from %% your FSx file system to its linked data repository. A %% `CreateDataRepositoryTask' operation will fail if a data repository is not %% linked to the FSx file system. To learn more about data repository tasks, %% see Data Repository Tasks. To learn more about linking a data repository %% to your file system, see Linking your file system to an S3 bucket. create_data_repository_task(Client, Input) when is_map(Client), is_map(Input) -> create_data_repository_task(Client, Input, []). create_data_repository_task(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateDataRepositoryTask">>, Input, Options). %% @doc Creates a new, empty Amazon FSx file system. %% %% If a file system with the specified client request token exists and the %% parameters match, `CreateFileSystem' returns the description of the %% existing file system. If a file system specified client request token %% exists and the parameters don't match, this call returns %% `IncompatibleParameterError'. If a file system with the specified client %% request token doesn't exist, `CreateFileSystem' does the following: %% %% This operation requires a client request token in the request %% that Amazon FSx uses to ensure idempotent creation. This means that %% calling the operation multiple times with the same client request token %% has no effect. By using the idempotent operation, you can retry a %% `CreateFileSystem' operation without the risk of creating an extra file %% system. This approach can be useful when an initial call fails in a way %% that makes it unclear whether a file system was created. Examples are if a %% transport level timeout occurred, or your connection was reset. If you use %% the same client request token and the initial call created a file system, %% the client receives success as long as the parameters are the same. %% %% The `CreateFileSystem' call returns while the file system's lifecycle %% state is still `CREATING'. You can check the file-system creation status %% by calling the `DescribeFileSystems' operation, which returns the file %% system state along with other information. create_file_system(Client, Input) when is_map(Client), is_map(Input) -> create_file_system(Client, Input, []). create_file_system(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateFileSystem">>, Input, Options). %% @doc Creates a new Amazon FSx for Lustre or Amazon FSx for Windows File %% Server file system from an existing Amazon FSx backup. %% %% If a file system with the specified client request token exists and the %% parameters match, this operation returns the description of the file %% system. If a client request token specified by the file system exists and %% the parameters don't match, this call returns %% `IncompatibleParameterError'. If a file system with the specified client %% request token doesn't exist, this operation does the following: %% %% Parameters like Active Directory, default share name, %% automatic backup, and backup settings default to the parameters of the %% file system that was backed up, unless overridden. You can explicitly %% supply other settings. %% %% By using the idempotent operation, you can retry a %% `CreateFileSystemFromBackup' call without the risk of creating an extra %% file system. This approach can be useful when an initial call fails in a %% way that makes it unclear whether a file system was created. Examples are %% if a transport level timeout occurred, or your connection was reset. If %% you use the same client request token and the initial call created a file %% system, the client receives success as long as the parameters are the %% same. %% %% The `CreateFileSystemFromBackup' call returns while the file system's %% lifecycle state is still `CREATING'. You can check the file-system %% creation status by calling the `DescribeFileSystems' operation, which %% returns the file system state along with other information. create_file_system_from_backup(Client, Input) when is_map(Client), is_map(Input) -> create_file_system_from_backup(Client, Input, []). create_file_system_from_backup(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateFileSystemFromBackup">>, Input, Options). %% @doc Creates a storage virtual machine (SVM) for an Amazon FSx for ONTAP %% file system. create_storage_virtual_machine(Client, Input) when is_map(Client), is_map(Input) -> create_storage_virtual_machine(Client, Input, []). create_storage_virtual_machine(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateStorageVirtualMachine">>, Input, Options). %% @doc Creates an Amazon FSx for NetApp ONTAP storage volume. create_volume(Client, Input) when is_map(Client), is_map(Input) -> create_volume(Client, Input, []). create_volume(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateVolume">>, Input, Options). %% @doc Creates a new Amazon FSx for NetApp ONTAP volume from an existing %% Amazon FSx volume backup. create_volume_from_backup(Client, Input) when is_map(Client), is_map(Input) -> create_volume_from_backup(Client, Input, []). create_volume_from_backup(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateVolumeFromBackup">>, Input, Options). %% @doc Deletes an Amazon FSx backup, deleting its contents. %% %% After deletion, the backup no longer exists, and its data is gone. %% %% The `DeleteBackup' call returns instantly. The backup will not show up in %% later `DescribeBackups' calls. %% %% The data in a deleted backup is also deleted and can't be recovered by any %% means. delete_backup(Client, Input) when is_map(Client), is_map(Input) -> delete_backup(Client, Input, []). delete_backup(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteBackup">>, Input, Options). %% @doc Deletes a file system, deleting its contents. %% %% After deletion, the file system no longer exists, and its data is gone. %% Any existing automatic backups will also be deleted. %% %% To delete an Amazon FSx for NetApp ONTAP file system, first delete all the %% volumes and SVMs on the file system. Then provide a `FileSystemId' value %% to the `DeleFileSystem' operation. %% %% By default, when you delete an Amazon FSx for Windows File Server file %% system, a final backup is created upon deletion. This final backup is not %% subject to the file system's retention policy, and must be manually %% deleted. %% %% The `DeleteFileSystem' action returns while the file system has the %% `DELETING' status. You can check the file system deletion status by %% calling the `DescribeFileSystems' action, which returns a list of file %% systems in your account. If you pass the file system ID for a deleted file %% system, the `DescribeFileSystems' returns a `FileSystemNotFound' error. %% %% Deleting an Amazon FSx for Lustre file system will fail with a 400 %% BadRequest if a data repository task is in a `PENDING' or `EXECUTING' %% state. %% %% The data in a deleted file system is also deleted and can't be recovered %% by any means. delete_file_system(Client, Input) when is_map(Client), is_map(Input) -> delete_file_system(Client, Input, []). delete_file_system(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteFileSystem">>, Input, Options). %% @doc Deletes an existing Amazon FSx for ONTAP storage virtual machine %% (SVM). %% %% Prior to deleting an SVM, you must delete all non-root volumes in the SVM, %% otherwise the operation will fail. delete_storage_virtual_machine(Client, Input) when is_map(Client), is_map(Input) -> delete_storage_virtual_machine(Client, Input, []). delete_storage_virtual_machine(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteStorageVirtualMachine">>, Input, Options). %% @doc Deletes an Amazon FSx for NetApp ONTAP volume. %% %% When deleting a volume, you have the option of creating a final backup. If %% you create a final backup, you have the option to apply Tags to the %% backup. You need to have `fsx:TagResource' permission in order to apply %% tags to the backup. delete_volume(Client, Input) when is_map(Client), is_map(Input) -> delete_volume(Client, Input, []). delete_volume(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteVolume">>, Input, Options). %% @doc Returns the description of specific Amazon FSx backups, if a %% `BackupIds' value is provided for that backup. %% %% Otherwise, it returns all backups owned by your Amazon Web Services %% account in the Amazon Web Services Region of the endpoint that you're %% calling. %% %% When retrieving all backups, you can optionally specify the `MaxResults' %% parameter to limit the number of backups in a response. If more backups %% remain, Amazon FSx returns a `NextToken' value in the response. In this %% case, send a later request with the `NextToken' request parameter set to %% the value of `NextToken' from the last response. %% %% This action is used in an iterative process to retrieve a list of your %% backups. `DescribeBackups' is called first without a `NextToken'value. %% Then the action continues to be called with the `NextToken' parameter set %% to the value of the last `NextToken' value until a response has no %% `NextToken'. %% %% When using this action, keep the following in mind: %% %% describe_backups(Client, Input) when is_map(Client), is_map(Input) -> describe_backups(Client, Input, []). describe_backups(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeBackups">>, Input, Options). %% @doc Returns the description of specific Amazon FSx for Lustre data %% repository tasks, if one or more `TaskIds' values are provided in the %% request, or if filters are used in the request. %% %% You can use filters to narrow the response to include just tasks for %% specific file systems, or tasks in a specific lifecycle state. Otherwise, %% it returns all data repository tasks owned by your Amazon Web Services %% account in the Amazon Web Services Region of the endpoint that you're %% calling. %% %% When retrieving all tasks, you can paginate the response by using the %% optional `MaxResults' parameter to limit the number of tasks returned in a %% response. If more tasks remain, Amazon FSx returns a `NextToken' value in %% the response. In this case, send a later request with the `NextToken' %% request parameter set to the value of `NextToken' from the last response. describe_data_repository_tasks(Client, Input) when is_map(Client), is_map(Input) -> describe_data_repository_tasks(Client, Input, []). describe_data_repository_tasks(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeDataRepositoryTasks">>, Input, Options). %% @doc Returns the DNS aliases that are associated with the specified Amazon %% FSx for Windows File Server file system. %% %% A history of all DNS aliases that have been associated with and %% disassociated from the file system is available in the list of %% `AdministrativeAction' provided in the `DescribeFileSystems' operation %% response. describe_file_system_aliases(Client, Input) when is_map(Client), is_map(Input) -> describe_file_system_aliases(Client, Input, []). describe_file_system_aliases(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeFileSystemAliases">>, Input, Options). %% @doc Returns the description of specific Amazon FSx file systems, if a %% `FileSystemIds' value is provided for that file system. %% %% Otherwise, it returns descriptions of all file systems owned by your %% Amazon Web Services account in the Amazon Web Services Region of the %% endpoint that you're calling. %% %% When retrieving all file system descriptions, you can optionally specify %% the `MaxResults' parameter to limit the number of descriptions in a %% response. If more file system descriptions remain, Amazon FSx returns a %% `NextToken' value in the response. In this case, send a later request with %% the `NextToken' request parameter set to the value of `NextToken' from the %% last response. %% %% This action is used in an iterative process to retrieve a list of your %% file system descriptions. `DescribeFileSystems' is called first without a %% `NextToken'value. Then the action continues to be called with the %% `NextToken' parameter set to the value of the last `NextToken' value until %% a response has no `NextToken'. %% %% When using this action, keep the following in mind: %% %% describe_file_systems(Client, Input) when is_map(Client), is_map(Input) -> describe_file_systems(Client, Input, []). describe_file_systems(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeFileSystems">>, Input, Options). %% @doc Describes one or more Amazon FSx for NetApp ONTAP storage virtual %% machines (SVMs). describe_storage_virtual_machines(Client, Input) when is_map(Client), is_map(Input) -> describe_storage_virtual_machines(Client, Input, []). describe_storage_virtual_machines(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeStorageVirtualMachines">>, Input, Options). %% @doc Describes one or more Amazon FSx for NetApp ONTAP volumes. describe_volumes(Client, Input) when is_map(Client), is_map(Input) -> describe_volumes(Client, Input, []). describe_volumes(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeVolumes">>, Input, Options). %% @doc Use this action to disassociate, or remove, one or more Domain Name %% Service (DNS) aliases from an Amazon FSx for Windows File Server file %% system. %% %% If you attempt to disassociate a DNS alias that is not associated with the %% file system, Amazon FSx responds with a 400 Bad Request. For more %% information, see Working with DNS Aliases. %% %% The system generated response showing the DNS aliases that Amazon FSx is %% attempting to disassociate from the file system. Use the API operation to %% monitor the status of the aliases Amazon FSx is disassociating with the %% file system. disassociate_file_system_aliases(Client, Input) when is_map(Client), is_map(Input) -> disassociate_file_system_aliases(Client, Input, []). disassociate_file_system_aliases(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DisassociateFileSystemAliases">>, Input, Options). %% @doc Lists tags for an Amazon FSx file systems and backups in the case of %% Amazon FSx for Windows File Server. %% %% When retrieving all tags, you can optionally specify the `MaxResults' %% parameter to limit the number of tags in a response. If more tags remain, %% Amazon FSx returns a `NextToken' value in the response. In this case, send %% a later request with the `NextToken' request parameter set to the value of %% `NextToken' from the last response. %% %% This action is used in an iterative process to retrieve a list of your %% tags. `ListTagsForResource' is called first without a `NextToken'value. %% Then the action continues to be called with the `NextToken' parameter set %% to the value of the last `NextToken' value until a response has no %% `NextToken'. %% %% When using this action, keep the following in mind: %% %% 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 Tags an Amazon FSx resource. 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 This action removes a tag from an Amazon FSx 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 Use this operation to update the configuration of an existing Amazon %% FSx file system. %% %% You can update multiple properties in a single request. %% %% For Amazon FSx for Windows File Server file systems, you can update the %% following properties: %% %% For Amazon FSx for Lustre file systems, you can update the %% following properties: %% %% For Amazon FSx for NetApp ONTAP file systems, you can update %% the following properties: %% %% update_file_system(Client, Input) when is_map(Client), is_map(Input) -> update_file_system(Client, Input, []). update_file_system(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateFileSystem">>, Input, Options). %% @doc Updates an Amazon FSx for ONTAP storage virtual machine (SVM). update_storage_virtual_machine(Client, Input) when is_map(Client), is_map(Input) -> update_storage_virtual_machine(Client, Input, []). update_storage_virtual_machine(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateStorageVirtualMachine">>, Input, Options). %% @doc Updates an Amazon FSx for NetApp ONTAP volume's configuration. update_volume(Client, Input) when is_map(Client), is_map(Input) -> update_volume(Client, Input, []). update_volume(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateVolume">>, 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 => <<"fsx">>}, Host = build_host(<<"fsx">>, Client1), URL = build_url(Host, Client1), Headers = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, <<"AWSSimbaAPIService_v20180301.", 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, <<"/">>], <<"">>).