aws-parallelcluster 3.16.0__tar.gz → 3.16.2__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 (240) hide show
  1. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/PKG-INFO +2 -1
  2. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/setup.py +2 -1
  3. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/PKG-INFO +2 -1
  4. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/openapi/openapi.yaml +1 -1
  5. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/aws_resources.py +1 -1
  6. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/logs.py +24 -2
  7. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/cluster_config.py +25 -4
  8. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/common.py +18 -5
  9. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/constants.py +3 -29
  10. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/cluster.py +11 -4
  11. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/cluster_resources.py +21 -0
  12. aws_parallelcluster-3.16.2/src/pcluster/models/common.py +567 -0
  13. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/imagebuilder.py +8 -4
  14. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/imagebuilder/update_and_reboot.yaml +79 -8
  15. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/cdk_builder_utils.py +2 -13
  16. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/cluster_stack.py +31 -0
  17. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/imagebuilder_stack.py +1 -1
  18. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/queues_stack.py +3 -6
  19. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/utils.py +38 -2
  20. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/cluster_validators.py +32 -2
  21. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/common.py +3 -1
  22. aws_parallelcluster-3.16.0/src/pcluster/models/common.py +0 -326
  23. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/MANIFEST.in +0 -0
  24. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/README +0 -0
  25. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/setup.cfg +0 -0
  26. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/SOURCES.txt +0 -0
  27. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/dependency_links.txt +0 -0
  28. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/entry_points.txt +0 -0
  29. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/not-zip-safe +0 -0
  30. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/requires.txt +0 -0
  31. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/aws_parallelcluster.egg-info/top_level.txt +0 -0
  32. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/__init__.py +0 -0
  33. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/__init__.py +0 -0
  34. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/awslambda/__init__.py +0 -0
  35. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/awslambda/entrypoint.py +0 -0
  36. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/awslambda/serverless_wsgi.py +0 -0
  37. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/__init__.py +0 -0
  38. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/cluster_compute_fleet_controller.py +0 -0
  39. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/cluster_instances_controller.py +0 -0
  40. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/cluster_logs_controller.py +0 -0
  41. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/cluster_operations_controller.py +0 -0
  42. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/common.py +0 -0
  43. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/image_logs_controller.py +0 -0
  44. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/controllers/image_operations_controller.py +0 -0
  45. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/converters.py +0 -0
  46. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/encoder.py +0 -0
  47. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/errors.py +0 -0
  48. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/flask_app.py +0 -0
  49. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/__init__.py +0 -0
  50. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/ami_info.py +0 -0
  51. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/bad_request_exception_response_content.py +0 -0
  52. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/base_model_.py +0 -0
  53. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/build_image_bad_request_exception_response_content.py +0 -0
  54. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/build_image_request_content.py +0 -0
  55. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/build_image_response_content.py +0 -0
  56. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/change.py +0 -0
  57. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cloud_formation_resource_status.py +0 -0
  58. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cloud_formation_stack_status.py +0 -0
  59. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cluster_configuration_structure.py +0 -0
  60. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cluster_info_summary.py +0 -0
  61. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cluster_instance.py +0 -0
  62. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cluster_status.py +0 -0
  63. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/cluster_status_filtering_option.py +0 -0
  64. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/compute_fleet_status.py +0 -0
  65. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/config_validation_message.py +0 -0
  66. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/conflict_exception_response_content.py +0 -0
  67. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/create_cluster_bad_request_exception_response_content.py +0 -0
  68. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/create_cluster_request_content.py +0 -0
  69. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/create_cluster_response_content.py +0 -0
  70. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/delete_cluster_response_content.py +0 -0
  71. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/delete_image_response_content.py +0 -0
  72. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/describe_cluster_instances_response_content.py +0 -0
  73. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/describe_cluster_response_content.py +0 -0
  74. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/describe_compute_fleet_response_content.py +0 -0
  75. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/describe_image_response_content.py +0 -0
  76. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/dryrun_operation_exception_response_content.py +0 -0
  77. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/ec2_ami_info.py +0 -0
  78. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/ec2_ami_info_summary.py +0 -0
  79. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/ec2_ami_state.py +0 -0
  80. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/ec2_instance.py +0 -0
  81. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/failure.py +0 -0
  82. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/get_cluster_log_events_response_content.py +0 -0
  83. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/get_cluster_stack_events_response_content.py +0 -0
  84. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/get_image_log_events_response_content.py +0 -0
  85. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/get_image_stack_events_response_content.py +0 -0
  86. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/image_build_status.py +0 -0
  87. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/image_builder_image_status.py +0 -0
  88. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/image_configuration_structure.py +0 -0
  89. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/image_info_summary.py +0 -0
  90. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/image_status_filtering_option.py +0 -0
  91. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/instance_state.py +0 -0
  92. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/internal_service_exception_response_content.py +0 -0
  93. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/limit_exceeded_exception_response_content.py +0 -0
  94. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/list_cluster_log_streams_response_content.py +0 -0
  95. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/list_clusters_response_content.py +0 -0
  96. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/list_image_log_streams_response_content.py +0 -0
  97. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/list_images_response_content.py +0 -0
  98. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/list_official_images_response_content.py +0 -0
  99. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/log_event.py +0 -0
  100. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/log_stream.py +0 -0
  101. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/login_nodes_pool.py +0 -0
  102. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/login_nodes_state.py +0 -0
  103. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/metadata.py +0 -0
  104. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/node_type.py +0 -0
  105. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/not_found_exception_response_content.py +0 -0
  106. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/requested_compute_fleet_status.py +0 -0
  107. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/scheduler.py +0 -0
  108. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/stack_event.py +0 -0
  109. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/tag.py +0 -0
  110. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/unauthorized_client_error_response_content.py +0 -0
  111. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/update_cluster_bad_request_exception_response_content.py +0 -0
  112. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/update_cluster_request_content.py +0 -0
  113. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/update_cluster_response_content.py +0 -0
  114. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/update_compute_fleet_request_content.py +0 -0
  115. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/update_compute_fleet_response_content.py +0 -0
  116. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/update_error.py +0 -0
  117. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/models/validation_level.py +0 -0
  118. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/openapi/__init__.py +0 -0
  119. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/typing_utils.py +0 -0
  120. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/api/util.py +0 -0
  121. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/__init__.py +0 -0
  122. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/aws_api.py +0 -0
  123. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/cfn.py +0 -0
  124. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/common.py +0 -0
  125. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/dynamo.py +0 -0
  126. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/ec2.py +0 -0
  127. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/efs.py +0 -0
  128. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/elb.py +0 -0
  129. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/fsx.py +0 -0
  130. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/iam.py +0 -0
  131. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/imagebuilder.py +0 -0
  132. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/kms.py +0 -0
  133. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/resource_groups.py +0 -0
  134. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/resource_groups_tagging_api.py +0 -0
  135. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/route53.py +0 -0
  136. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/s3.py +0 -0
  137. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/s3_resource.py +0 -0
  138. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/secretsmanager.py +0 -0
  139. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/ssm.py +0 -0
  140. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/aws/sts.py +0 -0
  141. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/__init__.py +0 -0
  142. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/__init__.py +0 -0
  143. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/cluster_logs.py +0 -0
  144. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/commands.py +0 -0
  145. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/common.py +0 -0
  146. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/configure/__init__.py +0 -0
  147. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/configure/command.py +0 -0
  148. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/configure/easyconfig.py +0 -0
  149. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/configure/networking.py +0 -0
  150. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/configure/subnet_computation.py +0 -0
  151. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/configure/utils.py +0 -0
  152. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/dcv_connect.py +0 -0
  153. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/dcv_util.py +0 -0
  154. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/image_logs.py +0 -0
  155. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/ssh.py +0 -0
  156. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/commands/version.py +0 -0
  157. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/entrypoint.py +0 -0
  158. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/exceptions.py +0 -0
  159. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/logger.py +0 -0
  160. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/middleware.py +0 -0
  161. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/cli/model.py +0 -0
  162. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/__init__.py +0 -0
  163. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/config_patch.py +0 -0
  164. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/imagebuilder_config.py +0 -0
  165. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/update_policy.py +0 -0
  166. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/config/update_policy_utils.py +0 -0
  167. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/imagebuilder_utils.py +0 -0
  168. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/launch_template_utils.py +0 -0
  169. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/lib/__init__.py +0 -0
  170. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/lib/lib.py +0 -0
  171. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/__init__.py +0 -0
  172. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/compute_fleet_status_manager.py +0 -0
  173. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/imagebuilder_resources.py +0 -0
  174. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/login_nodes_status.py +0 -0
  175. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/models/s3_bucket.py +0 -0
  176. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/networking/__init__.py +0 -0
  177. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/networking/vpc_factory.py +0 -0
  178. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/alinux2/Dockerfile +0 -0
  179. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/alinux2023/Dockerfile +0 -0
  180. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/build-docker-images.sh +0 -0
  181. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/buildspec.yml +0 -0
  182. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/scripts/entrypoint.sh +0 -0
  183. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/scripts/generate_hostfile.sh +0 -0
  184. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/scripts/modify_yum_vars.sh +0 -0
  185. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/scripts/mount_efs.sh +0 -0
  186. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/scripts/mount_nfs.sh +0 -0
  187. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/batch/docker/upload-docker-images.sh +0 -0
  188. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/compute_node/user_data.sh +0 -0
  189. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/__init__.py +0 -0
  190. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/cleanup_resources.py +0 -0
  191. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/LICENSE +0 -0
  192. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/NOTICE +0 -0
  193. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/__init__.py +0 -0
  194. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/log_helper.py +0 -0
  195. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/resource_helper.py +0 -0
  196. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/crhelper/utils.py +0 -0
  197. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/delete_image_stack.py +0 -0
  198. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/manage_docker_images.py +0 -0
  199. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/custom_resources/custom_resources_code/send_build_notification.py +0 -0
  200. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/head_node/user_data.sh +0 -0
  201. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/imagebuilder/custom_script.yaml +0 -0
  202. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/imagebuilder/parallelcluster.yaml +0 -0
  203. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/imagebuilder/parallelcluster_tag.yaml +0 -0
  204. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/imagebuilder/parallelcluster_test.yaml +0 -0
  205. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/login_node/user_data.sh +0 -0
  206. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/resources/supported-regions +0 -0
  207. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/schemas/__init__.py +0 -0
  208. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/schemas/cluster_schema.py +0 -0
  209. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/schemas/common_schema.py +0 -0
  210. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/schemas/imagebuilder_schema.py +0 -0
  211. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/__init__.py +0 -0
  212. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/cdk_artifacts_manager.py +0 -0
  213. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/cdk_builder.py +0 -0
  214. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/compute_fleet_stack.py +0 -0
  215. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/cw_dashboard_builder.py +0 -0
  216. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/import_cdk.py +0 -0
  217. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/login_nodes_stack.py +0 -0
  218. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/templates/slurm_builder.py +0 -0
  219. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/__init__.py +0 -0
  220. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/database_validators.py +0 -0
  221. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/dev_settings_validators.py +0 -0
  222. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/directory_service_validators.py +0 -0
  223. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/ebs_validators.py +0 -0
  224. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/ec2_validators.py +0 -0
  225. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/efs_validators.py +0 -0
  226. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/feature_validators.py +0 -0
  227. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/fsx_validators.py +0 -0
  228. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/iam_validators.py +0 -0
  229. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/imagebuilder_validators.py +0 -0
  230. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/instances_validators.py +0 -0
  231. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/kms_validators.py +0 -0
  232. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/monitoring_validators.py +0 -0
  233. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/networking_validators.py +0 -0
  234. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/s3_validators.py +0 -0
  235. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/secret_validators.py +0 -0
  236. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/slurm_settings_validator.py +0 -0
  237. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/tags_validators.py +0 -0
  238. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster/validators/utils.py +0 -0
  239. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster3_config_converter/__init__.py +0 -0
  240. {aws_parallelcluster-3.16.0 → aws_parallelcluster-3.16.2}/src/pcluster3_config_converter/pcluster3_config_converter.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-parallelcluster
