%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc Parallel Computing Service (PCS) is a managed service that makes it %% easier for you to run and scale your high performance computing (HPC) %% workloads, and build scientific and engineering models on Amazon Web %% Services using Slurm. %% %% For more information, see the Parallel Computing Service User Guide: %% https://docs.aws.amazon.com/pcs/latest/userguide. %% %% This reference describes the actions and data types of the service %% management API. You can use the Amazon Web Services SDKs to call the API %% actions in software, or use the Command Line Interface (CLI) to call the %% API actions manually. These API actions manage the service through an %% Amazon Web Services account. %% %% The API actions operate on PCS resources. A resource is an entity in %% Amazon Web Services that you can work with. Amazon Web Services services %% create resources when you use the features of the service. Examples of PCS %% resources include clusters, compute node groups, and queues. For more %% information about resources in Amazon Web Services, see Resource: %% https://docs.aws.amazon.com/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html#term-resource %% in the Resource Explorer User Guide. %% %% An PCS compute node is an Amazon EC2 instance. You don't launch %% compute nodes directly. PCS uses configuration information that you %% provide to launch compute nodes in your Amazon Web Services account. You %% receive billing charges for your running compute nodes. PCS automatically %% terminates your compute nodes when you delete the PCS resources related to %% those compute nodes. -module(aws_pcs). -export([create_cluster/2, create_cluster/3, create_compute_node_group/2, create_compute_node_group/3, create_queue/2, create_queue/3, delete_cluster/2, delete_cluster/3, delete_compute_node_group/2, delete_compute_node_group/3, delete_queue/2, delete_queue/3, get_cluster/2, get_cluster/3, get_compute_node_group/2, get_compute_node_group/3, get_queue/2, get_queue/3, list_clusters/2, list_clusters/3, list_compute_node_groups/2, list_compute_node_groups/3, list_queues/2, list_queues/3, list_tags_for_resource/2, list_tags_for_resource/3, register_compute_node_group_instance/2, register_compute_node_group_instance/3, tag_resource/2, tag_resource/3, untag_resource/2, untag_resource/3, update_cluster/2, update_cluster/3, update_compute_node_group/2, update_compute_node_group/3, update_queue/2, update_queue/3]). -include_lib("hackney/include/hackney_lib.hrl"). %% Example: %% get_queue_response() :: #{ %% <<"queue">> => queue() %% } -type get_queue_response() :: #{binary() => any()}. %% Example: %% tag_resource_request() :: #{ %% <<"resourceArn">> := string(), %% <<"tags">> := map() %% } -type tag_resource_request() :: #{binary() => any()}. %% Example: %% list_queues_request() :: #{ %% <<"clusterIdentifier">> := string(), %% <<"maxResults">> => integer(), %% <<"nextToken">> => [string()] %% } -type list_queues_request() :: #{binary() => any()}. %% Example: %% delete_compute_node_group_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"computeNodeGroupIdentifier">> := string() %% } -type delete_compute_node_group_request() :: #{binary() => any()}. %% Example: %% slurm_custom_setting() :: #{ %% <<"parameterName">> => [string()], %% <<"parameterValue">> => [string()] %% } -type slurm_custom_setting() :: #{binary() => any()}. %% Example: %% accounting() :: #{ %% <<"defaultPurgeTimeInDays">> => [integer()], %% <<"mode">> => list(any()) %% } -type accounting() :: #{binary() => any()}. %% Example: %% cgroup_custom_setting() :: #{ %% <<"parameterName">> => [string()], %% <<"parameterValue">> => [string()] %% } -type cgroup_custom_setting() :: #{binary() => any()}. %% Example: %% slurm_rest_request() :: #{ %% <<"mode">> => list(any()) %% } -type slurm_rest_request() :: #{binary() => any()}. %% Example: %% untag_resource_response() :: #{ %% } -type untag_resource_response() :: #{binary() => any()}. %% Example: %% create_cluster_response() :: #{ %% <<"cluster">> => cluster() %% } -type create_cluster_response() :: #{binary() => any()}. %% Example: %% update_cluster_slurm_configuration_request() :: #{ %% <<"accounting">> => update_accounting_request(), %% <<"cgroupCustomSettings">> => list(cgroup_custom_setting()), %% <<"scaleDownIdleTimeInSeconds">> => [integer()], %% <<"slurmCustomSettings">> => list(slurm_custom_setting()), %% <<"slurmRest">> => update_slurm_rest_request(), %% <<"slurmdbdCustomSettings">> => list(slurmdbd_custom_setting()) %% } -type update_cluster_slurm_configuration_request() :: #{binary() => any()}. %% Example: %% compute_node_group_configuration() :: #{ %% <<"computeNodeGroupId">> => [string()] %% } -type compute_node_group_configuration() :: #{binary() => any()}. %% Example: %% networking() :: #{ %% <<"networkType">> => list(any()), %% <<"securityGroupIds">> => list(string()), %% <<"subnetIds">> => list(string()) %% } -type networking() :: #{binary() => any()}. %% Example: %% update_accounting_request() :: #{ %% <<"defaultPurgeTimeInDays">> => [integer()], %% <<"mode">> => list(any()) %% } -type update_accounting_request() :: #{binary() => any()}. %% Example: %% get_cluster_response() :: #{ %% <<"cluster">> => cluster() %% } -type get_cluster_response() :: #{binary() => any()}. %% Example: %% queue() :: #{ %% <<"arn">> => [string()], %% <<"clusterId">> => [string()], %% <<"computeNodeGroupConfigurations">> => list(compute_node_group_configuration()), %% <<"createdAt">> => [non_neg_integer()], %% <<"errorInfo">> => list(error_info()), %% <<"id">> => [string()], %% <<"modifiedAt">> => [non_neg_integer()], %% <<"name">> => string(), %% <<"slurmConfiguration">> => queue_slurm_configuration(), %% <<"status">> => list(any()) %% } -type queue() :: #{binary() => any()}. %% Example: %% error_info() :: #{ %% <<"code">> => [string()], %% <<"message">> => [string()] %% } -type error_info() :: #{binary() => any()}. %% Example: %% untag_resource_request() :: #{ %% <<"tagKeys">> := list(string()) %% } -type untag_resource_request() :: #{binary() => any()}. %% Example: %% update_queue_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"computeNodeGroupConfigurations">> => list(compute_node_group_configuration()), %% <<"queueIdentifier">> := string(), %% <<"slurmConfiguration">> => update_queue_slurm_configuration_request() %% } -type update_queue_request() :: #{binary() => any()}. %% Example: %% cluster_slurm_configuration() :: #{ %% <<"accounting">> => accounting(), %% <<"authKey">> => slurm_auth_key(), %% <<"cgroupCustomSettings">> => list(cgroup_custom_setting()), %% <<"jwtAuth">> => jwt_auth(), %% <<"scaleDownIdleTimeInSeconds">> => [integer()], %% <<"slurmCustomSettings">> => list(slurm_custom_setting()), %% <<"slurmRest">> => slurm_rest(), %% <<"slurmdbdCustomSettings">> => list(slurmdbd_custom_setting()) %% } -type cluster_slurm_configuration() :: #{binary() => any()}. %% Example: %% queue_slurm_configuration() :: #{ %% <<"slurmCustomSettings">> => list(slurm_custom_setting()) %% } -type queue_slurm_configuration() :: #{binary() => any()}. %% Example: %% update_cluster_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"slurmConfiguration">> => update_cluster_slurm_configuration_request() %% } -type update_cluster_request() :: #{binary() => any()}. %% Example: %% get_compute_node_group_response() :: #{ %% <<"computeNodeGroup">> => compute_node_group() %% } -type get_compute_node_group_response() :: #{binary() => any()}. %% Example: %% queue_summary() :: #{ %% <<"arn">> => [string()], %% <<"clusterId">> => [string()], %% <<"createdAt">> => [non_neg_integer()], %% <<"id">> => [string()], %% <<"modifiedAt">> => [non_neg_integer()], %% <<"name">> => string(), %% <<"status">> => list(any()) %% } -type queue_summary() :: #{binary() => any()}. %% Example: %% cluster_summary() :: #{ %% <<"arn">> => [string()], %% <<"createdAt">> => [non_neg_integer()], %% <<"id">> => [string()], %% <<"modifiedAt">> => [non_neg_integer()], %% <<"name">> => [string()], %% <<"status">> => list(any()) %% } -type cluster_summary() :: #{binary() => any()}. %% Example: %% scheduler_request() :: #{ %% <<"type">> => list(any()), %% <<"version">> => [string()] %% } -type scheduler_request() :: #{binary() => any()}. %% Example: %% compute_node_group() :: #{ %% <<"amiId">> => string(), %% <<"arn">> => [string()], %% <<"clusterId">> => [string()], %% <<"createdAt">> => [non_neg_integer()], %% <<"customLaunchTemplate">> => custom_launch_template(), %% <<"errorInfo">> => list(error_info()), %% <<"iamInstanceProfileArn">> => string(), %% <<"id">> => [string()], %% <<"instanceConfigs">> => list(instance_config()), %% <<"modifiedAt">> => [non_neg_integer()], %% <<"name">> => string(), %% <<"purchaseOption">> => list(any()), %% <<"scalingConfiguration">> => scaling_configuration(), %% <<"slurmConfiguration">> => compute_node_group_slurm_configuration(), %% <<"spotOptions">> => spot_options(), %% <<"status">> => list(any()), %% <<"subnetIds">> => list(string()) %% } -type compute_node_group() :: #{binary() => any()}. %% Example: %% create_cluster_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterName">> := string(), %% <<"networking">> := networking_request(), %% <<"scheduler">> := scheduler_request(), %% <<"size">> := list(any()), %% <<"slurmConfiguration">> => cluster_slurm_configuration_request(), %% <<"tags">> => map() %% } -type create_cluster_request() :: #{binary() => any()}. %% Example: %% register_compute_node_group_instance_response() :: #{ %% <<"endpoints">> => list(endpoint()), %% <<"nodeID">> => [string()], %% <<"sharedSecret">> => string() %% } -type register_compute_node_group_instance_response() :: #{binary() => any()}. %% Example: %% conflict_exception() :: #{ %% <<"message">> => [string()], %% <<"resourceId">> => [string()], %% <<"resourceType">> => [string()] %% } -type conflict_exception() :: #{binary() => any()}. %% Example: %% resource_not_found_exception() :: #{ %% <<"message">> => [string()], %% <<"resourceId">> => [string()], %% <<"resourceType">> => [string()] %% } -type resource_not_found_exception() :: #{binary() => any()}. %% Example: %% get_queue_request() :: #{ %% <<"clusterIdentifier">> := string(), %% <<"queueIdentifier">> := string() %% } -type get_queue_request() :: #{binary() => any()}. %% Example: %% cluster() :: #{ %% <<"arn">> => [string()], %% <<"createdAt">> => [non_neg_integer()], %% <<"endpoints">> => list(endpoint()), %% <<"errorInfo">> => list(error_info()), %% <<"id">> => [string()], %% <<"modifiedAt">> => [non_neg_integer()], %% <<"name">> => [string()], %% <<"networking">> => networking(), %% <<"scheduler">> => scheduler(), %% <<"size">> => list(any()), %% <<"slurmConfiguration">> => cluster_slurm_configuration(), %% <<"status">> => list(any()) %% } -type cluster() :: #{binary() => any()}. %% Example: %% service_quota_exceeded_exception() :: #{ %% <<"message">> => [string()], %% <<"quotaCode">> => [string()], %% <<"resourceId">> => [string()], %% <<"resourceType">> => [string()], %% <<"serviceCode">> => [string()] %% } -type service_quota_exceeded_exception() :: #{binary() => any()}. %% Example: %% scaling_configuration_request() :: #{ %% <<"maxInstanceCount">> => [integer()], %% <<"minInstanceCount">> => [integer()] %% } -type scaling_configuration_request() :: #{binary() => any()}. %% Example: %% update_compute_node_group_slurm_configuration_request() :: #{ %% <<"slurmCustomSettings">> => list(slurm_custom_setting()) %% } -type update_compute_node_group_slurm_configuration_request() :: #{binary() => any()}. %% Example: %% jwt_auth() :: #{ %% <<"jwtKey">> => jwt_key() %% } -type jwt_auth() :: #{binary() => any()}. %% Example: %% register_compute_node_group_instance_request() :: #{ %% <<"bootstrapId">> := string(), %% <<"clusterIdentifier">> := string() %% } -type register_compute_node_group_instance_request() :: #{binary() => any()}. %% Example: %% list_compute_node_groups_response() :: #{ %% <<"computeNodeGroups">> => list(compute_node_group_summary()), %% <<"nextToken">> => [string()] %% } -type list_compute_node_groups_response() :: #{binary() => any()}. %% Example: %% get_compute_node_group_request() :: #{ %% <<"clusterIdentifier">> := string(), %% <<"computeNodeGroupIdentifier">> := string() %% } -type get_compute_node_group_request() :: #{binary() => any()}. %% Example: %% list_tags_for_resource_response() :: #{ %% <<"tags">> => map() %% } -type list_tags_for_resource_response() :: #{binary() => any()}. %% Example: %% update_compute_node_group_request() :: #{ %% <<"amiId">> => string(), %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"computeNodeGroupIdentifier">> := string(), %% <<"customLaunchTemplate">> => custom_launch_template(), %% <<"iamInstanceProfileArn">> => string(), %% <<"purchaseOption">> => list(any()), %% <<"scalingConfiguration">> => scaling_configuration_request(), %% <<"slurmConfiguration">> => update_compute_node_group_slurm_configuration_request(), %% <<"spotOptions">> => spot_options(), %% <<"subnetIds">> => list([string()]()) %% } -type update_compute_node_group_request() :: #{binary() => any()}. %% Example: %% compute_node_group_slurm_configuration_request() :: #{ %% <<"slurmCustomSettings">> => list(slurm_custom_setting()) %% } -type compute_node_group_slurm_configuration_request() :: #{binary() => any()}. %% Example: %% spot_options() :: #{ %% <<"allocationStrategy">> => list(any()) %% } -type spot_options() :: #{binary() => any()}. %% Example: %% validation_exception_field() :: #{ %% <<"message">> => [string()], %% <<"name">> => [string()] %% } -type validation_exception_field() :: #{binary() => any()}. %% Example: %% create_queue_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"computeNodeGroupConfigurations">> => list(compute_node_group_configuration()), %% <<"queueName">> := string(), %% <<"slurmConfiguration">> => queue_slurm_configuration_request(), %% <<"tags">> => map() %% } -type create_queue_request() :: #{binary() => any()}. %% Example: %% list_clusters_response() :: #{ %% <<"clusters">> => list(cluster_summary()), %% <<"nextToken">> => [string()] %% } -type list_clusters_response() :: #{binary() => any()}. %% Example: %% update_compute_node_group_response() :: #{ %% <<"computeNodeGroup">> => compute_node_group() %% } -type update_compute_node_group_response() :: #{binary() => any()}. %% Example: %% delete_cluster_response() :: #{ %% } -type delete_cluster_response() :: #{binary() => any()}. %% Example: %% endpoint() :: #{ %% <<"ipv6Address">> => [string()], %% <<"port">> => [string()], %% <<"privateIpAddress">> => [string()], %% <<"publicIpAddress">> => [string()], %% <<"type">> => list(any()) %% } -type endpoint() :: #{binary() => any()}. %% Example: %% list_clusters_request() :: #{ %% <<"maxResults">> => integer(), %% <<"nextToken">> => [string()] %% } -type list_clusters_request() :: #{binary() => any()}. %% Example: %% internal_server_exception() :: #{ %% <<"message">> => [string()] %% } -type internal_server_exception() :: #{binary() => any()}. %% Example: %% compute_node_group_slurm_configuration() :: #{ %% <<"slurmCustomSettings">> => list(slurm_custom_setting()) %% } -type compute_node_group_slurm_configuration() :: #{binary() => any()}. %% Example: %% delete_cluster_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string() %% } -type delete_cluster_request() :: #{binary() => any()}. %% Example: %% slurm_rest() :: #{ %% <<"mode">> => list(any()) %% } -type slurm_rest() :: #{binary() => any()}. %% Example: %% access_denied_exception() :: #{ %% <<"message">> => [string()] %% } -type access_denied_exception() :: #{binary() => any()}. %% Example: %% update_slurm_rest_request() :: #{ %% <<"mode">> => list(any()) %% } -type update_slurm_rest_request() :: #{binary() => any()}. %% Example: %% tag_resource_response() :: #{ %% } -type tag_resource_response() :: #{binary() => any()}. %% Example: %% accounting_request() :: #{ %% <<"defaultPurgeTimeInDays">> => [integer()], %% <<"mode">> => list(any()) %% } -type accounting_request() :: #{binary() => any()}. %% Example: %% scaling_configuration() :: #{ %% <<"maxInstanceCount">> => [integer()], %% <<"minInstanceCount">> => [integer()] %% } -type scaling_configuration() :: #{binary() => any()}. %% Example: %% cluster_slurm_configuration_request() :: #{ %% <<"accounting">> => accounting_request(), %% <<"cgroupCustomSettings">> => list(cgroup_custom_setting()), %% <<"scaleDownIdleTimeInSeconds">> => [integer()], %% <<"slurmCustomSettings">> => list(slurm_custom_setting()), %% <<"slurmRest">> => slurm_rest_request(), %% <<"slurmdbdCustomSettings">> => list(slurmdbd_custom_setting()) %% } -type cluster_slurm_configuration_request() :: #{binary() => any()}. %% Example: %% scheduler() :: #{ %% <<"type">> => list(any()), %% <<"version">> => [string()] %% } -type scheduler() :: #{binary() => any()}. %% Example: %% jwt_key() :: #{ %% <<"secretArn">> => [string()], %% <<"secretVersion">> => [string()] %% } -type jwt_key() :: #{binary() => any()}. %% Example: %% update_queue_slurm_configuration_request() :: #{ %% <<"slurmCustomSettings">> => list(slurm_custom_setting()) %% } -type update_queue_slurm_configuration_request() :: #{binary() => any()}. %% Example: %% create_compute_node_group_response() :: #{ %% <<"computeNodeGroup">> => compute_node_group() %% } -type create_compute_node_group_response() :: #{binary() => any()}. %% Example: %% validation_exception() :: #{ %% <<"fieldList">> => list(validation_exception_field()), %% <<"message">> => [string()], %% <<"reason">> => list(any()) %% } -type validation_exception() :: #{binary() => any()}. %% Example: %% list_tags_for_resource_request() :: #{ %% <<"resourceArn">> := string() %% } -type list_tags_for_resource_request() :: #{binary() => any()}. %% Example: %% instance_config() :: #{ %% <<"instanceType">> => [string()] %% } -type instance_config() :: #{binary() => any()}. %% Example: %% slurmdbd_custom_setting() :: #{ %% <<"parameterName">> => [string()], %% <<"parameterValue">> => [string()] %% } -type slurmdbd_custom_setting() :: #{binary() => any()}. %% Example: %% throttling_exception() :: #{ %% <<"message">> => [string()], %% <<"retryAfterSeconds">> => [integer()] %% } -type throttling_exception() :: #{binary() => any()}. %% Example: %% queue_slurm_configuration_request() :: #{ %% <<"slurmCustomSettings">> => list(slurm_custom_setting()) %% } -type queue_slurm_configuration_request() :: #{binary() => any()}. %% Example: %% delete_compute_node_group_response() :: #{ %% } -type delete_compute_node_group_response() :: #{binary() => any()}. %% Example: %% list_queues_response() :: #{ %% <<"nextToken">> => [string()], %% <<"queues">> => list(queue_summary()) %% } -type list_queues_response() :: #{binary() => any()}. %% Example: %% list_compute_node_groups_request() :: #{ %% <<"clusterIdentifier">> := string(), %% <<"maxResults">> => integer(), %% <<"nextToken">> => [string()] %% } -type list_compute_node_groups_request() :: #{binary() => any()}. %% Example: %% update_queue_response() :: #{ %% <<"queue">> => queue() %% } -type update_queue_response() :: #{binary() => any()}. %% Example: %% delete_queue_request() :: #{ %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"queueIdentifier">> := string() %% } -type delete_queue_request() :: #{binary() => any()}. %% Example: %% networking_request() :: #{ %% <<"networkType">> => list(any()), %% <<"securityGroupIds">> => list(string()), %% <<"subnetIds">> => list(string()) %% } -type networking_request() :: #{binary() => any()}. %% Example: %% create_compute_node_group_request() :: #{ %% <<"amiId">> => string(), %% <<"clientToken">> => string(), %% <<"clusterIdentifier">> := string(), %% <<"computeNodeGroupName">> := string(), %% <<"customLaunchTemplate">> := custom_launch_template(), %% <<"iamInstanceProfileArn">> := string(), %% <<"instanceConfigs">> := list(instance_config()), %% <<"purchaseOption">> => list(any()), %% <<"scalingConfiguration">> := scaling_configuration_request(), %% <<"slurmConfiguration">> => compute_node_group_slurm_configuration_request(), %% <<"spotOptions">> => spot_options(), %% <<"subnetIds">> := list([string()]()), %% <<"tags">> => map() %% } -type create_compute_node_group_request() :: #{binary() => any()}. %% Example: %% delete_queue_response() :: #{ %% } -type delete_queue_response() :: #{binary() => any()}. %% Example: %% compute_node_group_summary() :: #{ %% <<"arn">> => [string()], %% <<"clusterId">> => [string()], %% <<"createdAt">> => [non_neg_integer()], %% <<"id">> => [string()], %% <<"modifiedAt">> => [non_neg_integer()], %% <<"name">> => string(), %% <<"status">> => list(any()) %% } -type compute_node_group_summary() :: #{binary() => any()}. %% Example: %% get_cluster_request() :: #{ %% <<"clusterIdentifier">> := string() %% } -type get_cluster_request() :: #{binary() => any()}. %% Example: %% slurm_auth_key() :: #{ %% <<"secretArn">> => [string()], %% <<"secretVersion">> => [string()] %% } -type slurm_auth_key() :: #{binary() => any()}. %% Example: %% custom_launch_template() :: #{ %% <<"id">> => [string()], %% <<"version">> => [string()] %% } -type custom_launch_template() :: #{binary() => any()}. %% Example: %% create_queue_response() :: #{ %% <<"queue">> => queue() %% } -type create_queue_response() :: #{binary() => any()}. %% Example: %% update_cluster_response() :: #{ %% <<"cluster">> => cluster() %% } -type update_cluster_response() :: #{binary() => any()}. -type create_cluster_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | service_quota_exceeded_exception() | conflict_exception(). -type create_compute_node_group_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | service_quota_exceeded_exception() | resource_not_found_exception() | conflict_exception(). -type create_queue_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | service_quota_exceeded_exception() | resource_not_found_exception() | conflict_exception(). -type delete_cluster_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type delete_compute_node_group_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type delete_queue_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type get_cluster_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type get_compute_node_group_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type get_queue_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type list_clusters_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type list_compute_node_groups_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type list_queues_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type list_tags_for_resource_errors() :: resource_not_found_exception(). -type register_compute_node_group_instance_errors() :: access_denied_exception() | internal_server_exception(). -type tag_resource_errors() :: service_quota_exceeded_exception() | resource_not_found_exception(). -type untag_resource_errors() :: resource_not_found_exception(). -type update_cluster_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | resource_not_found_exception() | conflict_exception(). -type update_compute_node_group_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | service_quota_exceeded_exception() | resource_not_found_exception() | conflict_exception(). -type update_queue_errors() :: throttling_exception() | validation_exception() | access_denied_exception() | internal_server_exception() | service_quota_exceeded_exception() | resource_not_found_exception() | conflict_exception(). %%==================================================================== %% API %%==================================================================== %% @doc Creates a cluster in your account. %% %% PCS creates the cluster controller in a service-owned account. The cluster %% controller communicates with the cluster resources in your account. The %% subnets and security groups for the cluster must already exist before you %% use this API action. %% %% It takes time for PCS to create the cluster. The cluster is in a %% `Creating' state until it is ready to use. There can only be 1 cluster %% in a `Creating' state per Amazon Web Services Region per Amazon Web %% Services account. `CreateCluster' fails with a %% `ServiceQuotaExceededException' if there is already a cluster in a %% `Creating' state. -spec create_cluster(aws_client:aws_client(), create_cluster_request()) -> {ok, create_cluster_response(), tuple()} | {error, any()} | {error, create_cluster_errors(), tuple()}. create_cluster(Client, Input) when is_map(Client), is_map(Input) -> create_cluster(Client, Input, []). -spec create_cluster(aws_client:aws_client(), create_cluster_request(), proplists:proplist()) -> {ok, create_cluster_response(), tuple()} | {error, any()} | {error, create_cluster_errors(), tuple()}. create_cluster(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateCluster">>, Input, Options). %% @doc Creates a managed set of compute nodes. %% %% You associate a compute node group with a cluster through 1 or more PCS %% queues or as part of the login fleet. A compute node group includes the %% definition of the compute properties and lifecycle management. PCS uses %% the information you provide to this API action to launch compute nodes in %% your account. You can only specify subnets in the same Amazon VPC as your %% cluster. You receive billing charges for the compute nodes that PCS %% launches in your account. You must already have a launch template before %% you call this API. For more information, see Launch an instance from a %% launch template: %% https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html %% in the Amazon Elastic Compute Cloud User Guide for Linux Instances. -spec create_compute_node_group(aws_client:aws_client(), create_compute_node_group_request()) -> {ok, create_compute_node_group_response(), tuple()} | {error, any()} | {error, create_compute_node_group_errors(), tuple()}. create_compute_node_group(Client, Input) when is_map(Client), is_map(Input) -> create_compute_node_group(Client, Input, []). -spec create_compute_node_group(aws_client:aws_client(), create_compute_node_group_request(), proplists:proplist()) -> {ok, create_compute_node_group_response(), tuple()} | {error, any()} | {error, create_compute_node_group_errors(), tuple()}. create_compute_node_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateComputeNodeGroup">>, Input, Options). %% @doc Creates a job queue. %% %% You must associate 1 or more compute node groups with the queue. You can %% associate 1 compute node group with multiple queues. -spec create_queue(aws_client:aws_client(), create_queue_request()) -> {ok, create_queue_response(), tuple()} | {error, any()} | {error, create_queue_errors(), tuple()}. create_queue(Client, Input) when is_map(Client), is_map(Input) -> create_queue(Client, Input, []). -spec create_queue(aws_client:aws_client(), create_queue_request(), proplists:proplist()) -> {ok, create_queue_response(), tuple()} | {error, any()} | {error, create_queue_errors(), tuple()}. create_queue(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateQueue">>, Input, Options). %% @doc Deletes a cluster and all its linked resources. %% %% You must delete all queues and compute node groups associated with the %% cluster before you can delete the cluster. -spec delete_cluster(aws_client:aws_client(), delete_cluster_request()) -> {ok, delete_cluster_response(), tuple()} | {error, any()} | {error, delete_cluster_errors(), tuple()}. delete_cluster(Client, Input) when is_map(Client), is_map(Input) -> delete_cluster(Client, Input, []). -spec delete_cluster(aws_client:aws_client(), delete_cluster_request(), proplists:proplist()) -> {ok, delete_cluster_response(), tuple()} | {error, any()} | {error, delete_cluster_errors(), tuple()}. delete_cluster(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteCluster">>, Input, Options). %% @doc Deletes a compute node group. %% %% You must delete all queues associated with the compute node group first. -spec delete_compute_node_group(aws_client:aws_client(), delete_compute_node_group_request()) -> {ok, delete_compute_node_group_response(), tuple()} | {error, any()} | {error, delete_compute_node_group_errors(), tuple()}. delete_compute_node_group(Client, Input) when is_map(Client), is_map(Input) -> delete_compute_node_group(Client, Input, []). -spec delete_compute_node_group(aws_client:aws_client(), delete_compute_node_group_request(), proplists:proplist()) -> {ok, delete_compute_node_group_response(), tuple()} | {error, any()} | {error, delete_compute_node_group_errors(), tuple()}. delete_compute_node_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteComputeNodeGroup">>, Input, Options). %% @doc Deletes a job queue. %% %% If the compute node group associated with this queue isn't associated %% with any other queues, PCS terminates all the compute nodes for this %% queue. -spec delete_queue(aws_client:aws_client(), delete_queue_request()) -> {ok, delete_queue_response(), tuple()} | {error, any()} | {error, delete_queue_errors(), tuple()}. delete_queue(Client, Input) when is_map(Client), is_map(Input) -> delete_queue(Client, Input, []). -spec delete_queue(aws_client:aws_client(), delete_queue_request(), proplists:proplist()) -> {ok, delete_queue_response(), tuple()} | {error, any()} | {error, delete_queue_errors(), tuple()}. delete_queue(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteQueue">>, Input, Options). %% @doc Returns detailed information about a running cluster in your account. %% %% This API action provides networking information, endpoint information for %% communication with the scheduler, and provisioning status. -spec get_cluster(aws_client:aws_client(), get_cluster_request()) -> {ok, get_cluster_response(), tuple()} | {error, any()} | {error, get_cluster_errors(), tuple()}. get_cluster(Client, Input) when is_map(Client), is_map(Input) -> get_cluster(Client, Input, []). -spec get_cluster(aws_client:aws_client(), get_cluster_request(), proplists:proplist()) -> {ok, get_cluster_response(), tuple()} | {error, any()} | {error, get_cluster_errors(), tuple()}. get_cluster(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetCluster">>, Input, Options). %% @doc Returns detailed information about a compute node group. %% %% This API action provides networking information, EC2 instance type, %% compute node group status, and scheduler (such as Slurm) configuration. -spec get_compute_node_group(aws_client:aws_client(), get_compute_node_group_request()) -> {ok, get_compute_node_group_response(), tuple()} | {error, any()} | {error, get_compute_node_group_errors(), tuple()}. get_compute_node_group(Client, Input) when is_map(Client), is_map(Input) -> get_compute_node_group(Client, Input, []). -spec get_compute_node_group(aws_client:aws_client(), get_compute_node_group_request(), proplists:proplist()) -> {ok, get_compute_node_group_response(), tuple()} | {error, any()} | {error, get_compute_node_group_errors(), tuple()}. get_compute_node_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetComputeNodeGroup">>, Input, Options). %% @doc Returns detailed information about a queue. %% %% The information includes the compute node groups that the queue uses to %% schedule jobs. -spec get_queue(aws_client:aws_client(), get_queue_request()) -> {ok, get_queue_response(), tuple()} | {error, any()} | {error, get_queue_errors(), tuple()}. get_queue(Client, Input) when is_map(Client), is_map(Input) -> get_queue(Client, Input, []). -spec get_queue(aws_client:aws_client(), get_queue_request(), proplists:proplist()) -> {ok, get_queue_response(), tuple()} | {error, any()} | {error, get_queue_errors(), tuple()}. get_queue(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetQueue">>, Input, Options). %% @doc Returns a list of running clusters in your account. -spec list_clusters(aws_client:aws_client(), list_clusters_request()) -> {ok, list_clusters_response(), tuple()} | {error, any()} | {error, list_clusters_errors(), tuple()}. list_clusters(Client, Input) when is_map(Client), is_map(Input) -> list_clusters(Client, Input, []). -spec list_clusters(aws_client:aws_client(), list_clusters_request(), proplists:proplist()) -> {ok, list_clusters_response(), tuple()} | {error, any()} | {error, list_clusters_errors(), tuple()}. list_clusters(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListClusters">>, Input, Options). %% @doc Returns a list of all compute node groups associated with a cluster. -spec list_compute_node_groups(aws_client:aws_client(), list_compute_node_groups_request()) -> {ok, list_compute_node_groups_response(), tuple()} | {error, any()} | {error, list_compute_node_groups_errors(), tuple()}. list_compute_node_groups(Client, Input) when is_map(Client), is_map(Input) -> list_compute_node_groups(Client, Input, []). -spec list_compute_node_groups(aws_client:aws_client(), list_compute_node_groups_request(), proplists:proplist()) -> {ok, list_compute_node_groups_response(), tuple()} | {error, any()} | {error, list_compute_node_groups_errors(), tuple()}. list_compute_node_groups(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListComputeNodeGroups">>, Input, Options). %% @doc Returns a list of all queues associated with a cluster. -spec list_queues(aws_client:aws_client(), list_queues_request()) -> {ok, list_queues_response(), tuple()} | {error, any()} | {error, list_queues_errors(), tuple()}. list_queues(Client, Input) when is_map(Client), is_map(Input) -> list_queues(Client, Input, []). -spec list_queues(aws_client:aws_client(), list_queues_request(), proplists:proplist()) -> {ok, list_queues_response(), tuple()} | {error, any()} | {error, list_queues_errors(), tuple()}. list_queues(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListQueues">>, Input, Options). %% @doc Returns a list of all tags on an PCS resource. -spec list_tags_for_resource(aws_client:aws_client(), list_tags_for_resource_request()) -> {ok, list_tags_for_resource_response(), tuple()} | {error, any()} | {error, list_tags_for_resource_errors(), tuple()}. list_tags_for_resource(Client, Input) when is_map(Client), is_map(Input) -> list_tags_for_resource(Client, Input, []). -spec list_tags_for_resource(aws_client:aws_client(), list_tags_for_resource_request(), proplists:proplist()) -> {ok, list_tags_for_resource_response(), tuple()} | {error, any()} | {error, list_tags_for_resource_errors(), tuple()}. list_tags_for_resource(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListTagsForResource">>, Input, Options). %% @doc This API action isn't intended for you to use. %% %% PCS uses this API action to register the compute nodes it launches in your %% account. -spec register_compute_node_group_instance(aws_client:aws_client(), register_compute_node_group_instance_request()) -> {ok, register_compute_node_group_instance_response(), tuple()} | {error, any()} | {error, register_compute_node_group_instance_errors(), tuple()}. register_compute_node_group_instance(Client, Input) when is_map(Client), is_map(Input) -> register_compute_node_group_instance(Client, Input, []). -spec register_compute_node_group_instance(aws_client:aws_client(), register_compute_node_group_instance_request(), proplists:proplist()) -> {ok, register_compute_node_group_instance_response(), tuple()} | {error, any()} | {error, register_compute_node_group_instance_errors(), tuple()}. register_compute_node_group_instance(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RegisterComputeNodeGroupInstance">>, Input, Options). %% @doc Adds or edits tags on an PCS resource. %% %% Each tag consists of a tag key and a tag value. The tag key and tag value %% are case-sensitive strings. The tag value can be an empty (null) string. %% To add a tag, specify a new tag key and a tag value. To edit a tag, %% specify an existing tag key and a new tag value. -spec tag_resource(aws_client:aws_client(), tag_resource_request()) -> {ok, tag_resource_response(), tuple()} | {error, any()} | {error, tag_resource_errors(), tuple()}. tag_resource(Client, Input) when is_map(Client), is_map(Input) -> tag_resource(Client, Input, []). -spec tag_resource(aws_client:aws_client(), tag_resource_request(), proplists:proplist()) -> {ok, tag_resource_response(), tuple()} | {error, any()} | {error, tag_resource_errors(), tuple()}. tag_resource(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"TagResource">>, Input, Options). %% @doc Deletes tags from an PCS resource. %% %% To delete a tag, specify the tag key and the Amazon Resource Name (ARN) of %% the PCS resource. -spec untag_resource(aws_client:aws_client(), untag_resource_request()) -> {ok, untag_resource_response(), tuple()} | {error, any()} | {error, untag_resource_errors(), tuple()}. untag_resource(Client, Input) when is_map(Client), is_map(Input) -> untag_resource(Client, Input, []). -spec untag_resource(aws_client:aws_client(), untag_resource_request(), proplists:proplist()) -> {ok, untag_resource_response(), tuple()} | {error, any()} | {error, untag_resource_errors(), tuple()}. untag_resource(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UntagResource">>, Input, Options). %% @doc Updates a cluster configuration. %% %% You can modify Slurm scheduler settings, accounting configuration, and %% security groups for an existing cluster. %% %% You can only update clusters that are in `ACTIVE', %% `UPDATE_FAILED', or `SUSPENDED' state. All associated resources %% (queues and compute node groups) must be in `ACTIVE' state before you %% can update the cluster. -spec update_cluster(aws_client:aws_client(), update_cluster_request()) -> {ok, update_cluster_response(), tuple()} | {error, any()} | {error, update_cluster_errors(), tuple()}. update_cluster(Client, Input) when is_map(Client), is_map(Input) -> update_cluster(Client, Input, []). -spec update_cluster(aws_client:aws_client(), update_cluster_request(), proplists:proplist()) -> {ok, update_cluster_response(), tuple()} | {error, any()} | {error, update_cluster_errors(), tuple()}. update_cluster(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateCluster">>, Input, Options). %% @doc Updates a compute node group. %% %% You can update many of the fields related to your compute node group %% including the configurations for networking, compute nodes, and settings %% specific to your scheduler (such as Slurm). -spec update_compute_node_group(aws_client:aws_client(), update_compute_node_group_request()) -> {ok, update_compute_node_group_response(), tuple()} | {error, any()} | {error, update_compute_node_group_errors(), tuple()}. update_compute_node_group(Client, Input) when is_map(Client), is_map(Input) -> update_compute_node_group(Client, Input, []). -spec update_compute_node_group(aws_client:aws_client(), update_compute_node_group_request(), proplists:proplist()) -> {ok, update_compute_node_group_response(), tuple()} | {error, any()} | {error, update_compute_node_group_errors(), tuple()}. update_compute_node_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateComputeNodeGroup">>, Input, Options). %% @doc Updates the compute node group configuration of a queue. %% %% Use this API to change the compute node groups that the queue can send %% jobs to. -spec update_queue(aws_client:aws_client(), update_queue_request()) -> {ok, update_queue_response(), tuple()} | {error, any()} | {error, update_queue_errors(), tuple()}. update_queue(Client, Input) when is_map(Client), is_map(Input) -> update_queue(Client, Input, []). -spec update_queue(aws_client:aws_client(), update_queue_request(), proplists:proplist()) -> {ok, update_queue_response(), tuple()} | {error, any()} | {error, update_queue_errors(), tuple()}. update_queue(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateQueue">>, 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 => <<"pcs">>}, Host = build_host(<<"pcs">>, Client1), URL = build_url(Host, Client1), Headers = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.0">>}, {<<"X-Amz-Target">>, <<"AWSParallelComputingService.", 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 = aws_client:proto(Client), Port = aws_client:port(Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).