Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

memorydb: add new multi_region_cluster resource #40376

Merged
merged 72 commits into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from 68 commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
ab4bc1a
memorydb: add new `multi_region_cluster` resource
bschaatsbergen Dec 1, 2024
16f44c6
memorydb: [wip] implement `multi_region_cluster` resource
bschaatsbergen Dec 1, 2024
21e99a9
memorydb: gen `multi_region_cluster`
bschaatsbergen Dec 1, 2024
218d559
memorydb: fix name
bschaatsbergen Dec 1, 2024
b662cc2
memorydb: [wip] implement cluster flatten and expand
bschaatsbergen Dec 1, 2024
715dd01
memorydb: remove expand
bschaatsbergen Dec 1, 2024
bb67451
memorydb: fix flatten
bschaatsbergen Dec 1, 2024
8e39305
memorydb: implement update
bschaatsbergen Dec 1, 2024
4435a8c
memorydb: change to `name`
bschaatsbergen Dec 1, 2024
7581f69
Merge remote-tracking branch 'upstream/main' into f/memorydb-multi-re…
bschaatsbergen Dec 2, 2024
f55691b
memorydb: fix sdk errors
bschaatsbergen Dec 3, 2024
9dd8e12
memorydb: add tests for multi region cluster
bschaatsbergen Dec 3, 2024
faa3d6d
memorydb: shorten suffix and parameter group argument
bschaatsbergen Dec 3, 2024
dee1097
memorydb: set test arguments
bschaatsbergen Dec 3, 2024
bd8f776
memorydb: retain `suffix` in read operation
bschaatsbergen Dec 3, 2024
d24c8c3
memorydb: use the right `node_type` for multi region clusters
bschaatsbergen Dec 3, 2024
c071ec6
memorydb: add `multi_region_cluster_name` to memorydb cluster
bschaatsbergen Dec 3, 2024
6f52673
memorydb: add `multI_region_cluster_name` test
bschaatsbergen Dec 5, 2024
815fd48
memorydb: extract suffix when reading
bschaatsbergen Dec 5, 2024
6076bce
names: add suffix attribute
bschaatsbergen Dec 5, 2024
1e0319d
memorydb: use suffix attribute
bschaatsbergen Dec 5, 2024
1ad7608
memorydb: tls_enabled can't be updated
bschaatsbergen Dec 5, 2024
81e1aa1
memorydb: change to name attribute for consistency
bschaatsbergen Dec 5, 2024
459f05f
memorydb: add more multi region cluster tests
bschaatsbergen Dec 5, 2024
b3aa2e5
memorydb: fix check exists in multi region cluster tags test
bschaatsbergen Dec 5, 2024
1877781
memorydb: acc test lint
bschaatsbergen Dec 5, 2024
2848d89
memorydb: use `name_suffix`
bschaatsbergen Dec 5, 2024
5bd6735
memorydb: lint
bschaatsbergen Dec 5, 2024
1c05ac8
memorydb: add multi region cluster resource docs
bschaatsbergen Dec 5, 2024
bb91633
memorydb: add `aws_memorydb_multi_region_cluster` changelog
bschaatsbergen Dec 5, 2024
ff182e9
memorydb: fix attribute assert
bschaatsbergen Dec 5, 2024
faa91e9
memorydb: add `multi_region_cluster_name` argument to changelog
bschaatsbergen Dec 5, 2024
8f1b4cf
memorydb: fix semgrep findings
bschaatsbergen Dec 6, 2024
3162299
names: add suffix related attributes
bschaatsbergen Dec 6, 2024
592e19c
memorydb: fix typo
bschaatsbergen Dec 6, 2024
e1fa5af
memorydb: test resource attributes
bschaatsbergen Dec 6, 2024
9ee9d91
names: generate suffix attributes
bschaatsbergen Dec 7, 2024
43d0cc9
memorydb: fix linting
bschaatsbergen Dec 7, 2024
48255dc
memorydb: delete associated multi-region cluster when a cluster is re…
bschaatsbergen Dec 7, 2024
4ed70e6
memorydb: remove `clusters` from schema
bschaatsbergen Dec 7, 2024
3d1c160
memorydb: add a small delay before waiting
bschaatsbergen Dec 7, 2024
d3f7aa8
chore: wait until multi region cluster is available if we add a clust…
bschaatsbergen Dec 12, 2024
7544b6d
memorydb: rewrite to plugin framework
bschaatsbergen Dec 12, 2024
e4b7b1e
memorydb: fix missing argument
bschaatsbergen Dec 13, 2024
0c174eb
memorydb: remove redundant update arguments
bschaatsbergen Dec 13, 2024
0967fd9
memorydb: make gen
bschaatsbergen Dec 13, 2024
499b33b
memorydb: address feedback from @jar-b
bschaatsbergen Dec 16, 2024
d70701a
memorydb: fmt acceptance tests
bschaatsbergen Dec 16, 2024
c1f19a0
memorydb: fmt cluster tests
bschaatsbergen Dec 16, 2024
278ab74
memorydb: before deleting the multi-region cluster, ensure it is read…
bschaatsbergen Dec 16, 2024
867020a
memorydb: add `aws_memorydb_multi_region_cluster` argument
bschaatsbergen Dec 16, 2024
ace4724
memorydb: add continuous target occurence checking in waiters
bschaatsbergen Dec 16, 2024
9700223
Merge branch 'main' into f/memorydb-multi-region
jar-b Dec 16, 2024
1e6d9c1
chore: fix golangci-lint finding
jar-b Dec 16, 2024
ef6e370
r/aws_memorydb_multi_region_cluster: prevent nil pointer deref
jar-b Dec 16, 2024
00d410c
r/aws_memorydb_multi_region_cluster: avoid nil pointer deref on read
jar-b Dec 16, 2024
318a2f1
r/aws_memorydb_multi_region_cluster: alphabetize attributes
jar-b Dec 16, 2024
4332193
r/aws_memorydb_cluster(test): tweak multi region cluster test config
jar-b Dec 16, 2024
8d7950b
r/aws_memorydb_cluster(doc): fix typo
jar-b Dec 16, 2024
27dd6ef
r/aws_memorydb_multi_region_cluster(doc): tidy argument descriptions,…
jar-b Dec 16, 2024
ba63306
r/aws_memorydb_multi_region_cluster: serialize update requests
jar-b Dec 16, 2024
6e2b8b3
r/aws_memorydb_multi_region_cluster: fix misspell
jar-b Dec 17, 2024
4bec475
r/aws_memorydb_multi_region_cluster: handle resource not found during…
jar-b Dec 17, 2024
43e3af9
r/aws_memorydb_multi_region_cluster(test): add _disappears case
jar-b Dec 17, 2024
0f1fc7b
r/aws_memorydb_multi_region_cluster: remove default `description`
jar-b Dec 17, 2024
f679b45
r/aws_memorydb_multi_region_cluster: handle all errors from find duri…
jar-b Dec 17, 2024
67d34f5
r/aws_memorydb_multi_region_cluster: remove provider default for `tls…
jar-b Dec 17, 2024
6b3bfbb
r/aws_memorydb_multi_region_cluster: appease the semgrep overlords
jar-b Dec 17, 2024
ad8987f
r/aws_memorydb_multi_region_cluster: remove `id` attribute
jar-b Dec 18, 2024
5cd8eee
Merge branch 'main' into f/memorydb-multi-region
jar-b Dec 18, 2024
393d984
r/aws_memorydb_multi_region_cluster: set partial state before waiting
jar-b Dec 18, 2024
27715d2
chore: make fmt
jar-b Dec 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changelog/40376.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:new-resource
aws_memorydb_multi_region_cluster
```

