Skip to content

Commit a9d85d2

Browse files
authored
Merge pull request #41487 from itspooya/add-eks-update-strategy
resource/aws_eks_node_group : Add `update_strategy` attribute
2 parents ca378c6 + ae7062e commit a9d85d2

File tree

6 files changed

+124
-0
lines changed

6 files changed

+124
-0
lines changed

.changelog/41487.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/aws_eks_node_group : Add `update_config.update_strategy` attribute
3+
```
4+
5+
```release-note:enhancement
6+
data-source/aws_eks_node_group : Add `update_config` block including `update_strategy` attribute
7+
```

internal/service/eks/node_group.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,11 @@ func resourceNodeGroup() *schema.Resource {
359359
"update_config.0.max_unavailable_percentage",
360360
},
361361
},
362+
"update_strategy": {
363+
Type: schema.TypeString,
364+
Optional: true,
365+
ValidateDiagFunc: enum.Validate[types.NodegroupUpdateStrategies](),
366+
},
362367
},
363368
},
364369
},
@@ -986,6 +991,10 @@ func expandNodegroupUpdateConfig(tfMap map[string]any) *types.NodegroupUpdateCon
986991
apiObject.MaxUnavailablePercentage = aws.Int32(int32(v))
987992
}
988993

994+
if v, ok := tfMap["update_strategy"].(string); ok && v != "" {
995+
apiObject.UpdateStrategy = types.NodegroupUpdateStrategies(v)
996+
}
997+
989998
return apiObject
990999
}
9911000

@@ -1239,6 +1248,10 @@ func flattenNodegroupUpdateConfig(apiObject *types.NodegroupUpdateConfig) map[st
12391248
tfMap["max_unavailable_percentage"] = aws.ToInt32(v)
12401249
}
12411250

1251+
if apiObject.UpdateStrategy != "" {
1252+
tfMap["update_strategy"] = string(apiObject.UpdateStrategy)
1253+
}
1254+
12421255
return tfMap
12431256
}
12441257

internal/service/eks/node_group_data_source.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,26 @@ func dataSourceNodeGroup() *schema.Resource {
176176
},
177177
},
178178
},
179+
"update_config": {
180+
Type: schema.TypeList,
181+
Computed: true,
182+
Elem: &schema.Resource{
183+
Schema: map[string]*schema.Schema{
184+
"max_unavailable": {
185+
Type: schema.TypeInt,
186+
Computed: true,
187+
},
188+
"max_unavailable_percentage": {
189+
Type: schema.TypeInt,
190+
Computed: true,
191+
},
192+
"update_strategy": {
193+
Type: schema.TypeString,
194+
Computed: true,
195+
},
196+
},
197+
},
198+
},
179199
names.AttrVersion: {
180200
Type: schema.TypeString,
181201
Computed: true,
@@ -231,6 +251,13 @@ func dataSourceNodeGroupRead(ctx context.Context, d *schema.ResourceData, meta a
231251
if err := d.Set("taints", flattenTaints(nodeGroup.Taints)); err != nil {
232252
return sdkdiag.AppendErrorf(diags, "setting taints: %s", err)
233253
}
254+
if nodeGroup.UpdateConfig != nil {
255+
if err := d.Set("update_config", []any{flattenNodegroupUpdateConfig(nodeGroup.UpdateConfig)}); err != nil {
256+
return sdkdiag.AppendErrorf(diags, "setting update_config: %s", err)
257+
}
258+
} else {
259+
d.Set("update_config", nil)
260+
}
234261
d.Set(names.AttrVersion, nodeGroup.Version)
235262

236263
if err := d.Set(names.AttrTags, keyValueTags(ctx, nodeGroup.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map()); err != nil {

internal/service/eks/node_group_data_source_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func TestAccEKSNodeGroupDataSource_basic(t *testing.T) {
4949
resource.TestCheckResourceAttrPair(resourceName, "subnet_ids.#", dataSourceResourceName, "subnet_ids.#"),
5050
resource.TestCheckResourceAttrPair(resourceName, "taint.#", dataSourceResourceName, "taints.#"),
5151
resource.TestCheckResourceAttrPair(resourceName, acctest.CtTagsPercent, dataSourceResourceName, acctest.CtTagsPercent),
52+
resource.TestCheckResourceAttrPair(resourceName, "update_config.#", dataSourceResourceName, "update_config.#"),
5253
resource.TestCheckResourceAttrPair(resourceName, names.AttrVersion, dataSourceResourceName, names.AttrVersion),
5354
),
5455
},

internal/service/eks/node_group_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,6 +1069,52 @@ func TestAccEKSNodeGroup_update(t *testing.T) {
10691069
})
10701070
}
10711071

1072+
func TestAccEKSNodeGroup_updateStrategy(t *testing.T) {
1073+
ctx := acctest.Context(t)
1074+
var nodeGroup1, nodeGroup2 types.Nodegroup
1075+
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
1076+
resourceName := "aws_eks_node_group.test"
1077+
1078+
resource.ParallelTest(t, resource.TestCase{
1079+
PreCheck: func() { acctest.PreCheck(ctx, t); testAccPreCheck(ctx, t) },
1080+
ErrorCheck: acctest.ErrorCheck(t, names.EKSServiceID),
1081+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
1082+
CheckDestroy: testAccCheckNodeGroupDestroy(ctx),
1083+
Steps: []resource.TestStep{
1084+
{
1085+
Config: testAccNodeGroupConfig_update1(rName),
1086+
Check: resource.ComposeTestCheckFunc(
1087+
testAccCheckNodeGroupExists(ctx, resourceName, &nodeGroup1),
1088+
resource.TestCheckResourceAttr(resourceName, "update_config.#", "1"),
1089+
resource.TestCheckResourceAttr(resourceName, "update_config.0.max_unavailable", "1"),
1090+
resource.TestCheckResourceAttr(resourceName, "update_config.0.max_unavailable_percentage", "0"),
1091+
),
1092+
},
1093+
{
1094+
Config: testAccNodeGroupConfig_updateStrategy(rName, "DEFAULT"),
1095+
Check: resource.ComposeTestCheckFunc(
1096+
testAccCheckNodeGroupExists(ctx, resourceName, &nodeGroup1),
1097+
resource.TestCheckResourceAttr(resourceName, "update_config.#", "1"),
1098+
resource.TestCheckResourceAttr(resourceName, "update_config.0.update_strategy", "DEFAULT"),
1099+
),
1100+
},
1101+
{
1102+
ResourceName: resourceName,
1103+
ImportState: true,
1104+
ImportStateVerify: true,
1105+
},
1106+
{
1107+
Config: testAccNodeGroupConfig_updateStrategy(rName, "MINIMAL"),
1108+
Check: resource.ComposeTestCheckFunc(
1109+
testAccCheckNodeGroupExists(ctx, resourceName, &nodeGroup2),
1110+
resource.TestCheckResourceAttr(resourceName, "update_config.#", "1"),
1111+
resource.TestCheckResourceAttr(resourceName, "update_config.0.update_strategy", "MINIMAL"),
1112+
),
1113+
},
1114+
},
1115+
})
1116+
}
1117+
10721118
func TestAccEKSNodeGroup_version(t *testing.T) {
10731119
ctx := acctest.Context(t)
10741120
var nodeGroup1, nodeGroup2 types.Nodegroup
@@ -2403,6 +2449,35 @@ resource "aws_eks_node_group" "test" {
24032449
`, rName))
24042450
}
24052451