3
- Version: 3.16.0
3
+ Version: 3.16.2
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
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
20
21
  Classifier: Topic :: Scientific/Engineering
21
22
  Classifier: License :: OSI Approved :: Apache Software License
22
23
  Requires-Python: >=3.9
@@ -20,7 +20,7 @@ def readme():
20
20
  return f.read()
21
21
 
22
22
 
23
- VERSION = "3.16.0"
23
+ VERSION = "3.16.2"
24
24
  CDK_VERSION = "1.164"
25
25
  REQUIRES = [
26
26
  "setuptools",
@@ -93,6 +93,7 @@ setup(
93
93
  "Programming Language :: Python :: 3.11",
94
94
  "Programming Language :: Python :: 3.12",
95
95
  "Programming Language :: Python :: 3.13",
96
+ "Programming Language :: Python :: 3.14",
96
97
  "Topic :: Scientific/Engineering",
97
98
  "License :: OSI Approved :: Apache Software License",
98
99
  ],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-parallelcluster
3
- Version: 3.16.0
3
+ Version: 3.16.2
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
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
20
21
  Classifier: Topic :: Scientific/Engineering
21
22
  Classifier: License :: OSI Approved :: Apache Software License
22
23
  Requires-Python: >=3.9
@@ -2,7 +2,7 @@ openapi: 3.0.2
2
2
  info:
3
3
  description: ParallelCluster API
4
4
  title: ParallelCluster
5
- version: 3.16.0
5
+ version: 3.16.2
6
6
  servers:
7
7
  - url: /
8
8
  # override: auth is defined the the API GW level
@@ -391,7 +391,7 @@ class FsxStorageInfo:
391
391
  @property
392
392
  def network_interface_ids(self):
393
393
  """Return network interface ids of the file system."""
394
- return self.file_storage_info.get("NetworkInterfaceIds")
394
+ return self.file_storage_info.get("NetworkInterfaceIds", [])
395
395
 
396
396
  @property
397
397
  def subnet_ids(self):
@@ -49,7 +49,7 @@ class LogsClient(Boto3Client):
49
49
 
50
50
  @AWSExceptionHandler.handle_client_exception
51
51
  def filter_log_events(self, log_group_name, start_time=None, end_time=None, log_stream_name_prefix=None):
52
- """Return the list of events included in a specific time window for a given group name."""
52
+ """Return the FilterLogEvents response for a specific time window for a given group name."""
53
53
  kwargs = {"logGroupName": log_group_name, "limit": 1}
54
54
  if start_time:
55
55
  kwargs["startTime"] = start_time
@@ -57,7 +57,7 @@ class LogsClient(Boto3Client):
57
57
  kwargs["endTime"] = end_time
58
58
  if log_stream_name_prefix:
59
59
  kwargs["logStreamNamePrefix"] = log_stream_name_prefix
60
- return self._client.filter_log_events(**kwargs).get("events")
60
+ return self._client.filter_log_events(**kwargs)
61
61
 
62
62
  @AWSExceptionHandler.handle_client_exception
63
63
  def get_log_events(
@@ -121,6 +121,28 @@ class LogsClient(Boto3Client):
121
121
  )
122
122
  return tasks[0].get("status").get("code")
123
123
 
124
+ @AWSExceptionHandler.handle_client_exception
125
+ def get_active_export_tasks(self):
126
+ """Return the CloudWatch Logs export tasks that are currently active (PENDING or RUNNING).
127
+
128
+ CloudWatch Logs allows only one active export task per account at a time, so this is used to give
129
+ a clear "an export is already running, please wait" message instead of a raw LimitExceededException
130
+ when a second export is attempted (e.g. after the user interrupts and reruns the command).
131
+ """
132
+ active_tasks = []
133
+ for status_code in ("PENDING", "PENDING_CANCEL", "RUNNING"):
134
+ next_token = None
135
+ while True:
136
+ kwargs = {"statusCode": status_code}
137
+ if next_token:
138
+ kwargs["nextToken"] = next_token
139
+ response = self._client.describe_export_tasks(**kwargs)
140
+ active_tasks.extend(response.get("exportTasks", []))
141
+ next_token = response.get("nextToken")
142
+ if not next_token:
143
+ break
144
+ return active_tasks
145
+
124
146
  @AWSExceptionHandler.handle_client_exception
125
147
  def describe_log_streams(self, log_group_name, log_stream_name_prefix=None, next_token=None):
126
148
  """Return a list of log streams in the given log group, filtered by the given prefix."""
@@ -30,10 +30,7 @@ from pcluster.config.common import (
30
30
  DefaultUserHomeType,
31
31
  )
32
32
  from pcluster.config.common import Imds as TopLevelImds
33
- from pcluster.config.common import (
34
- Resource,
35
- SharedStorageType,
36
- )
33
+ from pcluster.config.common import Resource, SharedStorageType
37
34
  from pcluster.constants import (
38
35
  CIDR_ALL_IPS,
39
36
  COMPUTE_INSTANCE_INFO_TIMEOUT,
@@ -67,6 +64,7 @@ from pcluster.constants import (
67
64
  Feature,
68
65
  )
69
66
  from pcluster.utils import (
67
+ create_hash_suffix,
70
68
  get_attr,
71
69
  get_partition,
72
70
  get_resource_name_from_resource_arn,
@@ -96,6 +94,7 @@ from pcluster.validators.cluster_validators import (
96
94
  InstanceArchitectureCompatibilityValidator,
97
95
  IntelHpcArchitectureValidator,
98
96
  IntelHpcOsValidator,
97
+ ManagedFsxCrossAzValidator,
99
98
  ManagedFsxMultiAzValidator,
100
99
  MaxCountValidator,
101
100
  MixedSecurityGroupOverwriteValidator,
@@ -1622,6 +1621,16 @@ class BaseClusterConfig(Resource):
1622
1621
  self.deployment_settings = deployment_settings
1623
1622
  self.managed_head_node_security_group = None
1624
1623
  self.managed_compute_security_group = None
1624
+ # Dictionary {mount target logical id: subnet id} with an entry for each EFS mount target of the deployed stack,
1625
+ # e.g. {"EFS2395b171bc347024MTuswest2a": "subnet-12345678"}.
1626
+ # It is set during update to keep each mount target in its current subnet: EFS allows a single mount target
1627
+ # per AZ, so moving a mount target to another subnet of the same AZ would make the stack update fail.
1628
+ self.existing_efs_mount_target_subnets = {}
1629
+ # Dictionary {file system logical id: subnet ids} with an entry for each FSx file system of the deployed stack,
1630
+ # e.g. {"FSX3c9d7e6a8c2b1f05": ["subnet-12345678"]}.
1631
+ # It is set during update to keep each managed FSx in its current subnet: changing the subnet of an FSx
1632
+ # replaces the file system, deleting the existing one and its data.
1633
+ self.existing_fsx_file_system_subnets = {}
1625
1634
  self.instance_types_data_version = ""
1626
1635
 
1627
1636
  def _register_validators(self, context: ValidatorContext = None): # noqa: D102 #pylint: disable=unused-argument
@@ -1800,6 +1809,18 @@ class BaseClusterConfig(Resource):
1800
1809
  queues=queues,
1801
1810
  fsx_az_list=storage.file_system_availability_zones,
1802
1811
  )
1812
+ if isinstance(storage, SharedFsxLustre) and not storage.is_unmanaged:
1813
+ # During update, the existing file system is kept in its subnets, see existing_fsx_file_system_subnets
1814
+ existing_subnet_ids = self.existing_fsx_file_system_subnets.get(
1815
+ f"{SharedStorageType.FSX.name}{create_hash_suffix(storage.name)}"
1816
+ )
1817
+ if existing_subnet_ids:
1818
+ self._register_validator(
1819
+ ManagedFsxCrossAzValidator,
1820
+ fsx_name=storage.name,
1821
+ fsx_subnet_ids=existing_subnet_ids,
1822
+ compute_subnet_ids=compute_subnet_ids,
1823
+ )
1803
1824
  if isinstance(storage, SharedEbs):
1804
1825
  ebs_volumes.append(storage)
1805
1826
 
@@ -20,6 +20,7 @@ from abc import ABC, abstractmethod
20
20
  from enum import Enum
21
21
  from typing import List, Set
22
22
 
23
+ from pcluster.utils import event_loop
23
24
  from pcluster.validators.common import AsyncValidator, FailureLevel, ValidationResult, Validator, ValidatorContext
24
25
  from pcluster.validators.dev_settings_validators import ExtraChefAttributesValidator
25
26
  from pcluster.validators.iam_validators import AdditionalIamPolicyValidator
@@ -208,11 +209,9 @@ class Resource:
208
209
  # if they are taking too long to execute for a resource and its children since the use of
209
210
  # get_async_timed_validator_type_for allows to decorate only on single validator at a time and
210
211
  # does not cascade to child resources
211
- return list(
212
- itertools.chain.from_iterable(
213
- asyncio.get_event_loop().run_until_complete(asyncio.gather(*self._validation_futures))
214
- )
215
- )
212
+ with event_loop() as loop:
213
+ validation_results = loop.run_until_complete(asyncio.gather(*self._validation_futures))
214
+ return list(itertools.chain.from_iterable(validation_results))
216
215
 
217
216
  def _nested_resources(self):
218
217
  nested_resources = []
@@ -312,6 +311,20 @@ class BaseTag(Resource):
312
311
  self.value = Resource.init_param(value)
313
312
 
314
313
 
314
+ def merge_tags(*tag_lists):
315
+ """
316
+ Merge lists of Tag objects, deduplicating by key.
317
+
318
+ Later lists take precedence over earlier ones on duplicate keys, mirroring the tag precedence
319
+ applied at launch time (cluster < queue < compute resource). ``None`` lists are skipped.
320
+ """
321
+ merged = {}
322
+ for tags in tag_lists:
323
+ for tag in tags or []:
324
+ merged[tag.key] = tag
325
+ return list(merged.values())
326
+
327
+
315
328
  class AdditionalIamPolicy(Resource):
316
329
  """Represent the Additional IAM Policy configuration."""
317
330
 
@@ -39,7 +39,6 @@ SUPPORTED_OSES_FOR_P6E_GB200 = list(set(SUPPORTED_OSES) - set(UNSUPPORTED_OSES_F
39
39
  UNSUPPORTED_OSES_FOR_P6_B300 = []
40
40
  SUPPORTED_OSES_FOR_P6_B300 = list(set(SUPPORTED_OSES) - set(UNSUPPORTED_OSES_FOR_P6_B300))
41
41
  UNSUPPORTED_OSES_FOR_DCV = []
42
- UNSUPPORTED_OSES_FOR_NON_GPU_DCV = ["rocky9", "rhel9"]
43
42
  UNSUPPORTED_ARM_OSES_FOR_DCV = []
44
43
  UNSUPPORTED_OSES_FOR_LUSTRE = []
45
44
  DELETE_POLICY = "Delete"
@@ -135,7 +134,7 @@ EBS_VOLUME_TYPE_IOPS_DEFAULT = {
135
134
  }
136
135
  EBS_VOLUME_SIZE_DEFAULT = 40
137
136
  # This value must be greater than or equal to the AMI volume size
138
- EBS_ROOT_VOLUME_SIZE_DEFAULT = 45
137
+ EBS_ROOT_VOLUME_SIZE_DEFAULT = 50
139
138
  EBS_VOLUME_TYPE_DEFAULT = "gp3"
140
139
 
141
140
  DEFAULT_MAX_COUNT = 10
@@ -156,8 +155,8 @@ MAX_NEW_STORAGE_COUNT = {"efs": 1, "fsx": 1, "raid": 1}
156
155
  MAX_EXISTING_STORAGE_COUNT = {"efs": 20, "fsx": 20, "raid": 0}
157
156
 
158
157
  COOKBOOK_PACKAGES_VERSIONS = {
159
- "parallelcluster": "3.16.0",
160
- "cookbook": "aws-parallelcluster-cookbook-3.16.0",
158
+ "parallelcluster": "3.16.2",
159
+ "cookbook": "aws-parallelcluster-cookbook-3.16.2",
161
160
  "chef": "19.3.14",
162
161
  "ami": "dev",
163
162
  }
@@ -362,28 +361,3 @@ ULTRASERVER_CAPACITY_BLOCK_ALLOWED_SIZE_DICT = {
362
361
  }
363
362
  # Capacity Block states that are considered inactive (cannot check health status)
364
363
  CAPACITY_BLOCK_INACTIVE_STATES = ["scheduled", "payment-pending", "assessing", "delayed"]
365
-
366
- # Older generation instance types
367
- EXCLUDED_INSTANCE_TYPE_PREFIXES = (
368
- "m1",
369
- "m2",
370
- "m3",
371
- "m4",
372
- "t1",
373
- "t2",
374
- "c1",
375
- "c3",
376
- "c4",
377
- "r3",
378
- "r4",
379
- "x1",
380
- "x1e",
381
- "d2",
382
- "h1",
383
- "i2",
384
- "i3",
385
- "f1",
386
- "g3",
387
- "p2",
388
- "p3",
389
- )
@@ -55,6 +55,7 @@ from pcluster.models.common import (
55
55
  create_logs_archive,
56
56
  export_stack_events,
57
57
  parse_config,
58
+ sanitize_path_component,
58
59
  upload_archive,
59
60
  )
60
61
  from pcluster.models.compute_fleet_status_manager import ComputeFleetStatus, ComputeFleetStatusManager
@@ -487,6 +488,8 @@ class Cluster:
487
488
  if context.during_update:
488
489
  config.managed_head_node_security_group = self.stack.get_resource_physical_id("HeadNodeSecurityGroup")
489
490
  config.managed_compute_security_group = self.stack.get_resource_physical_id("ComputeSecurityGroup")
491
+ config.existing_efs_mount_target_subnets = self.stack.efs_mount_target_subnets
492
+ config.existing_fsx_file_system_subnets = self.stack.fsx_file_system_subnets
490
493
 
491
494
  validation_failures = config.validate(validator_suppressors, context)
492
495
  if any(f.level.value >= FailureLevel(validation_failure_level).value for f in validation_failures):
@@ -970,8 +973,9 @@ class Cluster:
970
973
 
971
974
  try:
972
975
  with tempfile.TemporaryDirectory() as output_tempdir:
973
- # Create root folder for the archive
974
- archive_name = f"{self.name}-logs-{datetime.now().strftime('%Y%m%d%H%M')}"
976
+ # Create root folder for the archive. Sanitize the identifier: it may be an ARN (deleted
977
+ # clusters can only be referenced by ARN), whose '/' and ':' would break local paths.
978
+ archive_name = f"{sanitize_path_component(self.name)}-logs-{datetime.now().strftime('%Y%m%d%H%M')}"
975
979
  root_archive_dir = os.path.join(output_tempdir, archive_name)
976
980
  os.makedirs(root_archive_dir, exist_ok=True)
977
981
 
@@ -997,8 +1001,11 @@ class Cluster:
997
1001
  {self.name},
998
1002
  )
999
1003
 
1000
- # Get stack events and write them into a file
1001
- stack_events_file = os.path.join(root_archive_dir, self._stack_events_stream_name)
1004
+ # Get stack events and write them into a file (sanitize: the stream name embeds the
1005
+ # stack identifier, which may be an ARN containing path separators).
1006
+ stack_events_file = os.path.join(
1007
+ root_archive_dir, sanitize_path_component(self._stack_events_stream_name)
1008
+ )
1002
1009
  export_stack_events(self.stack_name, stack_events_file)
1003
1010
 
1004
1011
  archive_path = create_logs_archive(root_archive_dir, output_file)
@@ -18,6 +18,7 @@ from pcluster.aws.aws_api import AWSApi
18
18
  from pcluster.aws.aws_resources import InstanceInfo, StackInfo
19
19
  from pcluster.constants import CW_LOGS_CFN_PARAM_NAME, OS_MAPPING, PCLUSTER_NODE_TYPE_TAG, PCLUSTER_VERSION_TAG
20
20
  from pcluster.models.common import FiltersParserError, LogGroupTimeFiltersParser, get_all_stack_events
21
+ from pcluster.utils import yaml_load
21
22
 
22
23
 
23
24
  class ClusterStack(StackInfo):
@@ -72,6 +73,26 @@ class ClusterStack(StackInfo):
72
73
  """Return the original official AMI."""
73
74
  return self._get_param("OfficialAmi")
74
75
 
76
+ @property
77
+ def efs_mount_target_subnets(self):
78
+ """Return the subnet of each EFS mount target in the stack template, keyed by the mount target logical id."""
79
+ resources = yaml_load(AWSApi.instance().cfn.get_stack_template(self.name)).get("Resources", {})
80
+ return {
81
+ logical_id: resource["Properties"]["SubnetId"]
82
+ for logical_id, resource in resources.items()
83
+ if resource.get("Type") == "AWS::EFS::MountTarget"
84
+ }
85
+
86
+ @property
87
+ def fsx_file_system_subnets(self):
88
+ """Return the subnets of each FSx file system in the stack template, keyed by the file system logical id."""
89
+ resources = yaml_load(AWSApi.instance().cfn.get_stack_template(self.name)).get("Resources", {})
90
+ return {
91
+ logical_id: resource["Properties"]["SubnetIds"]
92
+ for logical_id, resource in resources.items()
93
+ if resource.get("Type") == "AWS::FSx::FileSystem"
94
+ }
95
+
75
96
  def delete(self):
76
97
  """Delete stack."""
77
98
  AWSApi.instance().cfn.delete_stack(self.name)