From 98e196bd76c80da415ffcfec4dc122f647488496 Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Mon, 12 Dec 2022 13:36:53 +0000 Subject: [PATCH 1/9] aws_eks_addon with custom configuration_values --- internal/service/eks/addon.go | 16 ++++++++- internal/service/eks/addon_data_source.go | 6 ++++ internal/service/eks/addon_test.go | 44 +++++++++++++++++++++++ website/docs/d/eks_addon.html.markdown | 1 + website/docs/r/eks_addon.html.markdown | 27 ++++++++++++++ 5 files changed, 93 insertions(+), 1 deletion(-) diff --git a/internal/service/eks/addon.go b/internal/service/eks/addon.go index 34c6f9187254..0c2a972784f0 100644 --- a/internal/service/eks/addon.go +++ b/internal/service/eks/addon.go @@ -65,6 +65,11 @@ func ResourceAddon() *schema.Resource { ForceNew: true, ValidateFunc: validClusterName, }, + "configuration_values": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, "created_at": { Type: schema.TypeString, Computed: true, @@ -120,6 +125,10 @@ func resourceAddonCreate(ctx context.Context, d *schema.ResourceData, meta inter input.ServiceAccountRoleArn = aws.String(v.(string)) } + if v, ok := d.GetOk("configuration_values"); ok { + input.ConfigurationValues = aws.String(v.(string)) + } + if len(tags) > 0 { input.Tags = Tags(tags.IgnoreAWS()) } @@ -198,6 +207,7 @@ func resourceAddonRead(ctx context.Context, d *schema.ResourceData, meta interfa d.Set("addon_version", addon.AddonVersion) d.Set("arn", addon.AddonArn) d.Set("cluster_name", addon.ClusterName) + d.Set("configuration_values", addon.ConfigurationValues) d.Set("created_at", aws.TimeValue(addon.CreatedAt).Format(time.RFC3339)) d.Set("modified_at", aws.TimeValue(addon.ModifiedAt).Format(time.RFC3339)) d.Set("service_account_role_arn", addon.ServiceAccountRoleArn) @@ -225,7 +235,7 @@ func resourceAddonUpdate(ctx context.Context, d *schema.ResourceData, meta inter return diag.FromErr(err) } - if d.HasChanges("addon_version", "service_account_role_arn") { + if d.HasChanges("addon_version", "service_account_role_arn", "configuration_values") { input := &eks.UpdateAddonInput{ AddonName: aws.String(addonName), ClientRequestToken: aws.String(resource.UniqueId()), @@ -236,6 +246,10 @@ func resourceAddonUpdate(ctx context.Context, d *schema.ResourceData, meta inter input.AddonVersion = aws.String(d.Get("addon_version").(string)) } + if d.HasChange("configuration_values") { + input.ConfigurationValues = aws.String(d.Get("configuration_values").(string)) + } + if v, ok := d.GetOk("resolve_conflicts"); ok { input.ResolveConflicts = aws.String(v.(string)) } diff --git a/internal/service/eks/addon_data_source.go b/internal/service/eks/addon_data_source.go index 53b84318ab46..3445a81934aa 100644 --- a/internal/service/eks/addon_data_source.go +++ b/internal/service/eks/addon_data_source.go @@ -35,6 +35,11 @@ func DataSourceAddon() *schema.Resource { Required: true, ValidateFunc: validClusterName, }, + "configuration_values": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, "created_at": { Type: schema.TypeString, Computed: true, @@ -70,6 +75,7 @@ func dataSourceAddonRead(ctx context.Context, d *schema.ResourceData, meta inter d.Set("addon_version", addon.AddonVersion) d.Set("arn", addon.AddonArn) d.Set("created_at", aws.TimeValue(addon.CreatedAt).Format(time.RFC3339)) + d.Set("configuration_values", addon.ConfigurationValues) d.Set("modified_at", aws.TimeValue(addon.ModifiedAt).Format(time.RFC3339)) d.Set("service_account_role_arn", addon.ServiceAccountRoleArn) diff --git a/internal/service/eks/addon_test.go b/internal/service/eks/addon_test.go index 8de65c8d5b32..a717fa66b043 100644 --- a/internal/service/eks/addon_test.go +++ b/internal/service/eks/addon_test.go @@ -246,6 +246,38 @@ func TestAccEKSAddon_serviceAccountRoleARN(t *testing.T) { }) } +func TestAccEKSAddon_configurationValues(t *testing.T) { + var addon eks.Addon + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_eks_addon.test" + configurationValues := "{\"env\": {\"WARM_ENI_TARGET\":\"2\",\"ENABLE_POD_ENI\":\"true\"},\"resources\": {\"limits\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"}}}" + addonName := "vpc-cni" + addonVersion := "v1.10.4-eksbuild.1" + ctx := context.Background() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t); testAccPreCheck(t); testAccPreCheckAddon(t) }, + ErrorCheck: acctest.ErrorCheck(t, eks.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckAddonDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAddonConfig_configurationValues(rName, addonName, addonVersion, configurationValues), + Check: resource.ComposeTestCheckFunc( + testAccCheckAddonExists(ctx, resourceName, &addon), + resource.TestCheckResourceAttr(resourceName, "configuration_values", configurationValues), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"resolve_conflicts"}, + }, + }, + }) +} + func TestAccEKSAddon_tags(t *testing.T) { var addon1, addon2, addon3 eks.Addon rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -912,3 +944,15 @@ resource "aws_eks_addon" "test" { } `, rName, addonName, tagKey1, tagValue1, tagKey2, tagValue2)) } + +func testAccAddonConfig_configurationValues(rName, addonName, addonVersion, configurationValues string) string { + return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` +resource "aws_eks_addon" "test" { + cluster_name = aws_eks_cluster.test.name + addon_name = %[2]q + addon_version = %[3]q + configuration_values = %[4]q + resolve_conflicts = "OVERWRITE" +} +`, rName, addonName, addonVersion, configurationValues)) +} diff --git a/website/docs/d/eks_addon.html.markdown b/website/docs/d/eks_addon.html.markdown index ceccefa2fa1a..2fc6c2e35f06 100644 --- a/website/docs/d/eks_addon.html.markdown +++ b/website/docs/d/eks_addon.html.markdown @@ -35,6 +35,7 @@ In addition to all arguments above, the following attributes are exported: * `arn` - ARN of the EKS add-on. * `addon_version` - Version of EKS add-on. +* `configuration_values` - Configuration values for the addon with a single JSON string. * `service_account_role_arn` - ARN of IAM role used for EKS add-on. If value is empty - then add-on uses the IAM role assigned to the EKS Cluster node. * `id` - EKS Cluster name and EKS add-on name separated by a colon (`:`). diff --git a/website/docs/r/eks_addon.html.markdown b/website/docs/r/eks_addon.html.markdown index a5963e9b10b9..d9b84abfbd10 100644 --- a/website/docs/r/eks_addon.html.markdown +++ b/website/docs/r/eks_addon.html.markdown @@ -38,6 +38,32 @@ resource "aws_eks_addon" "example" { } ``` +## Example add-on usage with custom configuration_values +Custom add-on configuration can be passed using `configuration_values` as a single JSON string while creating or updating the add-on. + +~> **Note:** `configuration_values` is a single JSON string should match the valid JSON schema for each add-on with specific version. + +To find the correct JSON schema for each add-on can be extracted using [describe-addon-configuration](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-addon-configuration.html) call. +This below is an example for extracting the `configuration_values` schema for `coredns`. + +```bash + aws eks describe-addon-configuration \ + --addon-name coredns \ + --addon-version v1.8.7-eksbuild.2 +``` + +Example to create a `coredns` managed addon with custom `configuration_values`. + +```terraform +resource "aws_eks_addon" "example" { + cluster_name = aws_eks_cluster.example.name + addon_name = "coredns" + addon_version = "v1.8.7-eksbuild.3" + resolve_conflicts = "OVERWRITE" + configuration_values = "{\"replicaCount\":4,\"resources\":{\"limits\":{\"cpu\":\"100m\",\"memory\":\"150Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"150Mi\"}}}" +} +``` + ### Example IAM Role for EKS Addon "vpc-cni" with AWS managed policy ```terraform @@ -96,6 +122,7 @@ The following arguments are optional: * `addon_version` – (Optional) The version of the EKS add-on. The version must match one of the versions returned by [describe-addon-versions](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-addon-versions.html). +* `configuration_values` - (Optional) custom configuration values for addons with single JSON string. This JSON string value must match the JSON schema derived from [describe-addon-configuration](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-addon-configuration.html). * `resolve_conflicts` - (Optional) Define how to resolve parameter value conflicts when migrating an existing add-on to an Amazon EKS add-on or when applying version updates to the add-on. Valid values are `NONE`, `OVERWRITE` and `PRESERVE`. For more details check [UpdateAddon](https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html) API Docs. From 03a54d99265bcc6e607613e225da498a5aac5092 Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Mon, 12 Dec 2022 13:47:40 +0000 Subject: [PATCH 2/9] Added changelog file --- .changelog/28295.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changelog/28295.txt diff --git a/.changelog/28295.txt b/.changelog/28295.txt new file mode 100644 index 000000000000..867997c3dffc --- /dev/null +++ b/.changelog/28295.txt @@ -0,0 +1,7 @@ +```release-note:enhancement +resource/aws_eks_addon: Add `configuration_values` attribute +``` + +```release-note:enhancement +data-source/aws_eks_addon: Add `configuration_values` attribute +``` \ No newline at end of file From 01f0b322cdb8aac360bc605a5446df9654dcf50b Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Mon, 12 Dec 2022 13:56:14 +0000 Subject: [PATCH 3/9] Fixed the markdown-lin workflow error --- website/docs/r/eks_addon.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/eks_addon.html.markdown b/website/docs/r/eks_addon.html.markdown index d9b84abfbd10..6d1ca9cab0f3 100644 --- a/website/docs/r/eks_addon.html.markdown +++ b/website/docs/r/eks_addon.html.markdown @@ -122,7 +122,7 @@ The following arguments are optional: * `addon_version` – (Optional) The version of the EKS add-on. The version must match one of the versions returned by [describe-addon-versions](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-addon-versions.html). -* `configuration_values` - (Optional) custom configuration values for addons with single JSON string. This JSON string value must match the JSON schema derived from [describe-addon-configuration](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-addon-configuration.html). +* `configuration_values` - (Optional) custom configuration values for addons with single JSON string. This JSON string value must match the JSON schema derived from [describe-addon-configuration](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-addon-configuration.html). * `resolve_conflicts` - (Optional) Define how to resolve parameter value conflicts when migrating an existing add-on to an Amazon EKS add-on or when applying version updates to the add-on. Valid values are `NONE`, `OVERWRITE` and `PRESERVE`. For more details check [UpdateAddon](https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html) API Docs. From 3876910a6ef28bdbd83e749968082bc0d3a840b9 Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Mon, 12 Dec 2022 13:58:12 +0000 Subject: [PATCH 4/9] Fixed terraform fmt for docs --- website/docs/r/eks_addon.html.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/docs/r/eks_addon.html.markdown b/website/docs/r/eks_addon.html.markdown index 6d1ca9cab0f3..72ec2bea5fa8 100644 --- a/website/docs/r/eks_addon.html.markdown +++ b/website/docs/r/eks_addon.html.markdown @@ -56,11 +56,11 @@ Example to create a `coredns` managed addon with custom `configuration_values`. ```terraform resource "aws_eks_addon" "example" { - cluster_name = aws_eks_cluster.example.name - addon_name = "coredns" - addon_version = "v1.8.7-eksbuild.3" - resolve_conflicts = "OVERWRITE" - configuration_values = "{\"replicaCount\":4,\"resources\":{\"limits\":{\"cpu\":\"100m\",\"memory\":\"150Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"150Mi\"}}}" + cluster_name = "mycluser" + addon_name = "coredns" + addon_version = "v1.8.7-eksbuild.3" + resolve_conflicts = "OVERWRITE" + configuration_values = "{\"replicaCount\":4,\"resources\":{\"limits\":{\"cpu\":\"100m\",\"memory\":\"150Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"150Mi\"}}}" } ``` From fd2f7ea0d3eadc4c1217c59973ac6e37aa9c925e Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Mon, 12 Dec 2022 13:58:43 +0000 Subject: [PATCH 5/9] Fixed terraform fmt for docs --- website/docs/r/eks_addon.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/eks_addon.html.markdown b/website/docs/r/eks_addon.html.markdown index 72ec2bea5fa8..4f2ef3b01871 100644 --- a/website/docs/r/eks_addon.html.markdown +++ b/website/docs/r/eks_addon.html.markdown @@ -56,7 +56,7 @@ Example to create a `coredns` managed addon with custom `configuration_values`. ```terraform resource "aws_eks_addon" "example" { - cluster_name = "mycluser" + cluster_name = "mycluster" addon_name = "coredns" addon_version = "v1.8.7-eksbuild.3" resolve_conflicts = "OVERWRITE" From 60494c25cfa9eef58e33cfa96597a57fbdeb1517 Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Thu, 15 Dec 2022 14:59:11 +0000 Subject: [PATCH 6/9] Added negative tests --- .../service/eks/addon_data_source_test.go | 57 +++++++++++++++++++ internal/service/eks/addon_test.go | 37 +++++++++--- 2 files changed, 86 insertions(+), 8 deletions(-) diff --git a/internal/service/eks/addon_data_source_test.go b/internal/service/eks/addon_data_source_test.go index 39e54e9ea2dc..9fcf4f923243 100644 --- a/internal/service/eks/addon_data_source_test.go +++ b/internal/service/eks/addon_data_source_test.go @@ -33,6 +33,41 @@ func TestAccEKSAddonDataSource_basic(t *testing.T) { acctest.MatchResourceAttrRegionalARN(dataSourceResourceName, "arn", "eks", regexp.MustCompile(fmt.Sprintf("addon/%s/%s/.+$", rName, addonName))), resource.TestCheckResourceAttrPair(resourceName, "arn", dataSourceResourceName, "arn"), resource.TestCheckResourceAttrPair(resourceName, "addon_version", dataSourceResourceName, "addon_version"), + resource.TestCheckResourceAttrPair(resourceName, "configuration_values", dataSourceResourceName, "configuration_values"), + resource.TestCheckResourceAttrPair(resourceName, "service_account_role_arn", dataSourceResourceName, "service_account_role_arn"), + resource.TestCheckResourceAttrPair(resourceName, "created_at", dataSourceResourceName, "created_at"), + resource.TestCheckResourceAttrPair(resourceName, "modified_at", dataSourceResourceName, "modified_at"), + resource.TestCheckResourceAttrPair(resourceName, "tags.%", dataSourceResourceName, "tags.%"), + ), + }, + }, + }) +} + +func TestAccEKSAddonDataSource_configurationValues(t *testing.T) { + var addon eks.Addon + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + dataSourceResourceName := "data.aws_eks_addon.test" + resourceName := "aws_eks_addon.test" + addonName := "vpc-cni" + addonVersion := "v1.10.4-eksbuild.1" + configurationValues := "{\"env\": {\"WARM_ENI_TARGET\":\"2\",\"ENABLE_POD_ENI\":\"true\"},\"resources\": {\"limits\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"}}}" + ctx := context.Background() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t); testAccPreCheck(t); testAccPreCheckAddon(t) }, + ErrorCheck: acctest.ErrorCheck(t, eks.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckAddonDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAddonDataSourceConfig_configurationValues(rName, addonName, addonVersion, configurationValues, eks.ResolveConflictsOverwrite), + Check: resource.ComposeTestCheckFunc( + testAccCheckAddonExists(ctx, dataSourceResourceName, &addon), + acctest.MatchResourceAttrRegionalARN(dataSourceResourceName, "arn", "eks", regexp.MustCompile(fmt.Sprintf("addon/%s/%s/.+$", rName, addonName))), + resource.TestCheckResourceAttrPair(resourceName, "arn", dataSourceResourceName, "arn"), + resource.TestCheckResourceAttrPair(resourceName, "addon_version", dataSourceResourceName, "addon_version"), + resource.TestCheckResourceAttrPair(resourceName, "configuration_values", dataSourceResourceName, "configuration_values"), resource.TestCheckResourceAttrPair(resourceName, "service_account_role_arn", dataSourceResourceName, "service_account_role_arn"), resource.TestCheckResourceAttrPair(resourceName, "created_at", dataSourceResourceName, "created_at"), resource.TestCheckResourceAttrPair(resourceName, "modified_at", dataSourceResourceName, "modified_at"), @@ -61,3 +96,25 @@ data "aws_eks_addon" "test" { } `, rName, addonName)) } + +func testAccAddonDataSourceConfig_configurationValues(rName, addonName, addonVersion, configurationValues, resolveConflicts string) string { + return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` +resource "aws_eks_addon" "test" { + cluster_name = aws_eks_cluster.test.name + addon_name = %[2]q + addon_version = %[3]q + configuration_values = %[4]q + resolve_conflicts = %[5]q +} + +data "aws_eks_addon" "test" { + addon_name = %[2]q + cluster_name = aws_eks_cluster.test.name + + depends_on = [ + aws_eks_addon.test, + aws_eks_cluster.test, + ] +} +`, rName, addonName, addonVersion, configurationValues, resolveConflicts)) +} diff --git a/internal/service/eks/addon_test.go b/internal/service/eks/addon_test.go index a717fa66b043..adb9a90fd139 100644 --- a/internal/service/eks/addon_test.go +++ b/internal/service/eks/addon_test.go @@ -251,6 +251,9 @@ func TestAccEKSAddon_configurationValues(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_eks_addon.test" configurationValues := "{\"env\": {\"WARM_ENI_TARGET\":\"2\",\"ENABLE_POD_ENI\":\"true\"},\"resources\": {\"limits\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"}}}" + updateConfigurationValues := "{\"env\": {\"WARM_ENI_TARGET\":\"2\",\"ENABLE_POD_ENI\":\"true\"},\"resources\": {\"limits\":{\"cpu\":\"200m\",\"memory\":\"150Mi\"},\"requests\":{\"cpu\":\"200m\",\"memory\":\"150Mi\"}}}" + emptyConfigurationValues := "{}" + invalidConfigurationValues := "{\"env\": {\"INVALID_FIELD\":\"2\"}}" addonName := "vpc-cni" addonVersion := "v1.10.4-eksbuild.1" ctx := context.Background() @@ -262,7 +265,7 @@ func TestAccEKSAddon_configurationValues(t *testing.T) { CheckDestroy: testAccCheckAddonDestroy, Steps: []resource.TestStep{ { - Config: testAccAddonConfig_configurationValues(rName, addonName, addonVersion, configurationValues), + Config: testAccAddonConfig_configurationValues(rName, addonName, addonVersion, configurationValues, eks.ResolveConflictsOverwrite), Check: resource.ComposeTestCheckFunc( testAccCheckAddonExists(ctx, resourceName, &addon), resource.TestCheckResourceAttr(resourceName, "configuration_values", configurationValues), @@ -274,6 +277,24 @@ func TestAccEKSAddon_configurationValues(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"resolve_conflicts"}, }, + { + Config: testAccAddonConfig_configurationValues(rName, addonName, addonVersion, updateConfigurationValues, eks.ResolveConflictsOverwrite), + Check: resource.ComposeTestCheckFunc( + testAccCheckAddonExists(ctx, resourceName, &addon), + resource.TestCheckResourceAttr(resourceName, "configuration_values", updateConfigurationValues), + ), + }, + { + Config: testAccAddonConfig_configurationValues(rName, addonName, addonVersion, emptyConfigurationValues, eks.ResolveConflictsOverwrite), + Check: resource.ComposeTestCheckFunc( + testAccCheckAddonExists(ctx, resourceName, &addon), + resource.TestCheckResourceAttr(resourceName, "configuration_values", emptyConfigurationValues), + ), + }, + { + Config: testAccAddonConfig_configurationValues(rName, addonName, addonVersion, invalidConfigurationValues, eks.ResolveConflictsOverwrite), + ExpectError: regexp.MustCompile(`InvalidParameterException: ConfigurationValue provided in request is not supported`), + }, }, }) } @@ -945,14 +966,14 @@ resource "aws_eks_addon" "test" { `, rName, addonName, tagKey1, tagValue1, tagKey2, tagValue2)) } -func testAccAddonConfig_configurationValues(rName, addonName, addonVersion, configurationValues string) string { +func testAccAddonConfig_configurationValues(rName, addonName, addonVersion, configurationValues, resolveConflicts string) string { return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { - cluster_name = aws_eks_cluster.test.name - addon_name = %[2]q - addon_version = %[3]q - configuration_values = %[4]q - resolve_conflicts = "OVERWRITE" + cluster_name = aws_eks_cluster.test.name + addon_name = %[2]q + addon_version = %[3]q + configuration_values = %[4]q + resolve_conflicts = %[5]q } -`, rName, addonName, addonVersion, configurationValues)) +`, rName, addonName, addonVersion, configurationValues, resolveConflicts)) } From e4673870a2aeaa79900b5389bcb3149251cf6bca Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 15 Dec 2022 11:33:09 -0500 Subject: [PATCH 7/9] Tweak CHANGELOG entry. --- .changelog/28295.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changelog/28295.txt b/.changelog/28295.txt index 867997c3dffc..beb6c11f754b 100644 --- a/.changelog/28295.txt +++ b/.changelog/28295.txt @@ -1,5 +1,5 @@ ```release-note:enhancement -resource/aws_eks_addon: Add `configuration_values` attribute +resource/aws_eks_addon: Add `configuration_values` argument ``` ```release-note:enhancement From 9d576cc919ad1230bb52eccd676dc039f524e218 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 15 Dec 2022 11:35:09 -0500 Subject: [PATCH 8/9] d/aws_eks_addon: 'configuration_values' is Computed-only. --- internal/service/eks/addon_data_source.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/service/eks/addon_data_source.go b/internal/service/eks/addon_data_source.go index 3445a81934aa..ab09bddc7d8c 100644 --- a/internal/service/eks/addon_data_source.go +++ b/internal/service/eks/addon_data_source.go @@ -37,7 +37,6 @@ func DataSourceAddon() *schema.Resource { }, "configuration_values": { Type: schema.TypeString, - Optional: true, Computed: true, }, "created_at": { @@ -74,8 +73,8 @@ func dataSourceAddonRead(ctx context.Context, d *schema.ResourceData, meta inter d.SetId(id) d.Set("addon_version", addon.AddonVersion) d.Set("arn", addon.AddonArn) - d.Set("created_at", aws.TimeValue(addon.CreatedAt).Format(time.RFC3339)) d.Set("configuration_values", addon.ConfigurationValues) + d.Set("created_at", aws.TimeValue(addon.CreatedAt).Format(time.RFC3339)) d.Set("modified_at", aws.TimeValue(addon.ModifiedAt).Format(time.RFC3339)) d.Set("service_account_role_arn", addon.ServiceAccountRoleArn) From dc3905e7e073ce7ddc5744f4050cf284331c2141 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 15 Dec 2022 11:39:10 -0500 Subject: [PATCH 9/9] d/aws_eks_addon: Tweak acceptance test checks. --- .../service/eks/addon_data_source_test.go | 22 +++++-------------- internal/service/eks/addon_test.go | 21 +++++++++--------- .../eks/addon_version_data_source_test.go | 2 +- 3 files changed, 18 insertions(+), 27 deletions(-) diff --git a/internal/service/eks/addon_data_source_test.go b/internal/service/eks/addon_data_source_test.go index 9fcf4f923243..1735ab290e73 100644 --- a/internal/service/eks/addon_data_source_test.go +++ b/internal/service/eks/addon_data_source_test.go @@ -1,9 +1,7 @@ package eks_test import ( - "context" "fmt" - "regexp" "testing" "github.com/aws/aws-sdk-go/service/eks" @@ -13,12 +11,10 @@ import ( ) func TestAccEKSAddonDataSource_basic(t *testing.T) { - var addon eks.Addon rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) dataSourceResourceName := "data.aws_eks_addon.test" resourceName := "aws_eks_addon.test" addonName := "vpc-cni" - ctx := context.Background() resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(t); testAccPreCheck(t); testAccPreCheckAddon(t) }, @@ -29,14 +25,12 @@ func TestAccEKSAddonDataSource_basic(t *testing.T) { { Config: testAccAddonDataSourceConfig_basic(rName, addonName), Check: resource.ComposeTestCheckFunc( - testAccCheckAddonExists(ctx, dataSourceResourceName, &addon), - acctest.MatchResourceAttrRegionalARN(dataSourceResourceName, "arn", "eks", regexp.MustCompile(fmt.Sprintf("addon/%s/%s/.+$", rName, addonName))), - resource.TestCheckResourceAttrPair(resourceName, "arn", dataSourceResourceName, "arn"), resource.TestCheckResourceAttrPair(resourceName, "addon_version", dataSourceResourceName, "addon_version"), + resource.TestCheckResourceAttrPair(resourceName, "arn", dataSourceResourceName, "arn"), resource.TestCheckResourceAttrPair(resourceName, "configuration_values", dataSourceResourceName, "configuration_values"), - resource.TestCheckResourceAttrPair(resourceName, "service_account_role_arn", dataSourceResourceName, "service_account_role_arn"), resource.TestCheckResourceAttrPair(resourceName, "created_at", dataSourceResourceName, "created_at"), resource.TestCheckResourceAttrPair(resourceName, "modified_at", dataSourceResourceName, "modified_at"), + resource.TestCheckResourceAttrPair(resourceName, "service_account_role_arn", dataSourceResourceName, "service_account_role_arn"), resource.TestCheckResourceAttrPair(resourceName, "tags.%", dataSourceResourceName, "tags.%"), ), }, @@ -45,14 +39,12 @@ func TestAccEKSAddonDataSource_basic(t *testing.T) { } func TestAccEKSAddonDataSource_configurationValues(t *testing.T) { - var addon eks.Addon rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) dataSourceResourceName := "data.aws_eks_addon.test" resourceName := "aws_eks_addon.test" addonName := "vpc-cni" addonVersion := "v1.10.4-eksbuild.1" configurationValues := "{\"env\": {\"WARM_ENI_TARGET\":\"2\",\"ENABLE_POD_ENI\":\"true\"},\"resources\": {\"limits\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"},\"requests\":{\"cpu\":\"100m\",\"memory\":\"100Mi\"}}}" - ctx := context.Background() resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(t); testAccPreCheck(t); testAccPreCheckAddon(t) }, @@ -63,14 +55,12 @@ func TestAccEKSAddonDataSource_configurationValues(t *testing.T) { { Config: testAccAddonDataSourceConfig_configurationValues(rName, addonName, addonVersion, configurationValues, eks.ResolveConflictsOverwrite), Check: resource.ComposeTestCheckFunc( - testAccCheckAddonExists(ctx, dataSourceResourceName, &addon), - acctest.MatchResourceAttrRegionalARN(dataSourceResourceName, "arn", "eks", regexp.MustCompile(fmt.Sprintf("addon/%s/%s/.+$", rName, addonName))), - resource.TestCheckResourceAttrPair(resourceName, "arn", dataSourceResourceName, "arn"), resource.TestCheckResourceAttrPair(resourceName, "addon_version", dataSourceResourceName, "addon_version"), + resource.TestCheckResourceAttrPair(resourceName, "arn", dataSourceResourceName, "arn"), resource.TestCheckResourceAttrPair(resourceName, "configuration_values", dataSourceResourceName, "configuration_values"), - resource.TestCheckResourceAttrPair(resourceName, "service_account_role_arn", dataSourceResourceName, "service_account_role_arn"), resource.TestCheckResourceAttrPair(resourceName, "created_at", dataSourceResourceName, "created_at"), resource.TestCheckResourceAttrPair(resourceName, "modified_at", dataSourceResourceName, "modified_at"), + resource.TestCheckResourceAttrPair(resourceName, "service_account_role_arn", dataSourceResourceName, "service_account_role_arn"), resource.TestCheckResourceAttrPair(resourceName, "tags.%", dataSourceResourceName, "tags.%"), ), }, @@ -79,7 +69,7 @@ func TestAccEKSAddonDataSource_configurationValues(t *testing.T) { } func testAccAddonDataSourceConfig_basic(rName, addonName string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { addon_name = %[2]q cluster_name = aws_eks_cluster.test.name @@ -98,7 +88,7 @@ data "aws_eks_addon" "test" { } func testAccAddonDataSourceConfig_configurationValues(rName, addonName, addonVersion, configurationValues, resolveConflicts string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { cluster_name = aws_eks_cluster.test.name addon_name = %[2]q diff --git a/internal/service/eks/addon_test.go b/internal/service/eks/addon_test.go index adb9a90fd139..4a97a260f43b 100644 --- a/internal/service/eks/addon_test.go +++ b/internal/service/eks/addon_test.go @@ -33,12 +33,13 @@ func TestAccEKSAddon_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccAddonConfig_basic(rName, addonName), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckAddonExists(ctx, addonResourceName, &addon), resource.TestCheckResourceAttr(addonResourceName, "addon_name", addonName), resource.TestCheckResourceAttrSet(addonResourceName, "addon_version"), acctest.MatchResourceAttrRegionalARN(addonResourceName, "arn", "eks", regexp.MustCompile(fmt.Sprintf("addon/%s/%s/.+$", rName, addonName))), resource.TestCheckResourceAttrPair(addonResourceName, "cluster_name", clusterResourceName, "name"), + resource.TestCheckResourceAttr(addonResourceName, "configuration_values", ""), resource.TestCheckNoResourceAttr(addonResourceName, "preserve"), resource.TestCheckResourceAttr(addonResourceName, "tags.%", "0"), ), @@ -807,7 +808,7 @@ func testAccCheckAddonUpdateTags(addon *eks.Addon, oldTags, newTags map[string]s } } -func testAccAddonBaseConfig(rName string) string { +func testAccAddonConfig_base(rName string) string { return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` data "aws_partition" "current" {} @@ -871,7 +872,7 @@ resource "aws_eks_cluster" "test" { } func testAccAddonConfig_basic(rName, addonName string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { cluster_name = aws_eks_cluster.test.name addon_name = %[2]q @@ -880,7 +881,7 @@ resource "aws_eks_addon" "test" { } func testAccAddonConfig_version(rName, addonName, addonVersion string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { cluster_name = aws_eks_cluster.test.name addon_name = %[2]q @@ -891,7 +892,7 @@ resource "aws_eks_addon" "test" { } func testAccAddonConfig_preserve(rName, addonName string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { cluster_name = aws_eks_cluster.test.name addon_name = %[2]q @@ -901,7 +902,7 @@ resource "aws_eks_addon" "test" { } func testAccAddonConfig_resolveConflicts(rName, addonName, resolveConflicts string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_eks_addon" "test" { cluster_name = aws_eks_cluster.test.name addon_name = %[2]q @@ -911,7 +912,7 @@ resource "aws_eks_addon" "test" { } func testAccAddonConfig_serviceAccountRoleARN(rName, addonName string) string { - return acctest.ConfigCompose(testAccAddonBaseConfig(rName), fmt.Sprintf(` + return acctest.ConfigCompose(testAccAddonConfig_base(rName), fmt.Sprintf(` resource "aws_iam_role" "test-service-role" { name = "test-service-role" assume_role_policy = <