Skip to content

Commit f851277

Browse files
Merge pull request #5776 from yihuaf/yihuaf/mconn-1060/fix-mconn-resources
Fix magic transit connector (MCONN)
2 parents 033cf6d + e04727d commit f851277

File tree

8 files changed

+365
-11
lines changed

8 files changed

+365
-11
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package magic_transit_connector
2+
3+
import (
4+
"github.com/cloudflare/terraform-provider-cloudflare/internal/apijson"
5+
"github.com/hashicorp/terraform-plugin-framework/types"
6+
)
7+
8+
type CustomMagicTransitConnectorResultEnvelope struct {
9+
Result CustomMagicTransitConnectorModel `json:"result"`
10+
}
11+
12+
type CustomMagicTransitConnectorModel struct {
13+
ID types.String `tfsdk:"id" json:"id,computed"`
14+
AccountID types.String `tfsdk:"account_id" path:"account_id,required"`
15+
Device *CustomMagicTransitConnectorDeviceModel `tfsdk:"device" json:"device,required"`
16+
Activated types.Bool `tfsdk:"activated" json:"activated,computed_optional"`
17+
InterruptWindowDurationHours types.Float64 `tfsdk:"interrupt_window_duration_hours" json:"interrupt_window_duration_hours,computed_optional"`
18+
InterruptWindowHourOfDay types.Float64 `tfsdk:"interrupt_window_hour_of_day" json:"interrupt_window_hour_of_day,computed_optional"`
19+
Notes types.String `tfsdk:"notes" json:"notes,computed_optional"`
20+
Timezone types.String `tfsdk:"timezone" json:"timezone,computed_optional"`
21+
}
22+
23+
func (m CustomMagicTransitConnectorModel) MarshalJSON() (data []byte, err error) {
24+
return apijson.MarshalRoot(m)
25+
}
26+
27+
func (m CustomMagicTransitConnectorModel) MarshalJSONForUpdate(state CustomMagicTransitConnectorModel) (data []byte, err error) {
28+
return apijson.MarshalForPatch(m, state)
29+
}
30+
31+
type CustomMagicTransitConnectorDeviceModel struct {
32+
ID types.String `tfsdk:"id" json:"id,computed_optional"`
33+
SerialNumber types.String `tfsdk:"serial_number" json:"serial_number,computed_optional"`
34+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package magic_transit_connector_test
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/magic_transit_connector"
8+
"github.com/cloudflare/terraform-provider-cloudflare/internal/test_helpers"
9+
)
10+
11+
func TestCustomMagicTransitConnectorModelSchemaParity(t *testing.T) {
12+
t.Parallel()
13+
model := (*magic_transit_connector.CustomMagicTransitConnectorModel)(nil)
14+
schema := magic_transit_connector.CustomResourceSchema(context.TODO())
15+
errs := test_helpers.ValidateResourceModelSchemaIntegrity(model, schema)
16+
errs.Report(t)
17+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package magic_transit_connector
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-framework/resource"
7+
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
8+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
9+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
10+
)
11+
12+
var _ resource.ResourceWithConfigValidators = (*MagicTransitConnectorResource)(nil)
13+
14+
func CustomResourceSchema(_ context.Context) schema.Schema {
15+
return schema.Schema{
16+
Attributes: map[string]schema.Attribute{
17+
"id": schema.StringAttribute{
18+
Computed: true,
19+
PlanModifiers: []planmodifier.String{stringplanmodifier.UseStateForUnknown()},
20+
},
21+
"account_id": schema.StringAttribute{
22+
Description: "Account identifier",
23+
Required: true,
24+
PlanModifiers: []planmodifier.String{stringplanmodifier.RequiresReplace()},
25+
},
26+
"device": schema.SingleNestedAttribute{
27+
Required: true,
28+
Attributes: map[string]schema.Attribute{
29+
"id": schema.StringAttribute{
30+
Optional: true,
31+
Computed: true,
32+
PlanModifiers: []planmodifier.String{stringplanmodifier.RequiresReplaceIfConfigured()},
33+
},
34+
"serial_number": schema.StringAttribute{
35+
Optional: true,
36+
Computed: true,
37+
PlanModifiers: []planmodifier.String{stringplanmodifier.RequiresReplaceIfConfigured()},
38+
},
39+
},
40+
},
41+
"activated": schema.BoolAttribute{
42+
Optional: true,
43+
Computed: true,
44+
},
45+
"interrupt_window_duration_hours": schema.Float64Attribute{
46+
Optional: true,
47+
Computed: true,
48+
},
49+
"interrupt_window_hour_of_day": schema.Float64Attribute{
50+
Optional: true,
51+
Computed: true,
52+
},
53+
"notes": schema.StringAttribute{
54+
Optional: true,
55+
Computed: true,
56+
},
57+
"timezone": schema.StringAttribute{
58+
Optional: true,
59+
Computed: true,
60+
},
61+
},
62+
}
63+
}

