Skip to content

Commit 591e9f0

Browse files
committed
add resources
1 parent e0c3ba8 commit 591e9f0

22 files changed

+3980
-0
lines changed

internal/provider/provider.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/container"
2222
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/documentdb"
2323
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/domain"
24+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/edgeservices"
2425
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/flexibleip"
2526
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/function"
2627
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/iam"
@@ -142,6 +143,11 @@ func Provider(config *Config) plugin.ProviderFunc {
142143
"scaleway_documentdb_user": documentdb.ResourceUser(),
143144
"scaleway_domain_record": domain.ResourceRecord(),
144145
"scaleway_domain_zone": domain.ResourceZone(),
146+
"scaleway_edge_services_backend_stage": edgeservices.ResourceEdgeServicesBackendStage(),
147+
"scaleway_edge_services_cache_stage": edgeservices.ResourceEdgeServicesCacheStage(),
148+
"scaleway_edge_services_dns_stage": edgeservices.ResourceEdgeServicesDNSStage(),
149+
"scaleway_edge_services_pipeline": edgeservices.ResourceEdgeServicesPipeline(),
150+
"scaleway_edge_services_tls_stage": edgeservices.ResourceEdgeServicesTLSStage(),
145151
"scaleway_flexible_ip": flexibleip.ResourceIP(),
146152
"scaleway_flexible_ip_mac_address": flexibleip.ResourceMACAddress(),
147153
"scaleway_function": function.ResourceFunction(),
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package edgeservices
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
"github.com/scaleway/scaleway-sdk-go/api/edge_services/v1alpha1"
9+
"github.com/scaleway/scaleway-sdk-go/scw"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
11+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
12+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
13+
)
14+
15+
func ResourceEdgeServicesBackendStage() *schema.Resource {
16+
return &schema.Resource{
17+
CreateContext: ResourceEdgeServicesBackendStageCreate,
18+
ReadContext: ResourceEdgeServicesBackendStageRead,
19+
UpdateContext: ResourceEdgeServicesBackendStageUpdate,
20+
DeleteContext: ResourceEdgeServicesBackendStageDelete,
21+
Importer: &schema.ResourceImporter{
22+
StateContext: schema.ImportStatePassthroughContext,
23+
},
24+
SchemaVersion: 0,
25+
Schema: map[string]*schema.Schema{
26+
"s3_backend_config": {
27+
Type: schema.TypeList,
28+
Optional: true,
29+
Description: "The Scaleway Object Storage origin bucket (S3) linked to the backend stage",
30+
Elem: &schema.Resource{
31+
Schema: map[string]*schema.Schema{
32+
"bucket_name": {
33+
Type: schema.TypeString,
34+
Optional: true,
35+
Description: "The name of the Bucket",
36+
},
37+
"bucket_region": {
38+
Type: schema.TypeString,
39+
Optional: true,
40+
Description: "The region of the Bucket",
41+
},
42+
"is_website": {
43+
Type: schema.TypeBool,
44+
Optional: true,
45+
Description: "Defines whether the bucket website feature is enabled.",
46+
},
47+
},
48+
},
49+
},
50+
"pipeline_id": {
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "The pipeline ID the backend stage belongs to",
54+
},
55+
"created_at": {
56+
Type: schema.TypeString,
57+
Computed: true,
58+
Description: "The date and time of the creation of the backend stage",
59+
},
60+
"updated_at": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
Description: "The date and time of the last update of the backend stage",
64+
},
65+
"project_id": account.ProjectIDSchema(),
66+
},
67+
}
68+
}
69+
70+
func ResourceEdgeServicesBackendStageCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
71+
api := NewEdgeServicesAPI(m)
72+
73+
backendStage, err := api.CreateBackendStage(&edge_services.CreateBackendStageRequest{
74+
ProjectID: d.Get("project_id").(string),
75+
ScalewayS3: expandEdgeServicesScalewayS3BackendConfig(d.Get("s3_backend_config")),
76+
}, scw.WithContext(ctx))
77+
if err != nil {
78+
return diag.FromErr(err)
79+
}
80+
81+
d.SetId(backendStage.ID)
82+
83+
return ResourceEdgeServicesBackendStageRead(ctx, d, m)
84+
}
85+
86+
func ResourceEdgeServicesBackendStageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
87+
api := NewEdgeServicesAPI(m)
88+
89+
backendStage, err := api.GetBackendStage(&edge_services.GetBackendStageRequest{
90+
BackendStageID: d.Id(),
91+
}, scw.WithContext(ctx))
92+
if err != nil {
93+
if httperrors.Is404(err) {
94+
d.SetId("")
95+
return nil
96+
}
97+
return diag.FromErr(err)
98+
}
99+
100+
_ = d.Set("pipeline_id", types.FlattenStringPtr(backendStage.PipelineID))
101+
_ = d.Set("created_at", types.FlattenTime(backendStage.CreatedAt))
102+
_ = d.Set("updated_at", types.FlattenTime(backendStage.UpdatedAt))
103+
_ = d.Set("project_id", backendStage.ProjectID)
104+
_ = d.Set("s3_backend_config", flattenEdgeServicesScalewayS3BackendConfig(backendStage.ScalewayS3))
105+
106+
return nil
107+
}
108+
109+
func ResourceEdgeServicesBackendStageUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
110+
api := NewEdgeServicesAPI(m)
111+
112+
hasChanged := false
113+
114+
updateRequest := &edge_services.UpdateBackendStageRequest{
115+
BackendStageID: d.Id(),
116+
}
117+
118+
if d.HasChange("s3_backend_config") {
119+
updateRequest.ScalewayS3 = expandEdgeServicesScalewayS3BackendConfig(d.Get("s3_backend_config"))
120+
hasChanged = true
121+
}
122+
123+
if hasChanged {
124+
_, err := api.UpdateBackendStage(updateRequest, scw.WithContext(ctx))
125+
if err != nil {
126+
return diag.FromErr(err)
127+
}
128+
}
129+
130+
return ResourceEdgeServicesBackendStageRead(ctx, d, m)
131+
}
132+
133+
func ResourceEdgeServicesBackendStageDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
134+
api := NewEdgeServicesAPI(m)
135+
136+
err := api.DeleteBackendStage(&edge_services.DeleteBackendStageRequest{
137+
BackendStageID: d.Id(),
138+
}, scw.WithContext(ctx))
139+
if err != nil && !httperrors.Is403(err) {
140+
return diag.FromErr(err)
141+
}
142+
143+
return nil
144+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package edgeservices_test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
10+
edgeservicestestfuncs "github.com/scaleway/terraform-provider-scaleway/v2/internal/services/edgeservices/testfuncs"
11+
)
12+
13+
func TestAccEdgeServicesBackend_Basic(t *testing.T) {
14+
tt := acctest.NewTestTools(t)
15+
defer tt.Cleanup()
16+
bucketBasic := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-basic-es")
17+
resource.ParallelTest(t, resource.TestCase{
18+
PreCheck: func() { acctest.PreCheck(t) },
19+
ProviderFactories: tt.ProviderFactories,
20+
CheckDestroy: edgeservicestestfuncs.CheckEdgeServicesBackendDestroy(tt),
21+
Steps: []resource.TestStep{
22+
{
23+
Config: fmt.Sprintf(`
24+
resource "scaleway_object_bucket" "main" {
25+
name = "%[1]s"
26+
tags = {
27+
foo = "bar"
28+
}
29+
}
30+
31+
resource "scaleway_edge_services_backend_stage" "main" {
32+
s3_backend_config {
33+
bucket_name = scaleway_object_bucket.main.name
34+
bucket_region = "fr-par"
35+
}
36+
}
37+
`, bucketBasic),
38+
Check: resource.ComposeTestCheckFunc(
39+
edgeservicestestfuncs.CheckEdgeServicesBackendExists(tt, "scaleway_edge_services_backend_stage.main"),
40+
resource.TestCheckResourceAttr("scaleway_edge_services_backend_stage.main", "s3_backend_config.0.is_website", "false"),
41+
resource.TestCheckResourceAttrPair("scaleway_edge_services_backend_stage.main", "s3_backend_config.0.bucket_name", "scaleway_object_bucket.main", "name"),
42+
resource.TestCheckResourceAttr("scaleway_edge_services_backend_stage.main", "s3_backend_config.0.bucket_region", "fr-par"),
43+
resource.TestCheckResourceAttrSet("scaleway_edge_services_backend_stage.main", "created_at"),
44+
resource.TestCheckResourceAttrSet("scaleway_edge_services_backend_stage.main", "updated_at"),
45+
),
46+
},
47+
},
48+
})
49+
}

0 commit comments

Comments
 (0)