2452+
func testAccNodeGroupConfig_updateStrategy(rName, updateStrategy string) string {
2453+
return acctest.ConfigCompose(testAccNodeGroupConfig_base(rName), fmt.Sprintf(`
2454+
resource "aws_eks_node_group" "test" {
2455+
cluster_name = aws_eks_cluster.test.name
2456+
node_group_name = %[1]q
2457+
node_role_arn = aws_iam_role.node.arn
2458+
subnet_ids = aws_subnet.test[*].id
2459+
2460+
scaling_config {
2461+
desired_size = 1
2462+
max_size = 3
2463+
min_size = 1
2464+
}
2465+
2466+
update_config {
2467+
max_unavailable = 1
2468+
update_strategy = %[2]q
2469+
}
2470+
2471+
depends_on = [
2472+
aws_iam_role_policy_attachment.node-AmazonEKSWorkerNodePolicy,
2473+
aws_iam_role_policy_attachment.node-AmazonEKS_CNI_Policy,
2474+
aws_iam_role_policy_attachment.node-AmazonEC2ContainerRegistryReadOnly,
2475+
aws_iam_role_policy_attachment.node-AmazonEKSWorkerNodeMinimalPolicy,
2476+
]
2477+
}
2478+
`, rName, updateStrategy))
2479+
}
2480+
24062481
func testAccNodeGroupConfig_version(rName, version string) string {
24072482
return acctest.ConfigCompose(testAccNodeGroupConfig_versionBase(rName, version), fmt.Sprintf(`
24082483
resource "aws_eks_node_group" "test" {

website/docs/r/eks_node_group.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ The following arguments are mutually exclusive.
206206

207207
* `max_unavailable` - (Optional) Desired max number of unavailable worker nodes during node group update.
208208
* `max_unavailable_percentage` - (Optional) Desired max percentage of unavailable worker nodes during node group update.
209+
* `update_strategy` - (Optional) Strategy to use for updating the node group. Valid values: `MINIMAL` and `DEFAULT`.
209210

210211
## Attribute Reference
211212

0 commit comments

Comments
 (0)