internal/services/magic_transit_connector/resource.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (r *MagicTransitConnectorResource) Configure(ctx context.Context, req resou
5656
}
5757

5858
func (r *MagicTransitConnectorResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
59-
var data *MagicTransitConnectorModel
59+
var data *CustomMagicTransitConnectorModel
6060

6161
resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...)
6262

@@ -70,7 +70,7 @@ func (r *MagicTransitConnectorResource) Create(ctx context.Context, req resource
7070
return
7171
}
7272
res := new(http.Response)
73-
env := MagicTransitConnectorResultEnvelope{*data}
73+
env := CustomMagicTransitConnectorResultEnvelope{*data}
7474
_, err = r.client.MagicTransit.Connectors.New(
7575
ctx,
7676
magic_transit.ConnectorNewParams{
@@ -96,15 +96,15 @@ func (r *MagicTransitConnectorResource) Create(ctx context.Context, req resource
9696
}
9797

9898
func (r *MagicTransitConnectorResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
99-
var data *MagicTransitConnectorModel
99+
var data *CustomMagicTransitConnectorModel
100100

101101
resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...)
102102

103103
if resp.Diagnostics.HasError() {
104104
return
105105
}
106106

107-
var state *MagicTransitConnectorModel
107+
var state *CustomMagicTransitConnectorModel
108108

109109
resp.Diagnostics.Append(req.State.Get(ctx, &state)...)
110110

@@ -117,8 +117,9 @@ func (r *MagicTransitConnectorResource) Update(ctx context.Context, req resource
117117
resp.Diagnostics.AddError("failed to serialize http request", err.Error())
118118
return
119119
}
120+
120121
res := new(http.Response)
121-
env := MagicTransitConnectorResultEnvelope{*data}
122+
env := CustomMagicTransitConnectorResultEnvelope{*data}
122123
_, err = r.client.MagicTransit.Connectors.Edit(
123124
ctx,
124125
data.ID.ValueString(),
@@ -145,7 +146,7 @@ func (r *MagicTransitConnectorResource) Update(ctx context.Context, req resource
145146
}
146147

147148
func (r *MagicTransitConnectorResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
148-
var data *MagicTransitConnectorModel
149+
var data *CustomMagicTransitConnectorModel
149150

150151
resp.Diagnostics.Append(req.State.Get(ctx, &data)...)
151152

@@ -154,7 +155,7 @@ func (r *MagicTransitConnectorResource) Read(ctx context.Context, req resource.R
154155
}
155156

156157
res := new(http.Response)
157-
env := MagicTransitConnectorResultEnvelope{*data}
158+
env := CustomMagicTransitConnectorResultEnvelope{*data}
158159
_, err := r.client.MagicTransit.Connectors.Get(
159160
ctx,
160161
data.ID.ValueString(),
@@ -185,7 +186,7 @@ func (r *MagicTransitConnectorResource) Read(ctx context.Context, req resource.R
185186
}
186187

187188
func (r *MagicTransitConnectorResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
188-
var data *MagicTransitConnectorModel
189+
var data *CustomMagicTransitConnectorModel
189190

190191
resp.Diagnostics.Append(req.State.Get(ctx, &data)...)
191192

@@ -210,7 +211,7 @@ func (r *MagicTransitConnectorResource) Delete(ctx context.Context, req resource
210211
}
211212

212213
func (r *MagicTransitConnectorResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
213-
var data *MagicTransitConnectorModel = new(MagicTransitConnectorModel)
214+
var data *CustomMagicTransitConnectorModel = new(CustomMagicTransitConnectorModel)
214215

215216
path_account_id := ""
216217
path_connector_id := ""
@@ -229,7 +230,7 @@ func (r *MagicTransitConnectorResource) ImportState(ctx context.Context, req res
229230
data.ID = types.StringValue(path_connector_id)
230231

231232
res := new(http.Response)
232-
env := MagicTransitConnectorResultEnvelope{*data}
233+
env := CustomMagicTransitConnectorResultEnvelope{*data}
233234
_, err := r.client.MagicTransit.Connectors.Get(
234235
ctx,
235236
path_connector_id,

0 commit comments

Comments
 (0)