Skip to content

Commit f009b2a

Browse files
ODCR iam
Signed-off-by: Hanwen <[email protected]>
1 parent 7384a16 commit f009b2a

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

cli/src/pcluster/config/cluster_config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2482,3 +2482,13 @@ def image_dict(self):
24822482
self.__image_dict[queue.name] = queue.queue_ami or self.image.custom_ami or self.official_ami
24832483

24842484
return self.__image_dict
2485+
2486+
@property
2487+
def capacity_reservation_targets(self):
2488+
"""Return a list of capacity reservation targets from all compute resources with the section."""
2489+
capacity_reservation_targets_list = []
2490+
for queue in self.scheduling.queues:
2491+
for compute_resource in queue.compute_resources:
2492+
if compute_resource.capacity_reservation_target:
2493+
capacity_reservation_targets_list.append(compute_resource.capacity_reservation_target)
2494+
return capacity_reservation_targets_list

cli/src/pcluster/schemas/cluster_schema.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,19 @@ def make_resource(self, data, **kwargs):
951951
"""Generate resource."""
952952
return CapacityReservationTarget(**data)
953953

954+
@validates_schema
955+
def no_coexist_instance_type_flexibility(self, data, **kwargs):
956+
"""Validate that 'capacity_reservation_id' and 'capacity_reservation_resource_group_arn' do not co-exist."""
957+
if self.fields_coexist(
958+
data,
959+
["capacity_reservation_id", "capacity_reservation_resource_group_arn"],
960+
one_required=True,
961+
**kwargs,
962+
):
963+
raise ValidationError(
964+
"A Capacity Reservation Target needs to specify either Capacity Reservation ID or Capacity Reservation Resource Group ARN."
965+
)
966+
954967

955968
class ClusterDevSettingsSchema(BaseDevSettingsSchema):
956969
"""Represent the schema of Dev Setting."""

cli/src/pcluster/templates/cdk_builder_utils.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,31 @@ def _build_policy(self) -> List[iam.PolicyStatement]:
654654
]
655655
)
656656

657+
if self._config.scheduling.scheduler == "slurm":
658+
if self._config.capacity_reservation_targets:
659+
for capacity_reservation_target in self._config.capacity_reservation_targets:
660+
if capacity_reservation_target.capacity_reservation_id:
661+
policy.append(
662+
iam.PolicyStatement(
663+
actions=["ec2:RunInstances"],
664+
effect=iam.Effect.ALLOW,
665+
resources=[
666+
self._format_arn(
667+
service="ec2",
668+
resource=f"capacity-reservation/{capacity_reservation_target.capacity_reservation_id}",
669+
)
670+
],
671+
)
672+
)
673+
elif capacity_reservation_target.capacity_reservation_resource_group_arn:
674+
policy.append(
675+
iam.PolicyStatement(
676+
actions=["ec2:RunInstances"],
677+
effect=iam.Effect.ALLOW,
678+
resources=[self.capacity_reservation_target.capacity_reservation_resource_group_arn],
679+
)
680+
)
681+
657682
if self._config.directory_service:
658683
policy.append(
659684
iam.PolicyStatement(

0 commit comments

Comments
 (0)