diff --git a/internal/services/account/project.go b/internal/services/account/project.go index 5cd57bc899..f83aae2536 100644 --- a/internal/services/account/project.go +++ b/internal/services/account/project.go @@ -10,6 +10,7 @@ import ( accountSDK "github.com/scaleway/scaleway-sdk-go/api/account/v3" "github.com/scaleway/scaleway-sdk-go/scw" "github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/identity" "github.com/scaleway/terraform-provider-scaleway/v2/internal/types" "github.com/scaleway/terraform-provider-scaleway/v2/internal/verify" ) @@ -29,6 +30,7 @@ func ResourceProject() *schema.Resource { }, SchemaVersion: 0, SchemaFunc: projectSchema, + Identity: identity.DefaultProjectID(), } } @@ -83,7 +85,10 @@ func resourceAccountProjectCreate(ctx context.Context, d *schema.ResourceData, m return diag.FromErr(err) } - d.SetId(res.ID) + err = identity.SetFlatIdentity(d, "project_id", res.ID) + if err != nil { + return diag.FromErr(err) + } return resourceAccountProjectRead(ctx, d, m) } @@ -104,13 +109,22 @@ func resourceAccountProjectRead(ctx context.Context, d *schema.ResourceData, m a return diag.FromErr(err) } + err = identity.SetFlatIdentity(d, "project_id", res.ID) + if err != nil { + return diag.FromErr(err) + } + + setProjectState(d, res) + + return nil +} + +func setProjectState(d *schema.ResourceData, res *accountSDK.Project) { _ = d.Set("name", res.Name) _ = d.Set("description", res.Description) _ = d.Set("created_at", types.FlattenTime(res.CreatedAt)) _ = d.Set("updated_at", types.FlattenTime(res.UpdatedAt)) _ = d.Set("organization_id", res.OrganizationID) - - return nil } func resourceAccountProjectUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics { diff --git a/internal/services/account/project_data_source.go b/internal/services/account/project_data_source.go index e41db427c6..56cddd8587 100644 --- a/internal/services/account/project_data_source.go +++ b/internal/services/account/project_data_source.go @@ -9,6 +9,7 @@ import ( accountSDK "github.com/scaleway/scaleway-sdk-go/api/account/v3" "github.com/scaleway/scaleway-sdk-go/scw" "github.com/scaleway/terraform-provider-scaleway/v2/internal/datasource" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors" "github.com/scaleway/terraform-provider-scaleway/v2/internal/meta" "github.com/scaleway/terraform-provider-scaleway/v2/internal/types" "github.com/scaleway/terraform-provider-scaleway/v2/internal/verify" @@ -79,11 +80,21 @@ func DataSourceAccountProjectRead(ctx context.Context, d *schema.ResourceData, m d.SetId(projectID) _ = d.Set("project_id", projectID) - diags := resourceAccountProjectRead(ctx, d, m) - if diags != nil { - return append(diags, diag.Errorf("failed to read account project")...) + res, err := accountAPI.GetProject(&accountSDK.ProjectAPIGetProjectRequest{ + ProjectID: d.Id(), + }, scw.WithContext(ctx)) + if err != nil { + if httperrors.Is404(err) { + d.SetId("") + + return nil + } + + return diag.FromErr(err) } + setProjectState(d, res) + if d.Id() == "" { return diag.Errorf("account project (%s) not found", projectID) } diff --git a/internal/services/account/project_test.go b/internal/services/account/project_test.go index 360636db28..c22b27fb31 100644 --- a/internal/services/account/project_test.go +++ b/internal/services/account/project_test.go @@ -51,6 +51,11 @@ func TestAccProject_Basic(t *testing.T) { resource.TestCheckResourceAttr("scaleway_account_project.main", "description", "another description"), ), }, + { + ResourceName: "scaleway_account_project.main", + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -83,6 +88,11 @@ func TestAccProject_NoUpdate(t *testing.T) { isProjectPresent(tt, "scaleway_account_project.main"), ), }, + { + ResourceName: "scaleway_account_project.main", + ImportState: true, + ImportStateVerify: true, + }, }, }) }