From 2749a64885969ea681b8cbcd6b43e6f3075df9eb Mon Sep 17 00:00:00 2001 From: Chandra Prakash Date: Fri, 1 Dec 2023 01:35:42 +0000 Subject: [PATCH 1/7] Add standby_replicas attribute to opensearch serverless collection --- .../opensearchserverless/collection.go | 18 +++++++ .../collection_data_source.go | 5 ++ .../collection_data_source_test.go | 1 + .../opensearchserverless/collection_test.go | 52 +++++++++++++++++++ ...nsearchserverless_collection.html.markdown | 1 + ...nsearchserverless_collection.html.markdown | 1 + 6 files changed, 78 insertions(+) diff --git a/internal/service/opensearchserverless/collection.go b/internal/service/opensearchserverless/collection.go index e661616cd74c..5814cff7c79e 100644 --- a/internal/service/opensearchserverless/collection.go +++ b/internal/service/opensearchserverless/collection.go @@ -51,6 +51,7 @@ type resourceCollectionData struct { ID types.String `tfsdk:"id"` KmsKeyARN types.String `tfsdk:"kms_key_arn"` Name types.String `tfsdk:"name"` + StandbyReplicas types.String `tfsdk:"standby_replicas"` Tags types.Map `tfsdk:"tags"` TagsAll types.Map `tfsdk:"tags_all"` Timeouts timeouts.Value `tfsdk:"timeouts"` @@ -112,6 +113,17 @@ func (r *resourceCollection) Schema(ctx context.Context, req resource.SchemaRequ }, names.AttrTags: tftags.TagsAttribute(), names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), + "standby_replicas": schema.StringAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + stringplanmodifier.UseStateForUnknown(), + }, + Validators: []validator.String{ + enum.FrameworkValidate[awstypes.StandbyReplicas](), + }, + }, "type": schema.StringAttribute{ Optional: true, Computed: true, @@ -158,6 +170,10 @@ func (r *resourceCollection) Create(ctx context.Context, req resource.CreateRequ in.Type = awstypes.CollectionType(plan.Type.ValueString()) } + if !plan.StandbyReplicas.IsNull() { + in.StandbyReplicas = awstypes.StandbyReplicas(plan.StandbyReplicas.ValueString()) + } + out, err := conn.CreateCollection(ctx, in) if err != nil { resp.Diagnostics.AddError( @@ -187,6 +203,7 @@ func (r *resourceCollection) Create(ctx context.Context, req resource.CreateRequ state.Description = flex.StringToFramework(ctx, waitOut.Description) state.KmsKeyARN = flex.StringToFramework(ctx, waitOut.KmsKeyArn) state.Name = flex.StringToFramework(ctx, waitOut.Name) + state.StandbyReplicas = flex.StringValueToFramework(ctx, waitOut.StandbyReplicas) state.Type = flex.StringValueToFramework(ctx, waitOut.Type) resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) @@ -223,6 +240,7 @@ func (r *resourceCollection) Read(ctx context.Context, req resource.ReadRequest, state.ID = flex.StringToFramework(ctx, out.Id) state.KmsKeyARN = flex.StringToFramework(ctx, out.KmsKeyArn) state.Name = flex.StringToFramework(ctx, out.Name) + state.StandbyReplicas = flex.StringValueToFramework(ctx, out.StandbyReplicas) state.Type = flex.StringValueToFramework(ctx, out.Type) resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) diff --git a/internal/service/opensearchserverless/collection_data_source.go b/internal/service/opensearchserverless/collection_data_source.go index 74c61741b8d0..ad8ffac116e2 100644 --- a/internal/service/opensearchserverless/collection_data_source.go +++ b/internal/service/opensearchserverless/collection_data_source.go @@ -83,6 +83,9 @@ func (d *dataSourceCollection) Schema(_ context.Context, _ datasource.SchemaRequ }, }, names.AttrTags: tftags.TagsAttributeComputedOnly(), + "standby_replicas": schema.StringAttribute{ + Computed: true, + }, "type": schema.StringAttribute{ Computed: true, }, @@ -133,6 +136,7 @@ func (d *dataSourceCollection) Read(ctx context.Context, req datasource.ReadRequ data.ID = flex.StringToFramework(ctx, out.Id) data.KmsKeyARN = flex.StringToFramework(ctx, out.KmsKeyArn) data.Name = flex.StringToFramework(ctx, out.Name) + data.StandbyReplicas = flex.StringValueToFramework(ctx, out.StandbyReplicas) data.Type = flex.StringValueToFramework(ctx, out.Type) createdDate := time.UnixMilli(aws.ToInt64(out.CreatedDate)) @@ -168,6 +172,7 @@ type dataSourceCollectionData struct { KmsKeyARN types.String `tfsdk:"kms_key_arn"` LastModifiedDate types.String `tfsdk:"last_modified_date"` Name types.String `tfsdk:"name"` + StandbyReplicas types.String `tfsdk:"standby_replicas"` Tags types.Map `tfsdk:"tags"` Type types.String `tfsdk:"type"` } diff --git a/internal/service/opensearchserverless/collection_data_source_test.go b/internal/service/opensearchserverless/collection_data_source_test.go index 8635998e5692..4719dfb7df96 100644 --- a/internal/service/opensearchserverless/collection_data_source_test.go +++ b/internal/service/opensearchserverless/collection_data_source_test.go @@ -85,6 +85,7 @@ func TestAccOpenSearchServerlessCollectionDataSource_name(t *testing.T) { resource.TestCheckResourceAttrPair(dataSourceName, "dashboard_endpoint", resourceName, "dashboard_endpoint"), resource.TestCheckResourceAttrPair(dataSourceName, "description", resourceName, "description"), resource.TestCheckResourceAttrPair(dataSourceName, "kms_key_arn", resourceName, "kms_key_arn"), + resource.TestCheckResourceAttrPair(dataSourceName, "standby_replicas", resourceName, "standby_replicas"), resource.TestCheckResourceAttrPair(dataSourceName, "type", resourceName, "type"), ), }, diff --git a/internal/service/opensearchserverless/collection_test.go b/internal/service/opensearchserverless/collection_test.go index 6a43b4957ac3..2b0dc2391e91 100644 --- a/internal/service/opensearchserverless/collection_test.go +++ b/internal/service/opensearchserverless/collection_test.go @@ -57,6 +57,44 @@ func TestAccOpenSearchServerlessCollection_basic(t *testing.T) { }) } +func TestAccOpenSearchServerlessCollection_standbyReplicas(t *testing.T) { + ctx := acctest.Context(t) + var collection types.CollectionDetail + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + rStandbyReplicas := "DISABLED" + resourceName := "aws_opensearchserverless_collection.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.OpenSearchServerlessEndpointID) + testAccPreCheckCollection(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.OpenSearchServerlessEndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckCollectionDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccCollectionConfig_standbyReplicas(rName, rStandbyReplicas), + Check: resource.ComposeTestCheckFunc( + testAccCheckCollectionExists(ctx, resourceName, &collection), + resource.TestCheckResourceAttrSet(resourceName, "type"), + resource.TestCheckResourceAttrSet(resourceName, "collection_endpoint"), + resource.TestCheckResourceAttrSet(resourceName, "dashboard_endpoint"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_arn"), + resource.TestCheckResourceAttrSet(resourceName, "standby_replicas"), + resource.TestCheckResourceAttr(resourceName, "standby_replicas", rStandbyReplicas), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func TestAccOpenSearchServerlessCollection_tags(t *testing.T) { ctx := acctest.Context(t) var collection types.CollectionDetail @@ -265,6 +303,20 @@ resource "aws_opensearchserverless_collection" "test" { ) } +func testAccCollectionConfig_standbyReplicas(rName string, rStandbyReplicas string) string { + return acctest.ConfigCompose( + testAccCollectionBaseConfig(rName), + fmt.Sprintf(` +resource "aws_opensearchserverless_collection" "test" { + name = %[1]q + standby_replicas = %2q + + depends_on = [aws_opensearchserverless_security_policy.test] +} +`, rName, rStandbyReplicas), + ) +} + func testAccCollectionConfig_update(rName, description string) string { return acctest.ConfigCompose( testAccCollectionBaseConfig(rName), diff --git a/website/docs/d/opensearchserverless_collection.html.markdown b/website/docs/d/opensearchserverless_collection.html.markdown index 7abacc736cbc..74313c7dfa9e 100644 --- a/website/docs/d/opensearchserverless_collection.html.markdown +++ b/website/docs/d/opensearchserverless_collection.html.markdown @@ -40,3 +40,4 @@ This data source exports the following attributes in addition to the arguments a * `last_modified_date` - Date the Collection was last modified. * `tags` - A map of tags to assign to the collection. * `type` - Type of collection. +* `standby_replicas` - Indicates whether standby replicas should be used for a collection. diff --git a/website/docs/r/opensearchserverless_collection.html.markdown b/website/docs/r/opensearchserverless_collection.html.markdown index 18f437f6cbb3..f6e43973efb9 100644 --- a/website/docs/r/opensearchserverless_collection.html.markdown +++ b/website/docs/r/opensearchserverless_collection.html.markdown @@ -53,6 +53,7 @@ The following arguments are optional: * `description` - (Optional) Description of the collection. * `tags` - (Optional) A map of tags to assign to the collection. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. * `type` - (Optional) Type of collection. One of `SEARCH`, `TIMESERIES`, or `VECTORSEARCH`. Defaults to `TIMESERIES`. +* `standby_replicas - (optional)` Indicates whether standby replicas should be used for a collection. One of `ENABLED` or `DISABLED`. Defaults to `ENABLED`. ## Attribute Reference From 84fc7e44a776191d386e8ec3f84672c1c3e522a2 Mon Sep 17 00:00:00 2001 From: Chandra Prakash Date: Fri, 1 Dec 2023 02:42:13 +0000 Subject: [PATCH 2/7] changelog added for pull request 34677 --- .changelog/34677.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/34677.txt diff --git a/.changelog/34677.txt b/.changelog/34677.txt new file mode 100644 index 000000000000..1edcd66001b5 --- /dev/null +++ b/.changelog/34677.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_opensearchserverless_collection: Add `standby_replicas` argument +``` \ No newline at end of file From 24fd014ddf7e3e8977b373e9e8c3e3ed1e63bc73 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Mon, 11 Dec 2023 13:21:15 -0600 Subject: [PATCH 3/7] chore: fix linting on acctest --- .../opensearchserverless/collection_test.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/internal/service/opensearchserverless/collection_test.go b/internal/service/opensearchserverless/collection_test.go index 2b0dc2391e91..8e8106f5c218 100644 --- a/internal/service/opensearchserverless/collection_test.go +++ b/internal/service/opensearchserverless/collection_test.go @@ -61,7 +61,7 @@ func TestAccOpenSearchServerlessCollection_standbyReplicas(t *testing.T) { ctx := acctest.Context(t) var collection types.CollectionDetail rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - rStandbyReplicas := "DISABLED" + standbyReplicas := "DISABLED" resourceName := "aws_opensearchserverless_collection.test" resource.ParallelTest(t, resource.TestCase{ @@ -75,15 +75,14 @@ func TestAccOpenSearchServerlessCollection_standbyReplicas(t *testing.T) { CheckDestroy: testAccCheckCollectionDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccCollectionConfig_standbyReplicas(rName, rStandbyReplicas), + Config: testAccCollectionConfig_standbyReplicas(rName, standbyReplicas), Check: resource.ComposeTestCheckFunc( testAccCheckCollectionExists(ctx, resourceName, &collection), resource.TestCheckResourceAttrSet(resourceName, "type"), resource.TestCheckResourceAttrSet(resourceName, "collection_endpoint"), resource.TestCheckResourceAttrSet(resourceName, "dashboard_endpoint"), resource.TestCheckResourceAttrSet(resourceName, "kms_key_arn"), - resource.TestCheckResourceAttrSet(resourceName, "standby_replicas"), - resource.TestCheckResourceAttr(resourceName, "standby_replicas", rStandbyReplicas), + resource.TestCheckResourceAttr(resourceName, "standby_replicas", standbyReplicas), ), }, { @@ -303,17 +302,17 @@ resource "aws_opensearchserverless_collection" "test" { ) } -func testAccCollectionConfig_standbyReplicas(rName string, rStandbyReplicas string) string { +func testAccCollectionConfig_standbyReplicas(rName string, standbyReplicas string) string { return acctest.ConfigCompose( testAccCollectionBaseConfig(rName), fmt.Sprintf(` resource "aws_opensearchserverless_collection" "test" { - name = %[1]q - standby_replicas = %2q + name = %[1]q + standby_replicas = %[2]q depends_on = [aws_opensearchserverless_security_policy.test] } -`, rName, rStandbyReplicas), +`, rName, standbyReplicas), ) } From db1de6811df718768e3fede4752ebafe98ab6ef3 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Mon, 11 Dec 2023 13:23:41 -0600 Subject: [PATCH 4/7] chore: sort schemas alphabetically --- internal/service/opensearchserverless/collection.go | 4 ++-- .../service/opensearchserverless/collection_data_source.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/service/opensearchserverless/collection.go b/internal/service/opensearchserverless/collection.go index 5814cff7c79e..d2e7d7dbe119 100644 --- a/internal/service/opensearchserverless/collection.go +++ b/internal/service/opensearchserverless/collection.go @@ -111,8 +111,6 @@ func (r *resourceCollection) Schema(ctx context.Context, req resource.SchemaRequ `must start with any lower case letter and can can include any lower case letter, number, or "-"`), }, }, - names.AttrTags: tftags.TagsAttribute(), - names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), "standby_replicas": schema.StringAttribute{ Optional: true, Computed: true, @@ -124,6 +122,8 @@ func (r *resourceCollection) Schema(ctx context.Context, req resource.SchemaRequ enum.FrameworkValidate[awstypes.StandbyReplicas](), }, }, + names.AttrTags: tftags.TagsAttribute(), + names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), "type": schema.StringAttribute{ Optional: true, Computed: true, diff --git a/internal/service/opensearchserverless/collection_data_source.go b/internal/service/opensearchserverless/collection_data_source.go index ad8ffac116e2..e93e9ec24324 100644 --- a/internal/service/opensearchserverless/collection_data_source.go +++ b/internal/service/opensearchserverless/collection_data_source.go @@ -82,10 +82,10 @@ func (d *dataSourceCollection) Schema(_ context.Context, _ datasource.SchemaRequ ), }, }, - names.AttrTags: tftags.TagsAttributeComputedOnly(), "standby_replicas": schema.StringAttribute{ Computed: true, }, + names.AttrTags: tftags.TagsAttributeComputedOnly(), "type": schema.StringAttribute{ Computed: true, }, From 25725d49ceeada77c708ebaa50964c24aff343c6 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Mon, 11 Dec 2023 13:28:32 -0600 Subject: [PATCH 5/7] chore: update documentation --- website/docs/d/opensearchserverless_collection.html.markdown | 2 +- website/docs/r/opensearchserverless_collection.html.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/d/opensearchserverless_collection.html.markdown b/website/docs/d/opensearchserverless_collection.html.markdown index 74313c7dfa9e..b729fdee8627 100644 --- a/website/docs/d/opensearchserverless_collection.html.markdown +++ b/website/docs/d/opensearchserverless_collection.html.markdown @@ -38,6 +38,6 @@ This data source exports the following attributes in addition to the arguments a * `description` - Description of the collection. * `kms_key_arn` - The ARN of the Amazon Web Services KMS key used to encrypt the collection. * `last_modified_date` - Date the Collection was last modified. +* `standby_replicas` - Indicates whether standby replicas should be used for a collection. * `tags` - A map of tags to assign to the collection. * `type` - Type of collection. -* `standby_replicas` - Indicates whether standby replicas should be used for a collection. diff --git a/website/docs/r/opensearchserverless_collection.html.markdown b/website/docs/r/opensearchserverless_collection.html.markdown index f6e43973efb9..6de370529332 100644 --- a/website/docs/r/opensearchserverless_collection.html.markdown +++ b/website/docs/r/opensearchserverless_collection.html.markdown @@ -51,9 +51,9 @@ The following arguments are required: The following arguments are optional: * `description` - (Optional) Description of the collection. +* * `standby_replicas` - (Optional) Indicates whether standby replicas should be used for a collection. One of `ENABLED` or `DISABLED`. Defaults to `ENABLED`. * `tags` - (Optional) A map of tags to assign to the collection. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. * `type` - (Optional) Type of collection. One of `SEARCH`, `TIMESERIES`, or `VECTORSEARCH`. Defaults to `TIMESERIES`. -* `standby_replicas - (optional)` Indicates whether standby replicas should be used for a collection. One of `ENABLED` or `DISABLED`. Defaults to `ENABLED`. ## Attribute Reference From ed7a5d5e371864054abe50fbb4670fb29106275b Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Mon, 11 Dec 2023 13:44:28 -0600 Subject: [PATCH 6/7] fix linter for docs --- .../service/opensearchserverless/collection_data_source_test.go | 2 +- website/docs/r/opensearchserverless_collection.html.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/opensearchserverless/collection_data_source_test.go b/internal/service/opensearchserverless/collection_data_source_test.go index 4719dfb7df96..619f9b1de508 100644 --- a/internal/service/opensearchserverless/collection_data_source_test.go +++ b/internal/service/opensearchserverless/collection_data_source_test.go @@ -46,6 +46,7 @@ func TestAccOpenSearchServerlessCollectionDataSource_basic(t *testing.T) { resource.TestCheckResourceAttrPair(dataSourceName, "dashboard_endpoint", resourceName, "dashboard_endpoint"), resource.TestCheckResourceAttrPair(dataSourceName, "description", resourceName, "description"), resource.TestCheckResourceAttrPair(dataSourceName, "kms_key_arn", resourceName, "kms_key_arn"), + resource.TestCheckResourceAttrPair(dataSourceName, "standby_replicas", resourceName, "standby_replicas"), resource.TestCheckResourceAttrPair(dataSourceName, "type", resourceName, "type"), ), }, @@ -85,7 +86,6 @@ func TestAccOpenSearchServerlessCollectionDataSource_name(t *testing.T) { resource.TestCheckResourceAttrPair(dataSourceName, "dashboard_endpoint", resourceName, "dashboard_endpoint"), resource.TestCheckResourceAttrPair(dataSourceName, "description", resourceName, "description"), resource.TestCheckResourceAttrPair(dataSourceName, "kms_key_arn", resourceName, "kms_key_arn"), - resource.TestCheckResourceAttrPair(dataSourceName, "standby_replicas", resourceName, "standby_replicas"), resource.TestCheckResourceAttrPair(dataSourceName, "type", resourceName, "type"), ), }, diff --git a/website/docs/r/opensearchserverless_collection.html.markdown b/website/docs/r/opensearchserverless_collection.html.markdown index 6de370529332..239f6065c875 100644 --- a/website/docs/r/opensearchserverless_collection.html.markdown +++ b/website/docs/r/opensearchserverless_collection.html.markdown @@ -51,7 +51,7 @@ The following arguments are required: The following arguments are optional: * `description` - (Optional) Description of the collection. -* * `standby_replicas` - (Optional) Indicates whether standby replicas should be used for a collection. One of `ENABLED` or `DISABLED`. Defaults to `ENABLED`. +* `standby_replicas` - (Optional) Indicates whether standby replicas should be used for a collection. One of `ENABLED` or `DISABLED`. Defaults to `ENABLED`. * `tags` - (Optional) A map of tags to assign to the collection. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. * `type` - (Optional) Type of collection. One of `SEARCH`, `TIMESERIES`, or `VECTORSEARCH`. Defaults to `TIMESERIES`. From a1a7bd6ac77242d2e28d619400324347c58e71fe Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Mon, 11 Dec 2023 13:45:17 -0600 Subject: [PATCH 7/7] update CHANGELOG to add datasource --- .changelog/34677.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.changelog/34677.txt b/.changelog/34677.txt index 1edcd66001b5..751416cec02e 100644 --- a/.changelog/34677.txt +++ b/.changelog/34677.txt @@ -1,3 +1,7 @@ ```release-note:enhancement -resource/aws_opensearchserverless_collection: Add `standby_replicas` argument +resource/aws_opensearchserverless_collection: Add `standby_replicas` attribute +``` + +```release-note:enhancement +data-source/aws_opensearchserverless_collection: Add `standby_replicas` attribute ``` \ No newline at end of file