Skip to content

Commit 3ad4137

Browse files
authored
feat(cockpit): add identity support to deprecated cockpit resources. (#3880)
* feat(cockpit): add identity support to deprecated cockpit resources. * fix(cockpit): satisfy wsl_v5 spacing in identity reads.
1 parent f156dbd commit 3ad4137

4 files changed

Lines changed: 105 additions & 9 deletions

File tree

internal/services/cockpit/alert_manager.go

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/scaleway/scaleway-sdk-go/api/cockpit/v1"
1212
"github.com/scaleway/scaleway-sdk-go/scw"
1313
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
14+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/identity"
1415
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
1516
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1617
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
@@ -27,9 +28,17 @@ func ResourceCockpitAlertManager() *schema.Resource {
2728
StateContext: schema.ImportStatePassthroughContext,
2829
},
2930
SchemaFunc: alertManagerSchema,
31+
Identity: alertManagerIdentity(),
3032
}
3133
}
3234

35+
func alertManagerIdentity() *schema.ResourceIdentity {
36+
return identity.WrapSchemaMap(map[string]*schema.Schema{
37+
"region": identity.DefaultRegionAttribute(),
38+
"project_id": identity.DefaultProjectIDAttribute(),
39+
})
40+
}
41+
3342
func alertManagerSchema() map[string]*schema.Schema {
3443
return map[string]*schema.Schema{
3544
"project_id": account.ProjectIDSchema(),
@@ -163,7 +172,9 @@ func ResourceCockpitAlertManagerCreate(ctx context.Context, d *schema.ResourceDa
163172
}
164173
}
165174

166-
d.SetId(ResourceCockpitAlertManagerID(region, projectID))
175+
if err := setCockpitAlertManagerIdentity(d, region, projectID); err != nil {
176+
return diag.FromErr(err)
177+
}
167178

168179
return ResourceCockpitAlertManagerRead(ctx, d, meta)
169180
}
@@ -195,12 +206,18 @@ func ResourceCockpitAlertManagerRead(ctx context.Context, d *schema.ResourceData
195206
_ = d.Set("alert_manager_url", alertManager.AlertManagerURL)
196207
_ = d.Set("project_id", projectID)
197208

209+
if err := setCockpitAlertManagerIdentity(d, alertManager.Region, projectID); err != nil {
210+
return diag.FromErr(err)
211+
}
212+
198213
var userRequestedIDs []string
199214

215+
isPreconfigured := true
216+
200217
alerts, err := api.ListAlerts(&cockpit.RegionalAPIListAlertsRequest{
201218
Region: region,
202219
ProjectID: projectID,
203-
IsPreconfigured: new(true),
220+
IsPreconfigured: &isPreconfigured,
204221
}, scw.WithContext(ctx), scw.WithAllPages())
205222
if err != nil {
206223
return diag.FromErr(err)
@@ -464,6 +481,25 @@ func ResourceCockpitAlertManagerID(region scw.Region, projectID string) (resourc
464481
return fmt.Sprintf("%s/%s/1", region, projectID)
465482
}
466483

484+
func setCockpitAlertManagerIdentity(d *schema.ResourceData, region scw.Region, projectID string) error {
485+
resourceIdentity, err := d.Identity()
486+
if err != nil {
487+
return err
488+
}
489+
490+
if err := resourceIdentity.Set("region", region.String()); err != nil {
491+
return err
492+
}
493+
494+
if err := resourceIdentity.Set("project_id", projectID); err != nil {
495+
return err
496+
}
497+
498+
d.SetId(ResourceCockpitAlertManagerID(region, projectID))
499+
500+
return nil
501+
}
502+
467503
func shouldEnableLegacyManagedAlerts(d *schema.ResourceData) bool {
468504
if !d.Get("enable_managed_alerts").(bool) {
469505
return false

internal/services/cockpit/cockpit.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
88
"github.com/scaleway/scaleway-sdk-go/api/cockpit/v1"
99
"github.com/scaleway/scaleway-sdk-go/scw"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/identity"
1011
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1112
)
1213

@@ -20,6 +21,7 @@ func ResourceCockpit() *schema.Resource {
2021
StateContext: schema.ImportStatePassthroughContext,
2122
},
2223
SchemaFunc: cockpitSchema,
24+
Identity: identity.DefaultProjectID(),
2325
DeprecationMessage: "The scaleway_cockpit resource is deprecated and will be removed after January 1st, 2025. Use the new specialized resources instead: scaleway_cockpit_source and scaleway_cockpit_alert_manager. For Grafana access, use the scaleway_cockpit_grafana data source with IAM authentication (the scaleway_cockpit_grafana_user resource is also deprecated).",
2426
}
2527
}
@@ -101,13 +103,19 @@ func cockpitSchema() map[string]*schema.Schema {
101103
func ResourceCockpitCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
102104
projectID := d.Get("project_id").(string)
103105
if projectID == "" {
104-
_, err := getDefaultProjectID(ctx, m)
106+
var err error
107+
108+
projectID, err = getDefaultProjectID(ctx, m)
105109
if err != nil {
106110
return diag.FromErr(err)
107111
}
112+
113+
_ = d.Set("project_id", projectID)
108114
}
109115

110-
d.SetId(projectID)
116+
if err := setCockpitProjectIdentity(d, projectID); err != nil {
117+
return diag.FromErr(err)
118+
}
111119

112120
return ResourceCockpitRead(ctx, d, m)
113121
}
@@ -152,7 +160,9 @@ func ResourceCockpitRead(ctx context.Context, d *schema.ResourceData, m any) dia
152160
}
153161

