@@ -247,6 +247,7 @@ constraints.0.spot_interruption_predictions_type = aws-rebalance-recommendations
247247constraints.0.storage_optimized = false
248248constraints.0.storage_optimized_state = enabled
249249constraints.0.use_spot_fallbacks = false
250+ constraints.0.aws.# = 0
250251constraints.0.bare_metal = unspecified
251252custom_instances_enabled = true
252253custom_instances_with_extended_memory_enabled = true
@@ -794,6 +795,10 @@ func TestAccEKS_ResourceNodeTemplate_basic(t *testing.T) {
794795 resource .TestCheckResourceAttr (resourceName , "constraints.0.resource_limits.#" , "1" ),
795796 resource .TestCheckResourceAttr (resourceName , "constraints.0.resource_limits.0.cpu_limit_enabled" , "false" ),
796797 resource .TestCheckResourceAttr (resourceName , "constraints.0.resource_limits.0.cpu_limit_max_cores" , "0" ),
798+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.#" , "1" ),
799+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.0.capacity_reservations.#" , "1" ),
800+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.0.capacity_reservations.0.id" , "cr-12345678901234567" ),
801+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.0.capacity_reservations.0.type" , "ON_DEMAND_CAPACITY_RESERVATION" ),
797802 resource .TestCheckResourceAttr (resourceName , "edge_location_ids.#" , "2" ),
798803 resource .TestCheckResourceAttrSet (resourceName , "edge_location_ids.0" ),
799804 resource .TestCheckResourceAttrSet (resourceName , "edge_location_ids.1" ),
@@ -880,6 +885,10 @@ func TestAccEKS_ResourceNodeTemplate_basic(t *testing.T) {
880885 resource .TestCheckResourceAttr (resourceName , "constraints.0.resource_limits.#" , "1" ),
881886 resource .TestCheckResourceAttr (resourceName , "constraints.0.resource_limits.0.cpu_limit_enabled" , "true" ),
882887 resource .TestCheckResourceAttr (resourceName , "constraints.0.resource_limits.0.cpu_limit_max_cores" , "50" ),
888+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.#" , "1" ),
889+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.0.capacity_reservations.#" , "1" ),
890+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.0.capacity_reservations.0.id" , "cr-98765432109876543" ),
891+ resource .TestCheckResourceAttr (resourceName , "constraints.0.aws.0.capacity_reservations.0.type" , "ON_DEMAND_CAPACITY_RESERVATION" ),
883892 resource .TestCheckResourceAttr (resourceName , "gpu.0.default_shared_clients_per_gpu" , "1" ),
884893 resource .TestCheckResourceAttr (resourceName , "gpu.0.enable_time_sharing" , "false" ),
885894 resource .TestCheckResourceAttr (resourceName , "edge_location_ids.#" , "1" ),
@@ -982,6 +991,13 @@ func testAccNodeTemplateConfig(rName, clusterName string) string {
982991
983992 cpu_manufacturers = ["INTEL", "AMD"]
984993 architecture_priority = ["amd64"]
994+
995+ aws {
996+ capacity_reservations {
997+ id = "cr-12345678901234567"
998+ type = "ON_DEMAND_CAPACITY_RESERVATION"
999+ }
1000+ }
9851001 }
9861002 }
9871003 ` , rName ))
@@ -1137,6 +1153,13 @@ func testNodeTemplateUpdated(rName, clusterName string) string {
11371153 cpu_limit_enabled = true
11381154 cpu_limit_max_cores = 50
11391155 }
1156+
1157+ aws {
1158+ capacity_reservations {
1159+ id = "cr-98765432109876543"
1160+ type = "ON_DEMAND_CAPACITY_RESERVATION"
1161+ }
1162+ }
11401163 }
11411164 }
11421165 ` , rName ))
@@ -1368,9 +1391,9 @@ func Test_toTemplateGpu(t *testing.T) {
13681391 FieldNodeTemplateUserManagedGPUDrivers : true ,
13691392 },
13701393 want : & sdk.NodetemplatesV1GPU {
1371- EnableTimeSharing : lo .ToPtr (false ),
1372- SharingConfiguration : & map [string ]sdk.NodetemplatesV1SharedGPU {},
1373- SharingStrategy : lo .ToPtr (sdk .GPUSHARINGSTRATEGYMPS ),
1394+ EnableTimeSharing : lo .ToPtr (false ),
1395+ SharingConfiguration : & map [string ]sdk.NodetemplatesV1SharedGPU {},
1396+ SharingStrategy : lo .ToPtr (sdk .GPUSHARINGSTRATEGYMPS ),
13741397 UserManagedGpuDrivers : lo .ToPtr (true ),
13751398 },
13761399 },
@@ -1572,3 +1595,140 @@ func Test_flattenGpuSettings(t *testing.T) {
15721595 })
15731596 }
15741597}
1598+
1599+ func Test_flattenAWSConstraints (t * testing.T ) {
1600+ tests := []struct {
1601+ name string
1602+ input * sdk.NodetemplatesV1TemplateConstraintsAWSConstraints
1603+ want []map [string ]any
1604+ }{
1605+ {
1606+ name : "nil input returns nil" ,
1607+ input : nil ,
1608+ want : nil ,
1609+ },
1610+ {
1611+ name : "empty reservations" ,
1612+ input : & sdk.NodetemplatesV1TemplateConstraintsAWSConstraints {},
1613+ want : []map [string ]any {{}},
1614+ },
1615+ {
1616+ name : "reservation with id" ,
1617+ input : & sdk.NodetemplatesV1TemplateConstraintsAWSConstraints {
1618+ CapacityReservations : & []sdk.NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservation {
1619+ {
1620+ Id : lo .ToPtr ("cr-123" ),
1621+ Type : lo .ToPtr (sdk .NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservationTypeONDEMANDCAPACITYRESERVATION ),
1622+ },
1623+ },
1624+ },
1625+ want : []map [string ]any {{
1626+ FieldNodeTemplateCapacityReservations : []map [string ]any {
1627+ {
1628+ FieldNodeTemplateCapacityReservationId : "cr-123" ,
1629+ FieldNodeTemplateCapacityReservationType : CapacityReservationTypeOnDemand ,
1630+ },
1631+ },
1632+ }},
1633+ },
1634+ {
1635+ name : "reservation with ARN" ,
1636+ input : & sdk.NodetemplatesV1TemplateConstraintsAWSConstraints {
1637+ CapacityReservations : & []sdk.NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservation {
1638+ {
1639+ CapacityResourceGroupArn : lo .ToPtr ("arn:aws:ec2:us-east-1:123456789012:capacity-reservation-group/my-group" ),
1640+ Type : lo .ToPtr (sdk .NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservationTypeCAPACITYBLOCK ),
1641+ },
1642+ },
1643+ },
1644+ want : []map [string ]any {{
1645+ FieldNodeTemplateCapacityReservations : []map [string ]any {
1646+ {
1647+ FieldNodeTemplateCapacityResourceGroupArn : "arn:aws:ec2:us-east-1:123456789012:capacity-reservation-group/my-group" ,
1648+ FieldNodeTemplateCapacityReservationType : CapacityReservationTypeCapacityBlock ,
1649+ },
1650+ },
1651+ }},
1652+ },
1653+ }
1654+ for _ , tt := range tests {
1655+ t .Run (tt .name , func (t * testing.T ) {
1656+ got := flattenAWSConstraints (tt .input )
1657+ require .Equal (t , tt .want , got )
1658+ })
1659+ }
1660+ }
1661+
1662+ func Test_toTemplateConstraintsAWSConstraints (t * testing.T ) {
1663+ tests := map [string ]struct {
1664+ input map [string ]any
1665+ want * sdk.NodetemplatesV1TemplateConstraintsAWSConstraints
1666+ }{
1667+ "nil input" : {
1668+ input : nil ,
1669+ want : nil ,
1670+ },
1671+ "reservation with id" : {
1672+ input : map [string ]any {
1673+ FieldNodeTemplateCapacityReservations : []any {
1674+ map [string ]any {
1675+ FieldNodeTemplateCapacityReservationId : "cr-123" ,
1676+ FieldNodeTemplateCapacityReservationType : CapacityReservationTypeOnDemand ,
1677+ },
1678+ },
1679+ },
1680+ want : & sdk.NodetemplatesV1TemplateConstraintsAWSConstraints {
1681+ CapacityReservations : & []sdk.NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservation {
1682+ {
1683+ Id : lo .ToPtr ("cr-123" ),
1684+ Type : lo .ToPtr (sdk .NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservationTypeONDEMANDCAPACITYRESERVATION ),
1685+ },
1686+ },
1687+ },
1688+ },
1689+ "reservation with ARN" : {
1690+ input : map [string ]any {
1691+ FieldNodeTemplateCapacityReservations : []any {
1692+ map [string ]any {
1693+ FieldNodeTemplateCapacityResourceGroupArn : "arn:aws:ec2:us-east-1:123456789012:capacity-reservation-group/my-group" ,
1694+ FieldNodeTemplateCapacityReservationType : CapacityReservationTypeCapacityBlock ,
1695+ },
1696+ },
1697+ },
1698+ want : & sdk.NodetemplatesV1TemplateConstraintsAWSConstraints {
1699+ CapacityReservations : & []sdk.NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservation {
1700+ {
1701+ CapacityResourceGroupArn : lo .ToPtr ("arn:aws:ec2:us-east-1:123456789012:capacity-reservation-group/my-group" ),
1702+ Type : lo .ToPtr (sdk .NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservationTypeCAPACITYBLOCK ),
1703+ },
1704+ },
1705+ },
1706+ },
1707+ "reservation with both id and ARN" : {
1708+ input : map [string ]any {
1709+ FieldNodeTemplateCapacityReservations : []any {
1710+ map [string ]any {
1711+ FieldNodeTemplateCapacityReservationId : "cr-456" ,
1712+ FieldNodeTemplateCapacityResourceGroupArn : "arn:aws:ec2:us-east-1:123456789012:capacity-reservation-group/my-group" ,
1713+ FieldNodeTemplateCapacityReservationType : CapacityReservationTypeCapacityBlock ,
1714+ },
1715+ },
1716+ },
1717+ want : & sdk.NodetemplatesV1TemplateConstraintsAWSConstraints {
1718+ CapacityReservations : & []sdk.NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservation {
1719+ {
1720+ Id : lo .ToPtr ("cr-456" ),
1721+ CapacityResourceGroupArn : lo .ToPtr ("arn:aws:ec2:us-east-1:123456789012:capacity-reservation-group/my-group" ),
1722+ Type : lo .ToPtr (sdk .NodetemplatesV1TemplateConstraintsAWSConstraintsCapacityReservationTypeCAPACITYBLOCK ),
1723+ },
1724+ },
1725+ },
1726+ },
1727+ }
1728+ for name , tt := range tests {
1729+ t .Run (name , func (t * testing.T ) {
1730+ got := toTemplateConstraintsAWSConstraints (tt .input )
1731+ require .Equal (t , tt .want , got )
1732+ })
1733+ }
1734+ }
0 commit comments