Skip to content

Commit 8dd5200

Browse files
authored
fix(edge-services): fetch zone from provider config when field is missing (#3161)
* fix(edge-services): fetch zone from provider config when field is missing * fix
1 parent f431df9 commit 8dd5200

File tree

5 files changed

+2975
-16
lines changed

5 files changed

+2975
-16
lines changed

internal/services/edgeservices/backend_stage.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,10 @@ func ResourceBackendStage() *schema.Resource {
112112
}
113113

114114
func ResourceBackendStageCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
115-
api := NewEdgeServicesAPI(m)
115+
api, zone, err := edgeServicesAPIWithZone(d, m)
116+
if err != nil {
117+
return diag.FromErr(err)
118+
}
116119

117120
req := &edgeservices.CreateBackendStageRequest{
118121
PipelineID: d.Get("pipeline_id").(string),
@@ -123,7 +126,7 @@ func ResourceBackendStageCreate(ctx context.Context, d *schema.ResourceData, m a
123126
}
124127

125128
if lbConfig, ok := d.GetOk("lb_backend_config"); ok {
126-
req.ScalewayLB = expandLBBackendConfig(lbConfig)
129+
req.ScalewayLB = expandLBBackendConfig(zone, lbConfig)
127130
}
128131

129132
backendStage, err := api.CreateBackendStage(req, scw.WithContext(ctx))
@@ -137,7 +140,10 @@ func ResourceBackendStageCreate(ctx context.Context, d *schema.ResourceData, m a
137140
}
138141

139142
func ResourceBackendStageRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
140-
api := NewEdgeServicesAPI(m)
143+
api, zone, err := edgeServicesAPIWithZone(d, m)
144+
if err != nil {
145+
return diag.FromErr(err)
146+
}
141147

142148
backendStage, err := api.GetBackendStage(&edgeservices.GetBackendStageRequest{
143149
BackendStageID: d.Id(),
@@ -161,14 +167,17 @@ func ResourceBackendStageRead(ctx context.Context, d *schema.ResourceData, m any
161167
}
162168

163169
if backendStage.ScalewayLB != nil {
164-
_ = d.Set("lb_backend_config", flattenLBBackendConfig(backendStage.ScalewayLB))
170+
_ = d.Set("lb_backend_config", flattenLBBackendConfig(zone, backendStage.ScalewayLB))
165171
}
166172

167173
return nil
168174
}
169175

170176
func ResourceBackendStageUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
171-
api := NewEdgeServicesAPI(m)
177+
api, zone, err := edgeServicesAPIWithZone(d, m)
178+
if err != nil {
179+
return diag.FromErr(err)
180+
}
172181

173182
hasChanged := false
174183

@@ -182,7 +191,7 @@ func ResourceBackendStageUpdate(ctx context.Context, d *schema.ResourceData, m a
182191
}
183192

184193
if d.HasChange("lb_backend_config") {
185-
updateRequest.ScalewayLB = expandLBBackendConfig(d.Get("lb_backend_config"))
194+
updateRequest.ScalewayLB = expandLBBackendConfig(zone, d.Get("lb_backend_config"))
186195
hasChanged = true
187196
}
188197

internal/services/edgeservices/backend_stage_test.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,90 @@ func TestAccEdgeServicesBackend_Basic(t *testing.T) {
5353
},
5454
})
5555
}
56+
57+
func TestAccEdgeServicesBackend_LB(t *testing.T) {
58+
tt := acctest.NewTestTools(t)
59+
defer tt.Cleanup()
60+
resource.ParallelTest(t, resource.TestCase{
61+
PreCheck: func() { acctest.PreCheck(t) },
62+
ProviderFactories: tt.ProviderFactories,
63+
CheckDestroy: edgeservicestestfuncs.CheckEdgeServicesBackendDestroy(tt),
64+
Steps: []resource.TestStep{
65+
{
66+
Config: `
67+
resource "scaleway_lb_ip" "lb_ip" {}
68+
69+
resource "scaleway_lb" "lb01" {
70+
name = "lb_name"
71+
ip_id = scaleway_lb_ip.lb_ip.id
72+
type = "LB-S"
73+
}
74+
75+
resource "scaleway_lb_backend" "bck01" {
76+
lb_id = scaleway_lb.lb01.id
77+
name = "backend"
78+
forward_protocol = "http"
79+
forward_port = 80
80+
ssl_bridging = true
81+
82+
health_check_http {
83+
uri = "/healthcheck"
84+
method = "GET"
85+
code = 200
86+
}
87+
}
88+
89+
resource "scaleway_lb_frontend" "frt01" {
90+
lb_id = scaleway_lb.lb01.id
91+
backend_id = scaleway_lb_backend.bck01.id
92+
name = "frontend"
93+
inbound_port = "443"
94+
certificate_ids = [
95+
scaleway_lb_certificate.cert01.id,
96+
]
97+
}
98+
99+
resource "scaleway_lb_certificate" "cert01" {
100+
lb_id = scaleway_lb.lb01.id
101+
name = "test-cert"
102+
letsencrypt {
103+
common_name = "${replace(scaleway_lb_ip.lb_ip.ip_address, ".", "-")}.lb.${scaleway_lb.lb01.region}.scw.cloud"
104+
}
105+
}
106+
107+
resource "scaleway_edge_services_pipeline" "main" {
108+
name = "my-edge_services-pipeline"
109+
description = "pipeline description"
110+
}
111+
112+
resource "scaleway_edge_services_backend_stage" "main" {
113+
pipeline_id = scaleway_edge_services_pipeline.main.id
114+
lb_backend_config {
115+
lb_config {
116+
id = scaleway_lb.lb01.id
117+
frontend_id = scaleway_lb_frontend.frt01.id
118+
is_ssl = true
119+
}
120+
}
121+
}
122+
`,
123+
Check: resource.ComposeTestCheckFunc(
124+
edgeservicestestfuncs.CheckEdgeServicesBackendExists(tt, "scaleway_edge_services_backend_stage.main"),
125+
resource.TestCheckResourceAttrPair(
126+
"scaleway_edge_services_backend_stage.main", "lb_backend_config.0.lb_config.0.id",
127+
"scaleway_lb.lb01", "id"),
128+
resource.TestCheckResourceAttrPair(
129+
"scaleway_edge_services_backend_stage.main", "lb_backend_config.0.lb_config.0.frontend_id",
130+
"scaleway_lb_frontend.frt01", "id"),
131+
resource.TestCheckResourceAttrPair(
132+
"scaleway_edge_services_pipeline.main", "id",
133+
"scaleway_edge_services_backend_stage.main", "pipeline_id"),
134+
resource.TestCheckResourceAttr("scaleway_edge_services_backend_stage.main", "lb_backend_config.0.lb_config.0.is_ssl", "true"),
135+
resource.TestCheckResourceAttr("scaleway_edge_services_backend_stage.main", "lb_backend_config.0.lb_config.0.zone", "fr-par-1"),
136+
resource.TestCheckResourceAttrSet("scaleway_edge_services_backend_stage.main", "created_at"),
137+
resource.TestCheckResourceAttrSet("scaleway_edge_services_backend_stage.main", "updated_at"),
138+
),
139+
},
140+
},
141+
})
142+
}

internal/services/edgeservices/helpers.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,15 @@ func NewEdgeServicesAPIWithRegion(d *schema.ResourceData, m any) (*edgeservices.
2323

2424
return api, region, err
2525
}
26+
27+
// edgeServicesAPIWithZone returns a new edge_services API and the zone
28+
func edgeServicesAPIWithZone(d *schema.ResourceData, m interface{}) (*edgeservices.API, scw.Zone, error) {
29+
api := edgeservices.NewAPI(meta.ExtractScwClient(m))
30+
31+
zone, err := meta.ExtractZone(d, m)
32+
if err != nil {
33+
return nil, "", err
34+
}
35+
36+
return api, zone, nil
37+
}

0 commit comments

Comments
 (0)