```release-note:enhancement
resource/aws_memorydb_cluster: Add `multi_region_cluster_name` argument
```
23 changes: 23 additions & 0 deletions internal/service/memorydb/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ func resourceCluster() *schema.Resource {
Type: schema.TypeString,
Computed: true,
},
"multi_region_cluster_name": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
names.AttrEngine: {
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -324,6 +329,10 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int
input.MaintenanceWindow = aws.String(v.(string))
}

if v, ok := d.GetOk("multi_region_cluster_name"); ok {
input.MultiRegionClusterName = aws.String(v.(string))
}

if v, ok := d.GetOk(names.AttrParameterGroupName); ok {
input.ParameterGroupName = aws.String(v.(string))
}
Expand Down Expand Up @@ -368,6 +377,15 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int

d.SetId(name)

// If a multi-region cluster name is set, ensure the `aws_memorydb_multi_region_cluster`
// is created and available before proceeding with cluster creation.
// Otherwise, the cluster creation will fail.
if v, ok := d.GetOk("multi_region_cluster_name"); ok {
if _, err := waitMultiRegionClusterAvailable(ctx, conn, v.(string), d.Timeout(schema.TimeoutCreate)); err != nil {
return sdkdiag.AppendErrorf(diags, "waiting for MemoryDB Multi-Region Cluster (%s) create: %s", v.(string), err)
}
}