154162
_ = d.Set("project_id", projectID)
155-
d.SetId(projectID)
163+
if err := setCockpitProjectIdentity(d, projectID); err != nil {
164+
return diag.FromErr(err)
165+
}
156166

157167
grafana, err := api.GetGrafana(&cockpit.GlobalAPIGetGrafanaRequest{
158168
ProjectID: projectID,
@@ -185,6 +195,21 @@ func ResourceCockpitRead(ctx context.Context, d *schema.ResourceData, m any) dia
185195
return diags
186196
}
187197

198+
func setCockpitProjectIdentity(d *schema.ResourceData, projectID string) error {
199+
resourceIdentity, err := d.Identity()
200+
if err != nil {
201+
return err
202+
}
203+
204+
if err := resourceIdentity.Set("project_id", projectID); err != nil {
205+
return err
206+
}
207+
208+
d.SetId(projectID)
209+
210+
return nil
211+
}
212+
188213
func ResourceCockpitUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
189214
diags := diag.Diagnostics{}
190215
if d.HasChange("plan") {

internal/services/cockpit/grafana_user.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/scaleway/scaleway-sdk-go/api/cockpit/v1"
1212
"github.com/scaleway/scaleway-sdk-go/scw"
1313
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
14+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/identity"
1415
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1516
"github.com/scaleway/terraform-provider-scaleway/v2/internal/verify"
1617
)
@@ -31,9 +32,21 @@ func ResourceCockpitGrafanaUser() *schema.Resource {
3132
StateContext: schema.ImportStatePassthroughContext,
3233
},
3334
SchemaFunc: cockpitGrafanaUserSchema,
35+
Identity: cockpitGrafanaUserIdentity(),
3436
}
3537
}
3638

39+
func cockpitGrafanaUserIdentity() *schema.ResourceIdentity {
40+
return identity.WrapSchemaMap(map[string]*schema.Schema{
41+
"project_id": identity.DefaultProjectIDAttribute(),
42+
"id": {
43+
Type: schema.TypeString,
44+
Description: "The ID of the Grafana user",
45+
RequiredForImport: true,
46+
},
47+
})
48+
}
49+
3750
func cockpitGrafanaUserSchema() map[string]*schema.Schema {
3851
return map[string]*schema.Schema{
3952
"login": {
@@ -85,7 +98,9 @@ func ResourceCockpitGrafanaUserCreate(ctx context.Context, d *schema.ResourceDat
8598
}
8699

87100
_ = d.Set("password", grafanaUser.Password)
88-
d.SetId(cockpitIDWithProjectID(projectID, strconv.FormatUint(uint64(grafanaUser.ID), 10)))
101+
if err := setCockpitGrafanaUserIdentity(d, projectID, strconv.FormatUint(uint64(grafanaUser.ID), 10)); err != nil {
102+
return diag.FromErr(err)
103+
}
89104

90105
return ResourceCockpitGrafanaUserRead(ctx, d, m)
91106
}
@@ -143,6 +158,10 @@ func ResourceCockpitGrafanaUserRead(ctx context.Context, d *schema.ResourceData,
143158
_ = d.Set("project_id", projectID)
144159
_ = d.Set("grafana_url", grafana.GrafanaURL)
145160

161+
if err := setCockpitGrafanaUserIdentity(d, projectID, strconv.FormatUint(uint64(grafanaUser.ID), 10)); err != nil {
162+
return diag.FromErr(err)
163+
}
164+
146165
return nil
147166
}
148167

@@ -166,3 +185,22 @@ func ResourceCockpitGrafanaUserDelete(ctx context.Context, d *schema.ResourceDat
166185

167186
return nil
168187
}
188+
189+
func setCockpitGrafanaUserIdentity(d *schema.ResourceData, projectID, grafanaUserID string) error {
190+
resourceIdentity, err := d.Identity()
191+
if err != nil {
192+
return err
193+
}
194+
195+
if err := resourceIdentity.Set("project_id", projectID); err != nil {
196+
return err
197+
}
198+
199+
if err := resourceIdentity.Set("id", grafanaUserID); err != nil {
200+
return err
201+
}
202+
203+
d.SetId(cockpitIDWithProjectID(projectID, grafanaUserID))
204+
205+
return nil
206+
}

provider/sdkv2_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,6 @@ func TestSDKProvider_ResourceIdentityNotEmpty(t *testing.T) {
150150
"scaleway_baremetal_server",
151151
"scaleway_block_snapshot",
152152
"scaleway_block_volume",
153-
"scaleway_cockpit",
154-
"scaleway_cockpit_grafana_user",
155-
"scaleway_cockpit_alert_manager",
156153
"scaleway_container",
157154
"scaleway_container_cron",
158155
"scaleway_container_domain",

0 commit comments

Comments
 (0)