aws-parallelcluster 3.15.0__tar.gz → 3.16.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/PKG-INFO +2 -1
  2. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/setup.py +2 -1
  3. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/PKG-INFO +2 -1
  4. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/SOURCES.txt +1 -4
  5. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/cluster_compute_fleet_controller.py +11 -23
  6. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/cluster_instances_controller.py +0 -2
  7. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/common.py +23 -7
  8. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/compute_fleet_status.py +0 -2
  9. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/requested_compute_fleet_status.py +0 -2
  10. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/openapi/openapi.yaml +1 -1
  11. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/aws_api.py +9 -9
  12. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/ec2.py +1 -0
  13. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/elb.py +9 -0
  14. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/iam.py +2 -1
  15. aws_parallelcluster-3.16.0/src/pcluster/aws/resource_groups_tagging_api.py +47 -0
  16. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/configure/easyconfig.py +59 -91
  17. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/configure/utils.py +1 -1
  18. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/cluster_config.py +16 -139
  19. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/common.py +0 -4
  20. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/imagebuilder_config.py +30 -6
  21. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/update_policy.py +27 -35
  22. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/constants.py +16 -19
  23. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/cluster.py +6 -53
  24. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/cluster_resources.py +0 -5
  25. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/common.py +22 -0
  26. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/compute_fleet_status_manager.py +0 -2
  27. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/login_nodes_status.py +15 -32
  28. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/s3_bucket.py +5 -2
  29. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/compute_node/user_data.sh +7 -7
  30. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/head_node/user_data.sh +3 -3
  31. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/imagebuilder/parallelcluster.yaml +18 -14
  32. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/imagebuilder/parallelcluster_tag.yaml +1 -3
  33. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/imagebuilder/parallelcluster_test.yaml +25 -31
  34. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/imagebuilder/update_and_reboot.yaml +1 -3
  35. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/login_node/user_data.sh +17 -6
  36. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/schemas/cluster_schema.py +19 -166
  37. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/schemas/common_schema.py +1 -2
  38. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/schemas/imagebuilder_schema.py +1 -1
  39. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/cdk_builder_utils.py +102 -110
  40. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/cluster_stack.py +81 -110
  41. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/cw_dashboard_builder.py +3 -10
  42. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/imagebuilder_stack.py +9 -0
  43. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/login_nodes_stack.py +58 -132
  44. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/queues_stack.py +4 -7
  45. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/utils.py +0 -11
  46. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/cluster_validators.py +71 -75
  47. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/dev_settings_validators.py +23 -31
  48. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster3_config_converter/pcluster3_config_converter.py +4 -52
  49. aws_parallelcluster-3.15.0/src/pcluster/aws/batch.py +0 -130
  50. aws_parallelcluster-3.15.0/src/pcluster/resources/imagebuilder/parallelcluster_validate.yaml +0 -0
  51. aws_parallelcluster-3.15.0/src/pcluster/templates/awsbatch_builder.py +0 -886
  52. aws_parallelcluster-3.15.0/src/pcluster/validators/awsbatch_validators.py +0 -195
  53. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/MANIFEST.in +0 -0
  54. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/README +0 -0
  55. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/setup.cfg +0 -0
  56. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/dependency_links.txt +0 -0
  57. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/entry_points.txt +0 -0
  58. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/not-zip-safe +0 -0
  59. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/requires.txt +0 -0
  60. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/aws_parallelcluster.egg-info/top_level.txt +0 -0
  61. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/__init__.py +0 -0
  62. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/__init__.py +0 -0
  63. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/awslambda/__init__.py +0 -0
  64. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/awslambda/entrypoint.py +0 -0
  65. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/awslambda/serverless_wsgi.py +0 -0
  66. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/__init__.py +0 -0
  67. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/cluster_logs_controller.py +0 -0
  68. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/cluster_operations_controller.py +0 -0
  69. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/image_logs_controller.py +0 -0
  70. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/controllers/image_operations_controller.py +0 -0
  71. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/converters.py +0 -0
  72. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/encoder.py +0 -0
  73. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/errors.py +0 -0
  74. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/flask_app.py +0 -0
  75. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/__init__.py +0 -0
  76. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/ami_info.py +0 -0
  77. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/bad_request_exception_response_content.py +0 -0
  78. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/base_model_.py +0 -0
  79. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/build_image_bad_request_exception_response_content.py +0 -0
  80. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/build_image_request_content.py +0 -0
  81. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/build_image_response_content.py +0 -0
  82. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/change.py +0 -0
  83. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cloud_formation_resource_status.py +0 -0
  84. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cloud_formation_stack_status.py +0 -0
  85. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cluster_configuration_structure.py +0 -0
  86. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cluster_info_summary.py +0 -0
  87. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cluster_instance.py +0 -0
  88. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cluster_status.py +0 -0
  89. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/cluster_status_filtering_option.py +0 -0
  90. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/config_validation_message.py +0 -0
  91. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/conflict_exception_response_content.py +0 -0
  92. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/create_cluster_bad_request_exception_response_content.py +0 -0
  93. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/create_cluster_request_content.py +0 -0
  94. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/create_cluster_response_content.py +0 -0
  95. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/delete_cluster_response_content.py +0 -0
  96. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/delete_image_response_content.py +0 -0
  97. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/describe_cluster_instances_response_content.py +0 -0
  98. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/describe_cluster_response_content.py +0 -0
  99. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/describe_compute_fleet_response_content.py +0 -0
  100. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/describe_image_response_content.py +0 -0
  101. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/dryrun_operation_exception_response_content.py +0 -0
  102. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/ec2_ami_info.py +0 -0
  103. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/ec2_ami_info_summary.py +0 -0
  104. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/ec2_ami_state.py +0 -0
  105. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/ec2_instance.py +0 -0
  106. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/failure.py +0 -0
  107. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/get_cluster_log_events_response_content.py +0 -0
  108. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/get_cluster_stack_events_response_content.py +0 -0
  109. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/get_image_log_events_response_content.py +0 -0
  110. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/get_image_stack_events_response_content.py +0 -0
  111. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/image_build_status.py +0 -0
  112. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/image_builder_image_status.py +0 -0
  113. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/image_configuration_structure.py +0 -0
  114. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/image_info_summary.py +0 -0
  115. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/image_status_filtering_option.py +0 -0
  116. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/instance_state.py +0 -0
  117. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/internal_service_exception_response_content.py +0 -0
  118. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/limit_exceeded_exception_response_content.py +0 -0
  119. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/list_cluster_log_streams_response_content.py +0 -0
  120. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/list_clusters_response_content.py +0 -0
  121. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/list_image_log_streams_response_content.py +0 -0
  122. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/list_images_response_content.py +0 -0
  123. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/list_official_images_response_content.py +0 -0
  124. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/log_event.py +0 -0
  125. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/log_stream.py +0 -0
  126. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/login_nodes_pool.py +0 -0
  127. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/login_nodes_state.py +0 -0
  128. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/metadata.py +0 -0
  129. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/node_type.py +0 -0
  130. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/not_found_exception_response_content.py +0 -0
  131. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/scheduler.py +0 -0
  132. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/stack_event.py +0 -0
  133. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/tag.py +0 -0
  134. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/unauthorized_client_error_response_content.py +0 -0
  135. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/update_cluster_bad_request_exception_response_content.py +0 -0
  136. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/update_cluster_request_content.py +0 -0
  137. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/update_cluster_response_content.py +0 -0
  138. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/update_compute_fleet_request_content.py +0 -0
  139. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/update_compute_fleet_response_content.py +0 -0
  140. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/update_error.py +0 -0
  141. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/models/validation_level.py +0 -0
  142. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/openapi/__init__.py +0 -0
  143. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/typing_utils.py +0 -0
  144. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/api/util.py +0 -0
  145. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/__init__.py +0 -0
  146. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/aws_resources.py +0 -0
  147. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/cfn.py +0 -0
  148. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/common.py +0 -0
  149. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/dynamo.py +0 -0
  150. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/efs.py +0 -0
  151. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/fsx.py +0 -0
  152. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/imagebuilder.py +0 -0
  153. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/kms.py +0 -0
  154. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/logs.py +0 -0
  155. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/resource_groups.py +0 -0
  156. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/route53.py +0 -0
  157. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/s3.py +0 -0
  158. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/s3_resource.py +0 -0
  159. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/secretsmanager.py +0 -0
  160. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/ssm.py +0 -0
  161. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/aws/sts.py +0 -0
  162. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/__init__.py +0 -0
  163. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/__init__.py +0 -0
  164. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/cluster_logs.py +0 -0
  165. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/commands.py +0 -0
  166. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/common.py +0 -0
  167. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/configure/__init__.py +0 -0
  168. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/configure/command.py +0 -0
  169. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/configure/networking.py +0 -0
  170. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/configure/subnet_computation.py +0 -0
  171. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/dcv_connect.py +0 -0
  172. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/dcv_util.py +0 -0
  173. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/image_logs.py +0 -0
  174. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/ssh.py +0 -0
  175. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/commands/version.py +0 -0
  176. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/entrypoint.py +0 -0
  177. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/exceptions.py +0 -0
  178. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/logger.py +0 -0
  179. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/middleware.py +0 -0
  180. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/cli/model.py +0 -0
  181. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/__init__.py +0 -0
  182. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/config_patch.py +0 -0
  183. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/config/update_policy_utils.py +0 -0
  184. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/imagebuilder_utils.py +0 -0
  185. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/launch_template_utils.py +0 -0
  186. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/lib/__init__.py +0 -0
  187. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/lib/lib.py +0 -0
  188. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/__init__.py +0 -0
  189. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/imagebuilder.py +0 -0
  190. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/models/imagebuilder_resources.py +0 -0
  191. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/networking/__init__.py +0 -0
  192. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/networking/vpc_factory.py +0 -0
  193. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/alinux2/Dockerfile +0 -0
  194. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/alinux2023/Dockerfile +0 -0
  195. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/build-docker-images.sh +0 -0
  196. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/buildspec.yml +0 -0
  197. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/scripts/entrypoint.sh +0 -0
  198. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/scripts/generate_hostfile.sh +0 -0
  199. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/scripts/modify_yum_vars.sh +0 -0
  200. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/scripts/mount_efs.sh +0 -0
  201. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/scripts/mount_nfs.sh +0 -0
  202. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/batch/docker/upload-docker-images.sh +0 -0
  203. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/__init__.py +0 -0
  204. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/cleanup_resources.py +0 -0
  205. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/LICENSE +0 -0
  206. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/NOTICE +0 -0
  207. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/__init__.py +0 -0
  208. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/log_helper.py +0 -0
  209. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/resource_helper.py +0 -0
  210. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/utils.py +0 -0
  211. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/delete_image_stack.py +0 -0
  212. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/manage_docker_images.py +0 -0
  213. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/custom_resources/custom_resources_code/send_build_notification.py +0 -0
  214. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/imagebuilder/custom_script.yaml +0 -0
  215. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/resources/supported-regions +0 -0
  216. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/schemas/__init__.py +0 -0
  217. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/__init__.py +0 -0
  218. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/cdk_artifacts_manager.py +0 -0
  219. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/cdk_builder.py +0 -0
  220. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/compute_fleet_stack.py +0 -0
  221. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/import_cdk.py +0 -0
  222. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/templates/slurm_builder.py +0 -0
  223. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/__init__.py +0 -0
  224. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/common.py +0 -0
  225. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/database_validators.py +0 -0
  226. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/directory_service_validators.py +0 -0
  227. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/ebs_validators.py +0 -0
  228. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/ec2_validators.py +0 -0
  229. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/efs_validators.py +0 -0
  230. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/feature_validators.py +0 -0
  231. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/fsx_validators.py +0 -0
  232. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/iam_validators.py +0 -0
  233. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/imagebuilder_validators.py +0 -0
  234. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/instances_validators.py +0 -0
  235. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/kms_validators.py +0 -0
  236. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/monitoring_validators.py +0 -0
  237. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/networking_validators.py +0 -0
  238. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/s3_validators.py +0 -0
  239. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/secret_validators.py +0 -0
  240. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/slurm_settings_validator.py +0 -0
  241. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/tags_validators.py +0 -0
  242. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster/validators/utils.py +0 -0
  243. {aws_parallelcluster-3.15.0 → aws_parallelcluster-3.16.0}/src/pcluster3_config_converter/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-parallelcluster