if _, err := waitClusterAvailable(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil {
return sdkdiag.AppendErrorf(diags, "waiting for MemoryDB Cluster (%s) create: %s", d.Id(), err)
}
Expand Down Expand Up @@ -408,6 +426,7 @@ func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta inter
}
d.Set(names.AttrDescription, cluster.Description)
d.Set("engine_patch_version", cluster.EnginePatchVersion)
d.Set("multi_region_cluster_name", cluster.MultiRegionClusterName)
d.Set(names.AttrEngine, cluster.Engine)
d.Set(names.AttrEngineVersion, cluster.EngineVersion)
d.Set(names.AttrKMSKeyARN, cluster.KmsKeyId) // KmsKeyId is actually an ARN here.
Expand Down Expand Up @@ -561,6 +580,10 @@ func resourceClusterDelete(ctx context.Context, d *schema.ResourceData, meta int
ClusterName: aws.String(d.Id()),
}

if v := d.Get("multi_region_cluster_name"); v != nil && len(v.(string)) > 0 {
input.MultiRegionClusterName = aws.String(v.(string))
}

if v := d.Get("final_snapshot_name"); v != nil && len(v.(string)) > 0 {
input.FinalSnapshotName = aws.String(v.(string))
}
Expand Down
64 changes: 64 additions & 0 deletions internal/service/memorydb/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,34 @@ func TestAccMemoryDBCluster_create_withDataTiering(t *testing.T) {
})
}

func TestAccMemoryDBCluster_multiRegionClusterName(t *testing.T) {
ctx := acctest.Context(t)
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
resourceName := "aws_memorydb_cluster.test"
multiRegionClusterResourceName := "aws_memorydb_multi_region_cluster.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(ctx, t); testAccPreCheck(t) },
ErrorCheck: acctest.ErrorCheck(t, names.MemoryDBServiceID),
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
CheckDestroy: testAccCheckClusterDestroy(ctx),
Steps: []resource.TestStep{
{
Config: testAccClusterConfig_multiRegionClusterName(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckClusterExists(ctx, resourceName),
resource.TestCheckResourceAttrPair(resourceName, "multi_region_cluster_name", multiRegionClusterResourceName, "multi_region_cluster_name"),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccMemoryDBCluster_create_withKMS(t *testing.T) {
ctx := acctest.Context(t)
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
Expand Down Expand Up @@ -1371,6 +1399,42 @@ resource "aws_memorydb_cluster" "test" {
)
}

func testAccClusterConfig_multiRegionClusterName(rName string) string {
return acctest.ConfigCompose(
testAccClusterConfig_baseNetwork(rName),
testAccClusterConfig_baseUserAndACL(rName),
fmt.Sprintf(`
resource "aws_security_group" "test" {
name = %[1]q
vpc_id = aws_vpc.test.id

tags = {
Name = %[1]q
}
}

resource "aws_memorydb_multi_region_cluster" "test" {
multi_region_cluster_name_suffix = %[1]q
node_type = "db.r7g.xlarge"
num_shards = 2
}

resource "aws_memorydb_cluster" "test" {
acl_name = aws_memorydb_acl.test.id
auto_minor_version_upgrade = false
name = %[1]q
node_type = "db.r7g.xlarge"
num_shards = 2
security_group_ids = [aws_security_group.test.id]
snapshot_retention_limit = 7
subnet_group_name = aws_memorydb_subnet_group.test.id

multi_region_cluster_name = aws_memorydb_multi_region_cluster.test.multi_region_cluster_name
}
`, rName),
)
}

func testAccClusterConfig_kms(rName string) string {
return acctest.ConfigCompose(
testAccClusterConfig_baseNetwork(rName),
Expand Down
30 changes: 16 additions & 14 deletions internal/service/memorydb/exports_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,21 @@ package memorydb

// Exports for use in tests only.
var (
ResourceACL = resourceACL
ResourceCluster = resourceCluster
ResourceParameterGroup = resourceParameterGroup
ResourceSnapshot = resourceSnapshot
ResourceSubnetGroup = resourceSubnetGroup
ResourceUser = resourceUser
ResourceACL = resourceACL
ResourceCluster = resourceCluster
ResourceMultiRegionCluster = newMultiRegionClusterResource
ResourceParameterGroup = resourceParameterGroup
ResourceSnapshot = resourceSnapshot
ResourceSubnetGroup = resourceSubnetGroup
ResourceUser = resourceUser

FindACLByName = findACLByName
FindClusterByName = findClusterByName
FindParameterGroupByName = findParameterGroupByName
FindSnapshotByName = findSnapshotByName
FindSubnetGroupByName = findSubnetGroupByName
FindUserByName = findUserByName
ParameterChanges = parameterChanges
ParameterHash = parameterHash
FindACLByName = findACLByName
FindClusterByName = findClusterByName
FindMultiRegionClusterByName = findMultiRegionClusterByName
FindParameterGroupByName = findParameterGroupByName
FindSnapshotByName = findSnapshotByName
FindSubnetGroupByName = findSubnetGroupByName
FindUserByName = findUserByName
ParameterChanges = parameterChanges
ParameterHash = parameterHash
)
Loading
Loading