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

aws_elasticache_replication_group: modify before scale in #34819

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
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
39 changes: 22 additions & 17 deletions internal/service/elasticache/replication_group.go
Original file line number Diff line number Diff line change
@@ -719,9 +719,16 @@ func resourceReplicationGroupUpdate(ctx context.Context, d *schema.ResourceData,
return sdkdiag.AppendErrorf(diags, "modifying ElastiCache Replication Group (%s) shard configuration: %s", d.Id(), err)
}
} else if d.HasChange("num_cache_clusters") {
err := modifyReplicationGroupNumCacheClusters(ctx, conn, d, "num_cache_clusters")
if err != nil {
return sdkdiag.AppendErrorf(diags, "modifying ElastiCache Replication Group (%s) clusters: %s", d.Id(), err)
o, n := d.GetChange("num_cache_clusters")
oldNumberCacheClusters := o.(int)
newNumberCacheClusters := n.(int)
if newNumberCacheClusters > oldNumberCacheClusters {
err := increaseReplicationGroupNumCacheClusters(ctx, conn, d.Id(), newNumberCacheClusters, d.Timeout(schema.TimeoutUpdate))
if err != nil {
return sdkdiag.AppendErrorf(diags, "increasing ElastiCache Replication size (%s) clusters: %s", d.Id(), err)
}
} else if newNumberCacheClusters < oldNumberCacheClusters {
// deferring size in until after cluster modifications
}
}

@@ -891,6 +898,18 @@ func resourceReplicationGroupUpdate(ctx context.Context, d *schema.ResourceData,
return sdkdiag.AppendErrorf(diags, "waiting for ElastiCache Replication Group (%s) auth_token change: %s", d.Id(), err)
}
}

if d.HasChange("num_cache_clusters") {
o, n := d.GetChange("num_cache_clusters")
oldNumberCacheClusters := o.(int)
newNumberCacheClusters := n.(int)
if oldNumberCacheClusters < newNumberCacheClusters {
err := decreaseReplicationGroupNumCacheClusters(ctx, conn, d.Id(), newNumberCacheClusters, d.Timeout(schema.TimeoutUpdate))
if err != nil {
return sdkdiag.AppendErrorf(diags, "decreasing ElastiCache Replication size (%s) clusters: %s", d.Id(), err)
}
}
}
}

return append(diags, resourceReplicationGroupRead(ctx, d, meta)...)
@@ -1105,20 +1124,6 @@ func modifyReplicationGroupShardConfigurationReplicasPerNodeGroup(ctx context.Co
return nil
}

func modifyReplicationGroupNumCacheClusters(ctx context.Context, conn *elasticache.ElastiCache, d *schema.ResourceData, argument string) error {
o, n := d.GetChange(argument)
oldNumberCacheClusters := o.(int)
newNumberCacheClusters := n.(int)

var err error
if newNumberCacheClusters > oldNumberCacheClusters {
err = increaseReplicationGroupNumCacheClusters(ctx, conn, d.Id(), newNumberCacheClusters, d.Timeout(schema.TimeoutUpdate))
} else if newNumberCacheClusters < oldNumberCacheClusters {
err = decreaseReplicationGroupNumCacheClusters(ctx, conn, d.Id(), newNumberCacheClusters, d.Timeout(schema.TimeoutUpdate))
}
return err
}

func increaseReplicationGroupNumCacheClusters(ctx context.Context, conn *elasticache.ElastiCache, replicationGroupID string, newNumberCacheClusters int, timeout time.Duration) error {
input := &elasticache.IncreaseReplicaCountInput{
ApplyImmediately: aws.Bool(true),