Skip to content

Commit c81173d

Browse files
authored
Make dedicated VPC peering non-blockingadd (#230)
Signed-off-by: FingerLeader <wanxfinger@gmail.com>
1 parent dc4b20b commit c81173d

3 files changed

Lines changed: 27 additions & 10 deletions

File tree

docs/resources/dedicated_vpc_peering.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ resource "tidbcloud_dedicated_vpc_peering" "example" {
4444
customer_account_id = var.customer_account_id
4545
customer_vpc_id = var.customer_vpc_id
4646
customer_vpc_cidr = var.customer_vpc_cidr
47+
# non-blocking by design
48+
}
49+
50+
resource "aws_vpc_peering_connection_accepter" "peer" {
51+
vpc_peering_connection_id = tidbcloud_dedicated_vpc_peering.example.aws_vpc_peering_connection_id
52+
auto_accept = true
4753
}
4854
```
4955

examples/resources/tidbcloud_dedicated_vpc_peering/resource.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ resource "tidbcloud_dedicated_vpc_peering" "example" {
2929
customer_account_id = var.customer_account_id
3030
customer_vpc_id = var.customer_vpc_id
3131
customer_vpc_cidr = var.customer_vpc_cidr
32+
# non-blocking by design
33+
}
34+
35+
resource "aws_vpc_peering_connection_accepter" "peer" {
36+
vpc_peering_connection_id = tidbcloud_dedicated_vpc_peering.example.aws_vpc_peering_connection_id
37+
auto_accept = true
3238
}

internal/provider/dedicated_vpc_peering_resource.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,15 @@ func (r *DedicatedVpcPeeringResource) Create(ctx context.Context, req resource.C
176176
return
177177
}
178178

179-
VpcPeeringId := *VpcPeering.VpcPeeringId
180-
data.VpcPeeringId = types.StringValue(VpcPeeringId)
181-
tflog.Info(ctx, "wait dedicated vpc peering ready")
182-
VpcPeering, err = WaitDedicatedVpcPeeringReady(ctx, clusterCreateTimeout, clusterCreateInterval, VpcPeeringId, r.provider.DedicatedClient)
179+
VpcPeering, err = WaitDedicatedVpcPeeringReady(ctx, clusterCreateTimeout, clusterCreateInterval, *VpcPeering.VpcPeeringId, r.provider.DedicatedClient)
183180
if err != nil {
184181
resp.Diagnostics.AddError(
185182
"Dedicated vpc peering creation failed",
186-
fmt.Sprintf("Dedicated vpc peering is not ready, get error: %s", err),
183+
fmt.Sprintf("aws_vpc_peering_connection_id is not ready, get error: %s", err),
187184
)
188185
return
189186
}
187+
190188
refreshDedicatedVpcPeeringResourceData(ctx, VpcPeering, &data)
191189

192190
// save into the Terraform state.
@@ -272,6 +270,8 @@ func refreshDedicatedVpcPeeringResourceData(ctx context.Context, vpcPeering *ded
272270
data.CustomerVpcCidr = types.StringValue(vpcPeering.CustomerVpcCidr)
273271
if vpcPeering.AwsVpcPeeringConnectionId.IsSet() {
274272
data.AWSVpcPeeringConnectionId = types.StringValue(*vpcPeering.AwsVpcPeeringConnectionId.Get())
273+
} else {
274+
data.AWSVpcPeeringConnectionId = types.StringNull()
275275
}
276276
labels, diag := types.MapValueFrom(ctx, types.StringType, *vpcPeering.Labels)
277277
if diag.HasError() {
@@ -284,11 +284,10 @@ func WaitDedicatedVpcPeeringReady(ctx context.Context, timeout time.Duration, in
284284
client tidbcloud.TiDBCloudDedicatedClient) (*dedicated.Dedicatedv1beta1VpcPeering, error) {
285285
stateConf := &retry.StateChangeConf{
286286
Pending: []string{
287-
string(dedicated.DEDICATEDV1BETA1VPCPEERINGSTATE_PENDING),
287+
"pending",
288288
},
289289
Target: []string{
290-
string(dedicated.DEDICATEDV1BETA1VPCPEERINGSTATE_FAILED),
291-
string(dedicated.DEDICATEDV1BETA1VPCPEERINGSTATE_ACTIVE),
290+
"ready",
292291
},
293292
Timeout: timeout,
294293
MinTimeout: 500 * time.Millisecond,
@@ -307,11 +306,17 @@ func WaitDedicatedVpcPeeringReady(ctx context.Context, timeout time.Duration, in
307306
func dedicatedVpcPeeringStateRefreshFunc(ctx context.Context, VpcPeeringId string,
308307
client tidbcloud.TiDBCloudDedicatedClient) retry.StateRefreshFunc {
309308
return func() (interface{}, string, error) {
310-
tflog.Trace(ctx, "Waiting for dedicated vpc peering ready")
309+
tflog.Trace(ctx, "Waiting for aws_vpc_peering_connection_id")
311310
VpcPeering, err := client.GetVPCPeering(ctx, VpcPeeringId)
312311
if err != nil {
313312
return nil, "", err
314313
}
315-
return VpcPeering, string(*VpcPeering.State), nil
314+
if VpcPeering.State != nil && *VpcPeering.State == dedicated.DEDICATEDV1BETA1VPCPEERINGSTATE_FAILED {
315+
return VpcPeering, "failed", fmt.Errorf("dedicated vpc peering is in FAILED state")
316+
}
317+
if VpcPeering.AwsVpcPeeringConnectionId.IsSet() {
318+
return VpcPeering, "ready", nil
319+
}
320+
return VpcPeering, "pending", nil
316321
}
317322
}

0 commit comments

Comments
 (0)