3
- Version: 3.15.0
3
+ Version: 3.16.0
4
4
  Summary: AWS ParallelCluster is an AWS supported Open Source cluster management tool to deploy and manage HPC clusters in the AWS cloud.
5
5
  Home-page: https://github.com/aws/aws-parallelcluster
6
6
  Author: Amazon Web Services
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.9
16
16
  Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
19
20
  Classifier: Topic :: Scientific/Engineering
20
21
  Classifier: License :: OSI Approved :: Apache Software License
21
22
  Requires-Python: >=3.9
@@ -20,7 +20,7 @@ def readme():
20
20
  return f.read()
21
21
 
22
22
 
23
- VERSION = "3.15.0"
23
+ VERSION = "3.16.0"
24
24
  CDK_VERSION = "1.164"
25
25
  REQUIRES = [
26
26
  "setuptools",
@@ -92,6 +92,7 @@ setup(
92
92
  "Programming Language :: Python :: 3.10",
93
93
  "Programming Language :: Python :: 3.11",
94
94
  "Programming Language :: Python :: 3.12",
95
+ "Programming Language :: Python :: 3.13",
95
96
  "Topic :: Scientific/Engineering",
96
97
  "License :: OSI Approved :: Apache Software License",
97
98
  ],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-parallelcluster
3
- Version: 3.15.0
3
+ Version: 3.16.0
4
4
  Summary: AWS ParallelCluster is an AWS supported Open Source cluster management tool to deploy and manage HPC clusters in the AWS cloud.
5
5
  Home-page: https://github.com/aws/aws-parallelcluster
6
6
  Author: Amazon Web Services
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.9
16
16
  Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
19
20
  Classifier: Topic :: Scientific/Engineering
20
21
  Classifier: License :: OSI Approved :: Apache Software License
21
22
  Requires-Python: >=3.9
@@ -105,7 +105,6 @@ src/pcluster/api/openapi/openapi.yaml
105
105
  src/pcluster/aws/__init__.py
106
106
  src/pcluster/aws/aws_api.py
107
107
  src/pcluster/aws/aws_resources.py
108
- src/pcluster/aws/batch.py
109
108
  src/pcluster/aws/cfn.py
110
109
  src/pcluster/aws/common.py
111
110
  src/pcluster/aws/dynamo.py
@@ -118,6 +117,7 @@ src/pcluster/aws/imagebuilder.py
118
117
  src/pcluster/aws/kms.py
119
118
  src/pcluster/aws/logs.py
120
119
  src/pcluster/aws/resource_groups.py
120
+ src/pcluster/aws/resource_groups_tagging_api.py
121
121
  src/pcluster/aws/route53.py
122
122
  src/pcluster/aws/s3.py
123
123
  src/pcluster/aws/s3_resource.py
@@ -193,7 +193,6 @@ src/pcluster/resources/imagebuilder/custom_script.yaml
193
193
  src/pcluster/resources/imagebuilder/parallelcluster.yaml
194
194
  src/pcluster/resources/imagebuilder/parallelcluster_tag.yaml
195
195
  src/pcluster/resources/imagebuilder/parallelcluster_test.yaml
196
- src/pcluster/resources/imagebuilder/parallelcluster_validate.yaml
197
196
  src/pcluster/resources/imagebuilder/update_and_reboot.yaml
198
197
  src/pcluster/resources/login_node/user_data.sh
199
198
  src/pcluster/schemas/__init__.py
@@ -201,7 +200,6 @@ src/pcluster/schemas/cluster_schema.py
201
200
  src/pcluster/schemas/common_schema.py
202
201
  src/pcluster/schemas/imagebuilder_schema.py
203
202
  src/pcluster/templates/__init__.py
204
- src/pcluster/templates/awsbatch_builder.py
205
203
  src/pcluster/templates/cdk_artifacts_manager.py
206
204
  src/pcluster/templates/cdk_builder.py
207
205
  src/pcluster/templates/cdk_builder_utils.py
@@ -214,7 +212,6 @@ src/pcluster/templates/login_nodes_stack.py
214
212
  src/pcluster/templates/queues_stack.py
215
213
  src/pcluster/templates/slurm_builder.py
216
214
  src/pcluster/validators/__init__.py
217
- src/pcluster/validators/awsbatch_validators.py
218
215
  src/pcluster/validators/cluster_validators.py
219
216
  src/pcluster/validators/common.py
220
217
  src/pcluster/validators/database_validators.py
@@ -64,30 +64,18 @@ def update_compute_fleet(update_compute_fleet_request_content, cluster_name, reg
64
64
  validate_cluster(cluster)
65
65
 
66
66
  status = update_compute_fleet_request_content.status
67
- if cluster.stack.scheduler == "awsbatch":
68
- if status == RequestedComputeFleetStatus.ENABLED:
69
- cluster.start()
70
- elif status == RequestedComputeFleetStatus.DISABLED:
71
- cluster.stop()
72
- else:
73
- raise BadRequestException(
74
- "the update compute fleet status can only be set to"
75
- " `ENABLED` or `DISABLED` for AWS Batch scheduler clusters."
76
- )
67
+ if status == RequestedComputeFleetStatus.START_REQUESTED:
68
+ cluster.start()
69
+ elif status == RequestedComputeFleetStatus.STOP_REQUESTED:
70
+ cluster.stop()
77
71
  else:
78
- if status == RequestedComputeFleetStatus.START_REQUESTED:
79
- cluster.start()
80
- elif status == RequestedComputeFleetStatus.STOP_REQUESTED:
81
- cluster.stop()
82
- else:
83
- # A nosec comment is appended to the following line in order to disable the false positive B608 check.
84
- # False positive since it is not a SQL query.
85
- # [B608:hardcoded_sql_expressions] Possible SQL injection vector through string-based query construction.
86
- raise BadRequestException(
87
- "the update compute fleet status can only be set to" # nosec B608
88
- " `START_REQUESTED` or `STOP_REQUESTED` for %s scheduler clusters."
89
- % cluster.stack.scheduler.capitalize()
90
- )
72
+ # A nosec comment is appended to the following line in order to disable the false positive B608 check.
73
+ # False positive since it is not a SQL query.
74
+ # [B608:hardcoded_sql_expressions] Possible SQL injection vector through string-based query construction.
75
+ raise BadRequestException(
76
+ "the update compute fleet status can only be set to" # nosec B608
77
+ " `START_REQUESTED` or `STOP_REQUESTED` for %s scheduler clusters." % cluster.stack.scheduler.capitalize()
78
+ )
91
79
  status, last_status_updated_time = cluster.compute_fleet_status_with_last_updated_time
92
80
  last_status_updated_time = last_status_updated_time and to_utc_datetime(last_status_updated_time)
93
81
  return UpdateComputeFleetResponseContent(last_status_updated_time=last_status_updated_time, status=status.value)
@@ -45,8 +45,6 @@ def delete_cluster_instances(cluster_name, region=None, force=None):
45
45
  raise BadRequestException(
46
46
  f"Cluster '{cluster_name}' belongs to an incompatible ParallelCluster major version."
47
47
  )
48
- if cluster.stack.scheduler == "awsbatch":
49
- raise BadRequestException("the delete cluster instances operation does not support AWS Batch clusters.")
50
48
  except StackNotFoundError:
51
49
  if not force:
52
50
  raise NotFoundException(
@@ -17,6 +17,7 @@ import os
17
17
  from typing import List, Optional, Set, Union
18
18
 
19
19
  import boto3
20
+ from botocore.exceptions import ProfileNotFound
20
21
  from packaging import version as packaging_version
21
22
 
22
23
  from pcluster.api.errors import (
@@ -43,14 +44,23 @@ def _set_region(region):
43
44
  region_backup = os.environ.get("AWS_DEFAULT_REGION")
44
45
  LOGGER.info("Setting AWS Region to %s", region)
45
46
  os.environ["AWS_DEFAULT_REGION"] = region
46
- if region not in retrieve_supported_regions():
47
- if region_backup:
48
- os.environ["AWS_DEFAULT_REGION"] = region_backup
49
- else:
50
- del os.environ["AWS_DEFAULT_REGION"]
47
+ try:
48
+ supported_regions = retrieve_supported_regions()
49
+ except ProfileNotFound as e:
50
+ _restore_region(region_backup)
51
+ raise BadRequestException(str(e))
52
+ if region not in supported_regions:
53
+ _restore_region(region_backup)
51
54
  raise BadRequestException(f"invalid or unsupported region '{region}'")
52
55
 
53
56
 
57
+ def _restore_region(region_backup):
58
+ if region_backup:
59
+ os.environ["AWS_DEFAULT_REGION"] = region_backup
60
+ else:
61
+ del os.environ["AWS_DEFAULT_REGION"]
62
+
63
+
54
64
  def configure_aws_region_from_config(region: Union[None, str], config_str: str):
55
65
  """Set the region based on either the configuration or theregion parameter."""
56
66
  # Allow parsing errors to pass through as they will be caught by later functions
@@ -62,7 +72,10 @@ def configure_aws_region_from_config(region: Union[None, str], config_str: str):
62
72
  if region and config_region and region != config_region:
63
73
  raise BadRequestException("region is set in both parameter and configuration and conflicts.")
64
74
 
65
- _set_region(region or config_region or boto3.Session().region_name)
75
+ try:
76
+ _set_region(region or config_region or boto3.Session().region_name)
77
+ except ProfileNotFound as e:
78
+ raise BadRequestException(str(e))
66
79
 
67
80
 
68
81
  def configure_aws_region():
@@ -77,7 +90,10 @@ def configure_aws_region():
77
90
  def _decorator_validate_region(func):
78
91
  @functools.wraps(func)
79
92
  def _wrapper_validate_region(*args, **kwargs):
80
- _set_region(kwargs.get("region") or boto3.Session().region_name)
93
+ try:
94
+ _set_region(kwargs.get("region") or boto3.Session().region_name)
95
+ except ProfileNotFound as e:
96
+ raise BadRequestException(str(e))
81
97
  return func(*args, **kwargs)
82
98
 
83
99
  return _wrapper_validate_region
@@ -30,8 +30,6 @@ class ComputeFleetStatus(Model):
30
30
  STOPPING = "STOPPING"
31
31
  STOPPED = "STOPPED"
32
32
  UNKNOWN = "UNKNOWN"
33
- ENABLED = "ENABLED"
34
- DISABLED = "DISABLED"
35
33
 
36
34
  def __init__(self):
37
35
  """ComputeFleetStatus - a model defined in OpenAPI"""
@@ -24,8 +24,6 @@ class RequestedComputeFleetStatus(Model):
24
24
  """
25
25
  START_REQUESTED = "START_REQUESTED"
26
26
  STOP_REQUESTED = "STOP_REQUESTED"
27
- ENABLED = "ENABLED"
28
- DISABLED = "DISABLED"
29
27
 
30
28
  def __init__(self):
31
29
  """RequestedComputeFleetStatus - a model defined in OpenAPI"""
@@ -2,7 +2,7 @@ openapi: 3.0.2
2
2
  info:
3
3
  description: ParallelCluster API
4
4
  title: ParallelCluster
5
- version: 3.15.0
5
+ version: 3.16.0
6
6
  servers:
7
7
  - url: /
8
8
  # override: auth is defined the the API GW level
@@ -10,7 +10,6 @@
10
10
  # limitations under the License.
11
11
  import os
12
12
 
13
- from pcluster.aws.batch import BatchClient
14
13
  from pcluster.aws.cfn import CfnClient
15
14
  from pcluster.aws.dynamo import DynamoResource
16
15
  from pcluster.aws.ec2 import Ec2Client
@@ -22,6 +21,7 @@ from pcluster.aws.imagebuilder import ImageBuilderClient
22
21
  from pcluster.aws.kms import KmsClient
23
22
  from pcluster.aws.logs import LogsClient
24
23
  from pcluster.aws.resource_groups import ResourceGroupsClient
24
+ from pcluster.aws.resource_groups_tagging_api import ResourceGroupsTaggingApiClient
25
25
  from pcluster.aws.route53 import Route53Client
26
26
  from pcluster.aws.s3 import S3Client
27
27
  from pcluster.aws.s3_resource import S3Resource
@@ -44,7 +44,6 @@ class AWSApi:
44
44
  def __init__(self):
45
45
  self.aws_region = os.environ.get("AWS_DEFAULT_REGION")
46
46
 
47
- self._batch = None
48
47
  self._cfn = None
49
48
  self._ec2 = None
50
49
  self._efs = None
@@ -63,6 +62,7 @@ class AWSApi:
63
62
  self._secretsmanager = None
64
63
  self._ssm = None
65
64
  self._resource_groups = None
65
+ self._resource_groups_tagging_api = None
66
66
 
67
67
  @property
68
68
  def cfn(self):
@@ -71,13 +71,6 @@ class AWSApi:
71
71
  self._cfn = CfnClient()
72
72
  return self._cfn
73
73
 
74
- @property
75
- def batch(self):
76
- """AWS Batch client."""
77
- if not self._batch:
78
- self._batch = BatchClient()
79
- return self._batch
80
-
81
74
  @property
82
75
  def ec2(self):
83
76
  """EC2 client."""
@@ -190,6 +183,13 @@ class AWSApi:
190
183
  self._resource_groups = ResourceGroupsClient()
191
184
  return self._resource_groups
192
185
 
186
+ @property
187
+ def resource_groups_tagging_api(self):
188
+ """Resource Groups Tagging API client."""
189
+ if not self._resource_groups_tagging_api:
190
+ self._resource_groups_tagging_api = ResourceGroupsTaggingApiClient()
191
+ return self._resource_groups_tagging_api
192
+
193
193
  @staticmethod
194
194
  def instance():
195
195
  """Return the singleton AWSApi instance."""
@@ -315,6 +315,7 @@ class Ec2Client(Boto3Client):
315
315
 
316
316
  filters = [{"Name": "name", "Values": [name]}]
317
317
  filters.extend([{"Name": f"tag:{tag.key}", "Values": [tag.value]} for tag in tags])
318
+ filters.append({"Name": "state", "Values": ["available"]})
318
319
  images = self._describe_images_with_pagination(Owners=[owner], Filters=filters, IncludeDeprecated=True)
319
320
  if not images:
320
321
  raise AWSClientError(function_name="describe_images", message="Cannot find official ParallelCluster AMI")
@@ -40,6 +40,15 @@ class ElbClient(Boto3Client):
40
40
  response = self._client.describe_load_balancers(**describe_load_balancers_kwargs)
41
41
  return response["LoadBalancers"], response.get("NextMarker")
42
42
 
43
+ @AWSExceptionHandler.handle_client_exception
44
+ def describe_load_balancer(self, load_balancer_arn: str) -> Any:
45
+ """Retrieve the load balancer matching the given ARN, or None if not found."""
46
+ if not load_balancer_arn:
47
+ return None
48
+ response = self._client.describe_load_balancers(LoadBalancerArns=[load_balancer_arn])
49
+ load_balancers = response.get("LoadBalancers", [])
50
+ return load_balancers[0] if load_balancers else None
51
+
43
52
  @AWSExceptionHandler.handle_client_exception
44
53
  def describe_tags(self, load_balancer_arns: []):
45
54
  """Retrieve a list of tags associated to the load balancer arns provided as parameter."""
@@ -9,7 +9,7 @@
9
9
  # OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and
10
10
  # limitations under the License.
11
11
 
12
- from pcluster.aws.common import AWSExceptionHandler, Boto3Client
12
+ from pcluster.aws.common import AWSExceptionHandler, Boto3Client, Cache
13
13
 
14
14
 
15
15
  class IamClient(Boto3Client):
@@ -18,6 +18,7 @@ class IamClient(Boto3Client):
18
18
  def __init__(self):
19
19
  super().__init__("iam")
20
20
 
21
+ @Cache.cached
21
22
  @AWSExceptionHandler.handle_client_exception
22
23
  def get_policy(self, iam_policy):
23
24
  """Get policy information."""
@@ -0,0 +1,47 @@
1
+ # Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
4
+ # with the License. A copy of the License is located at
5
+ #
6
+ # http://aws.amazon.com/apache2.0/
7
+ #
8
+ # or in the "LICENSE.txt" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
9
+ # OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+ from typing import Dict, List
12
+
13
+ from pcluster.aws.common import AWSExceptionHandler, Boto3Client
14
+
15
+
16
+ class ResourceGroupsTaggingApiClient(Boto3Client):
17
+ """Implement Resource Groups Tagging API Boto3 client."""
18
+
19
+ def __init__(self):
20
+ super().__init__("resourcegroupstaggingapi")
21
+
22
+ @AWSExceptionHandler.handle_client_exception
23
+ def get_resources(self, tag_filters: Dict[str, str], resource_type_filters: List[str] = None) -> List[str]:
24
+ """
25
+ Return a list of resource ARNs matching the given tag filters and resource type filters.
26
+
27
+ :param tag_filters: dictionary of tag key/value pairs that resources must match (AND semantics).
28
+ :param resource_type_filters: list of resource type filters (e.g. ["elasticloadbalancing:loadbalancer"]).
29
+ :return: list of resource ARNs matching the filters.
30
+ """
31
+ arns = []
32
+ kwargs = {
33
+ "TagFilters": [{"Key": key, "Values": [value]} for key, value in tag_filters.items()],
34
+ }
35
+ if resource_type_filters:
36
+ kwargs["ResourceTypeFilters"] = resource_type_filters
37
+
38
+ pagination_tkn = ""
39
+ while True:
40
+ if pagination_tkn:
41
+ kwargs["PaginationToken"] = pagination_tkn
42
+ response = self._client.get_resources(**kwargs)
43
+ arns.extend(resource["ResourceARN"] for resource in response.get("ResourceTagMappingList", []))
44
+ pagination_tkn = response.get("PaginationToken", "")
45
+ if not pagination_tkn:
46
+ break
47
+ return arns
@@ -41,9 +41,10 @@ from pcluster.constants import (
41
41
  DEFAULT_MIN_COUNT,
42
42
  MAX_NUMBER_OF_COMPUTE_RESOURCES_PER_CLUSTER,
43
43
  MAX_NUMBER_OF_QUEUES,
44
+ SUPPORTED_OSES,
44
45
  SUPPORTED_SCHEDULERS,
45
46
  )
46
- from pcluster.utils import error, get_supported_os_for_scheduler
47
+ from pcluster.utils import error
47
48
  from pcluster.validators.cluster_validators import NameValidator
48
49
 
49
50
  LOGGER = logging.getLogger(__name__)
@@ -146,10 +147,7 @@ def configure(args): # noqa: C901
146
147
 
147
148
  scheduler = prompt_iterable("Scheduler", SUPPORTED_SCHEDULERS)
148
149
 
149
- if scheduler == "awsbatch":
150
- base_os = "alinux2"
151
- else:
152
- base_os = prompt_iterable("Operating System", get_supported_os_for_scheduler(scheduler))
150
+ base_os = prompt_iterable("Operating System", SUPPORTED_OSES)
153
151
 
154
152
  default_instance_type = AWSApi.instance().ec2.get_default_instance_type()
155
153
  head_node_instance_type = prompt(
@@ -157,18 +155,14 @@ def configure(args): # noqa: C901
157
155
  lambda x: x in AWSApi.instance().ec2.list_instance_types(),
158
156
  default_value=default_instance_type,
159
157
  )
160
- if scheduler == "awsbatch":
161
- number_of_queues = 1
162
- size_name = "vCPU"
163
- else:
164
- number_of_queues = int(
165
- prompt(
166
- "Number of queues",
167
- lambda x: str(x).isdigit() and 1 <= int(x) <= MAX_NUMBER_OF_QUEUES,
168
- default_value=1,
169
- )
158
+ number_of_queues = int(
159
+ prompt(
160
+ "Number of queues",
161
+ lambda x: str(x).isdigit() and 1 <= int(x) <= MAX_NUMBER_OF_QUEUES,
162
+ default_value=1,
170
163
  )
171
- size_name = "instance count"
164
+ )
165
+ size_name = "instance count"
172
166
 
173
167
  queues = []
174
168
  queue_names = []
@@ -188,47 +182,42 @@ def configure(args): # noqa: C901
188
182
  "name."
189
183
  )
190
184
 
191
- if scheduler == "awsbatch":
192
- number_of_compute_resources = 1
193
- else:
194
- crs_per_queue_limit = MAX_NUMBER_OF_COMPUTE_RESOURCES_PER_CLUSTER // number_of_queues
185
+ crs_per_queue_limit = MAX_NUMBER_OF_COMPUTE_RESOURCES_PER_CLUSTER // number_of_queues
195
186
 
196
- number_of_compute_resources = int(
197
- prompt(
198
- f"Number of compute resources for {queue_name}",
199
- validator=lambda x, q=crs_per_queue_limit: str(x).isdigit() and 1 <= int(x) <= q,
200
- default_value=1,
201
- )
187
+ number_of_compute_resources = int(
188
+ prompt(
189
+ f"Number of compute resources for {queue_name}",
190
+ validator=lambda x, q=crs_per_queue_limit: str(x).isdigit() and 1 <= int(x) <= q,
191
+ default_value=1,
202
192
  )
193
+ )
203
194
  compute_resources = []
204
195
  efa_enabled_in_queue = False
205
196
  for compute_resource_index in range(number_of_compute_resources):
206
197
  efa_enabled_in_compute_resource = False
207
- efa_supported_by_instance_type = False
208
- if scheduler != "awsbatch":
209
- while True:
210
- compute_instance_type = prompt(
211
- f"Compute instance type for compute resource {compute_resource_index + 1} in {queue_name}",
212
- validator=lambda x: x in AWSApi.instance().ec2.list_instance_types(),
213
- default_value=default_instance_type,
214
- )
215
- if compute_instance_type not in [
216
- instances["InstanceType"]
217
- for compute_resource in compute_resources
218
- for instances in compute_resource["Instances"]
219
- ]:
220
- break
221
- print(
222
- f"Error: Instance type {compute_instance_type} cannot be specified for multiple compute "
223
- "resources in the same queue. Please insert a different instance type."
224
- )
225
- compute_resource_name = re.sub(r"[^A-Za-z0-9]", "", compute_instance_type)
226
-
227
- efa_supported_by_instance_type = instance_type_supports_efa(compute_instance_type)
228
- if efa_supported_by_instance_type:
229
- efa_enabled_in_compute_resource = _prompt_for_efa(compute_instance_type)
230
- if efa_enabled_in_compute_resource:
231
- efa_enabled_in_queue = True
198
+ while True:
199
+ compute_instance_type = prompt(
200
+ f"Compute instance type for compute resource {compute_resource_index + 1} in {queue_name}",
201
+ validator=lambda x: x in AWSApi.instance().ec2.list_instance_types(),
202
+ default_value=default_instance_type,
203
+ )
204
+ if compute_instance_type not in [
205
+ instances["InstanceType"]
206
+ for compute_resource in compute_resources
207
+ for instances in compute_resource["Instances"]
208
+ ]:
209
+ break
210
+ print(
211
+ f"Error: Instance type {compute_instance_type} cannot be specified for multiple compute "
212
+ "resources in the same queue. Please insert a different instance type."
213
+ )
214
+ compute_resource_name = re.sub(r"[^A-Za-z0-9]", "", compute_instance_type)
215
+
216
+ efa_supported_by_instance_type = instance_type_supports_efa(compute_instance_type)
217
+ if efa_supported_by_instance_type:
218
+ efa_enabled_in_compute_resource = _prompt_for_efa(compute_instance_type)
219
+ if efa_enabled_in_compute_resource:
220
+ efa_enabled_in_queue = True
232
221
  min_cluster_size = DEFAULT_MIN_COUNT
233
222
  max_cluster_size = int(
234
223
  prompt(
@@ -237,31 +226,20 @@ def configure(args): # noqa: C901
237
226
  default_value=DEFAULT_MAX_COUNT,
238
227
  )
239
228
  )
240
- if scheduler == "awsbatch":
241
- compute_resources.append(
242
- {
243
- "Name": "optimal",
244
- "InstanceTypes": ["optimal"],
245
- "MinvCpus": min_cluster_size,
246
- "DesiredvCpus": min_cluster_size,
247
- "MaxvCpus": max_cluster_size,
248
- }
249
- )
250
- else:
251
- compute_resource = {
252
- "Name": compute_resource_name,
253
- "Instances": [{"InstanceType": compute_instance_type}],
254
- "MinCount": min_cluster_size,
255
- "MaxCount": max_cluster_size,
256
- }
257
- if efa_supported_by_instance_type:
258
- compute_resource["Efa"] = {"Enabled": efa_enabled_in_compute_resource}
259
-
260
- compute_resources.append(compute_resource)
261
- compute_instance_types.append(compute_instance_type)
229
+ compute_resource = {
230
+ "Name": compute_resource_name,
231
+ "Instances": [{"InstanceType": compute_instance_type}],
232
+ "MinCount": min_cluster_size,
233
+ "MaxCount": max_cluster_size,
234
+ }
235
+ if efa_supported_by_instance_type:
236
+ compute_resource["Efa"] = {"Enabled": efa_enabled_in_compute_resource}
237
+
238
+ compute_resources.append(compute_resource)
239
+ compute_instance_types.append(compute_instance_type)
262
240
 
263
241
  queue_names.append(queue_name)
264
- cluster_size += max_cluster_size # Fixme: is it the right calculation for awsbatch?
242
+ cluster_size += max_cluster_size
265
243
 
266
244
  queue = {
267
245
  "Name": queue_name,
@@ -279,7 +257,7 @@ def configure(args): # noqa: C901
279
257
 
280
258
  queues.append(queue)
281
259
 
282
- vpc_parameters = _create_vpc_parameters(scheduler, head_node_instance_type, compute_instance_types, cluster_size)
260
+ vpc_parameters = _create_vpc_parameters(head_node_instance_type, compute_instance_types, cluster_size)
283
261
 
284
262
  # Here is the end of prompt. Code below assembles config and write to file
285
263
  for queue in queues:
@@ -292,11 +270,7 @@ def configure(args): # noqa: C901
292
270
  "Networking": {"SubnetId": vpc_parameters["head_node_subnet_id"]},
293
271
  "Ssh": {"KeyName": key_name},
294
272
  }
295
- if scheduler == "awsbatch":
296
- scheduler_prefix = "AwsBatch"
297
- head_node_config["Imds"] = {"Secured": False}
298
- else:
299
- scheduler_prefix = scheduler.capitalize()
273
+ scheduler_prefix = scheduler.capitalize()
300
274
 
301
275
  result = {
302
276
  "Region": os.environ.get("AWS_DEFAULT_REGION"),
@@ -332,7 +306,7 @@ def _write_configuration_file(config_file_path, content):
332
306
  print(f"Configuration file written to {config_file_path}")
333
307
 
334
308
 
335
- def _create_vpc_parameters(scheduler, head_node_instance_type, compute_instance_types, cluster_size):
309
+ def _create_vpc_parameters(head_node_instance_type, compute_instance_types, cluster_size):
336
310
  vpc_parameters = {}
337
311
  min_subnet_size = int(cluster_size)
338
312
  vpc_and_subnets = _get_vpcs_and_subnets()
@@ -342,7 +316,7 @@ def _create_vpc_parameters(scheduler, head_node_instance_type, compute_instance_
342
316
  if not vpc_list or prompt("Automate VPC creation? (y/n)", lambda x: x in ("y", "n"), default_value="n") == "y":
343
317
  vpc_parameters.update(
344
318
  automate_vpc_with_subnet_creation(
345
- _choose_network_configuration(scheduler, head_node_instance_type, compute_instance_types),
319
+ _choose_network_configuration(head_node_instance_type, compute_instance_types),
346
320
  min_subnet_size,
347
321
  )
348
322
  )
@@ -351,11 +325,7 @@ def _create_vpc_parameters(scheduler, head_node_instance_type, compute_instance_
351
325
  vpc_parameters["vpc_id"] = vpc_id
352
326
  subnet_list = vpc_and_subnets["vpc_subnets"][vpc_id]
353
327
  qualified_head_node_subnets = _filter_subnets_offering_instance_types(subnet_list, [head_node_instance_type])
354
- if scheduler != "awsbatch":
355
- qualified_compute_subnets = _filter_subnets_offering_instance_types(subnet_list, compute_instance_types)
356
- else:
357
- # Special case of awsbatch, where compute instance type is not specified
358
- qualified_compute_subnets = subnet_list
328
+ qualified_compute_subnets = _filter_subnets_offering_instance_types(subnet_list, compute_instance_types)
359
329
  if (
360
330
  not qualified_head_node_subnets
361
331
  or not qualified_compute_subnets
@@ -378,7 +348,7 @@ def _create_vpc_parameters(scheduler, head_node_instance_type, compute_instance_
378
348
  vpc_parameters.update(
379
349
  automate_subnet_creation(
380
350
  vpc_id,
381
- _choose_network_configuration(scheduler, head_node_instance_type, compute_instance_types),
351
+ _choose_network_configuration(head_node_instance_type, compute_instance_types),
382
352
  min_subnet_size,
383
353
  )
384
354
  )
@@ -403,9 +373,7 @@ def _ask_for_subnets(subnet_list, qualified_head_node_subnets, qualified_compute
403
373
  return vpc_parameters
404
374
 
405
375
 
406
- def _choose_network_configuration(scheduler, head_node_instance_type, compute_instance_types):
407
- if scheduler == "awsbatch":
408
- return PublicPrivateNetworkConfig()
376
+ def _choose_network_configuration(head_node_instance_type, compute_instance_types):
409
377
  azs_for_head_node_type = AWSApi.instance().ec2.get_supported_az_for_instance_type(head_node_instance_type)
410
378
  azs_for_compute_types = _get_common_supported_az_for_multi_instance_types(compute_instance_types)
411
379
  common_availability_zones = set(azs_for_head_node_type) & set(azs_for_compute_types)
@@ -46,7 +46,7 @@ def get_default_suggestion(parameter, options):
46
46
  """
47
47
  # For these parameters, steer users towards a default value rather than selecting the first
48
48
  # from the available set of options.
49
- opinionated_suggestions = {"Scheduler": "slurm", "Operating System": "alinux2"}
49
+ opinionated_suggestions = {"Scheduler": "slurm", "Operating System": "alinux2023"}
50
50
 
51
51
  if parameter in opinionated_suggestions:
52
52
  default = opinionated_suggestions.get(parameter)