Skip to content

Commit 6f717c3

Browse files
fix: orgID handling
1 parent 8ee2168 commit 6f717c3

File tree

7 files changed

+584
-801
lines changed

7 files changed

+584
-801
lines changed

internal/meta/errors.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@ import "errors"
44

55
// ErrProjectIDNotFound is returned when no project ID can be detected
66
var ErrProjectIDNotFound = errors.New("could not detect project id")
7-
8-
// ErrOrganizationIDNotFound is returned when no organization ID can be detected
9-
var ErrOrganizationIDNotFound = errors.New("could not detect organization id")

internal/meta/extractors.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -116,24 +116,6 @@ func ExtractProjectID(d terraformResourceData, m any) (projectID string, isDefau
116116
return "", false, ErrProjectIDNotFound
117117
}
118118

119-
// ExtractOrganizationID will try to guess the organization id from the following:
120-
// - organization_id field of the resource data
121-
// - default organization_id from config
122-
func ExtractOrganizationID(d terraformResourceData, m any) (organizationID string, err error) {
123-
rawOrgID, exist := d.GetOk("organization_id")
124-
125-
if exist {
126-
return rawOrgID.(string), nil
127-
}
128-
129-
defaultOrgID, defaultOrgIDExists := m.(*Meta).ScwClient().GetDefaultOrganizationID()
130-
if defaultOrgIDExists {
131-
return defaultOrgID, nil
132-
}
133-
134-
return "", ErrOrganizationIDNotFound
135-
}
136-
137119
func ExtractScwClient(m any) *scw.Client {
138120
return m.(*Meta).ScwClient()
139121
}

internal/services/audittrail/event_data_source.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/scaleway/scaleway-sdk-go/scw"
1414
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality"
1515
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
16+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1617
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
1718
"github.com/scaleway/terraform-provider-scaleway/v2/internal/verify"
1819
)
@@ -25,6 +26,7 @@ func DataSourceEvent() *schema.Resource {
2526
Type: schema.TypeString,
2627
Description: "ID of the organization containing the Audit Trail events.",
2728
Optional: true,
29+
Computed: true,
2830
ValidateDiagFunc: verify.IsUUID(),
2931
},
3032
"region": regional.Schema(),
@@ -88,14 +90,16 @@ func DataSourceEvent() *schema.Resource {
8890
Optional: true,
8991
},
9092
"recorded_after": {
91-
Type: schema.TypeString,
92-
Description: "The `recorded_after` parameter defines the earliest timestamp from which Audit Trail events are retrieved. Returns `one hour ago` by default (Format ISO 8601)",
93-
Optional: true,
93+
Type: schema.TypeString,
94+
Description: "The `recorded_after` parameter defines the earliest timestamp from which Audit Trail events are retrieved. Returns `one hour ago` by default (Format ISO 8601)",
95+
Optional: true,
96+
ValidateDiagFunc: verify.IsDate(),
9497
},
9598
"recorded_before": {
96-
Type: schema.TypeString,
97-
Description: "The `recorded_before` parameter defines the latest timestamp up to which Audit Trail events are retrieved. Must be later than recorded_after. Returns `now` by default (Format ISO 8601)",
98-
Optional: true,
99+
Type: schema.TypeString,
100+
Description: "The `recorded_before` parameter defines the latest timestamp up to which Audit Trail events are retrieved. Must be later than recorded_after. Returns `now` by default (Format ISO 8601)",
101+
Optional: true,
102+
ValidateDiagFunc: verify.IsDate(),
99103
},
100104
"order_by": {
101105
Type: schema.TypeString,
@@ -214,13 +218,13 @@ func DataSourceEvent() *schema.Resource {
214218
}
215219

216220
func DataSourceEventsRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
217-
auditTrailAPI, region, orgID, err := newAPIWithRegionAndOrgID(d, m)
221+
auditTrailAPI, region, err := newAPIWithRegion(d, m)
218222
if err != nil {
219223
return diag.FromErr(err)
220224
}
221225

222226
req := audittrailSDK.ListEventsRequest{
223-
OrganizationID: orgID,
227+
OrganizationID: types.FlattenStringPtr(account.GetOrganizationID(m, d)).(string),
224228
Region: region,
225229
}
226230

@@ -235,7 +239,6 @@ func DataSourceEventsRead(ctx context.Context, d *schema.ResourceData, m any) di
235239
}
236240

237241
d.SetId(uuid.New().String())
238-
_ = d.Set("organization_id", orgID)
239242
_ = d.Set("region", region)
240243

241244
flattenedEvents, err := flattenEvents(res.Events)
@@ -286,11 +289,11 @@ func readOptionalData(d *schema.ResourceData, req *audittrailSDK.ListEventsReque
286289
}
287290

288291
if recordedBefore, ok := d.GetOk("recorded_before"); ok {
289-
req.RecordedBefore = types.ExpandTimePtr(recordedBefore)
292+
req.RecordedBefore = types.ExpandTimePtr(recordedBefore.(string))
290293
}
291294

292295
if recordedAfter, ok := d.GetOk("recorded_after"); ok {
293-
req.RecordedAfter = types.ExpandTimePtr(recordedAfter)
296+
req.RecordedAfter = types.ExpandTimePtr(recordedAfter.(string))
294297
}
295298

296299
if orderBy, ok := d.GetOk("order_by"); ok {

internal/services/audittrail/event_data_source_test.go

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package audittrail_test
33
import (
44
"fmt"
55
"testing"
6-
"time"
76

8-
"github.com/google/uuid"
97
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
108
"github.com/hashicorp/terraform-plugin-testing/terraform"
119
audit_trail "github.com/scaleway/scaleway-sdk-go/api/audit_trail/v1alpha1"
@@ -19,11 +17,6 @@ func TestAccDataSourceEvent_Basic(t *testing.T) {
1917

2018
ctx := t.Context()
2119

22-
orgID, orgIDExists := tt.Meta.ScwClient().GetDefaultOrganizationID()
23-
if !orgIDExists {
24-
orgID = dummyOrgID
25-
}
26-
2720
auditTrailAPI := audit_trail.NewAPI(tt.Meta.ScwClient())
2821

2922
project, iamAPIKey, _, terminateFakeSideProject, err := acctest.CreateFakeIAMManager(tt)
@@ -105,34 +98,22 @@ func TestAccDataSourceEvent_Basic(t *testing.T) {
10598
status = 200
10699
}
107100
108-
data "scaleway_audit_trail_event" "recorded_after" {
109-
project_id = scaleway_secret.main.project_id
110-
recorded_after = "%s"
111-
}
112-
113-
data "scaleway_audit_trail_event" "recorded_before" {
114-
project_id = scaleway_secret.main.project_id
115-
recorded_before = "%s"
116-
}
117-
118101
data "scaleway_audit_trail_event" "order_by" {
119102
project_id = scaleway_secret.main.project_id
120103
order_by = "recorded_at_asc"
121104
}
122-
`, secretName, project.ID, resourceType, productName, serviceName, methodCreate, time.Now().Add(-time.Minute*10).Format(time.RFC3339), time.Now().Add(-time.Minute*30).Format(time.RFC3339)),
105+
`, secretName, project.ID, resourceType, productName, serviceName, methodCreate),
123106
Check: resource.ComposeTestCheckFunc(
124-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_project", orgID),
125-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_type", orgID),
126-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_id", orgID),
127-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_id_with_locality", orgID),
128-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_product", orgID),
129-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_service", orgID),
130-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_method", orgID),
131-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_principal", orgID),
132-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_ip", orgID),
133-
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_status", orgID),
134-
createEventDataSourceChecks("data.scaleway_audit_trail_event.recorded_after", orgID),
135-
resource.TestCheckResourceAttr("data.scaleway_audit_trail_event.recorded_before", "events.#", "0"),
107+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_project"),
108+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_type"),
109+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_id"),
110+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_id_with_locality"),
111+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_product"),
112+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_service"),
113+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_method"),
114+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_principal"),
115+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_ip"),
116+
createEventDataSourceChecks("data.scaleway_audit_trail_event.by_status"),
136117
resource.TestCheckResourceAttrSet("data.scaleway_audit_trail_event.order_by", "events.#"),
137118
),
138119
},
@@ -142,7 +123,7 @@ func TestAccDataSourceEvent_Basic(t *testing.T) {
142123
project_id = "%s"
143124
resource_id = "%s"
144125
}
145-
`, project.ID, uuid.New().String()),
126+
`, project.ID, dummyID),
146127
Check: resource.ComposeTestCheckFunc(
147128
resource.TestCheckResourceAttr("data.scaleway_audit_trail_event.not_found", "events.#", "0"),
148129
),

internal/services/audittrail/helpers.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,17 @@ import (
1111
)
1212

1313
// newAPIWithRegionAndProjectID returns a new Audit Trail API, with region and projectID
14-
func newAPIWithRegionAndOrgID(d *schema.ResourceData, m any) (*audittrailSDK.API, scw.Region, string, error) {
14+
func newAPIWithRegion(d *schema.ResourceData, m any) (*audittrailSDK.API, scw.Region, error) {
1515
api := audittrailSDK.NewAPI(meta.ExtractScwClient(m))
1616

1717
region, err := meta.ExtractRegion(d, m)
1818
if err != nil {
19-
return nil, "", "", err
19+
return nil, "", err
2020
}
2121
// In audit trail sdk-go so far only fr-par and nl-ams are supported
2222
if !slices.Contains(api.Regions(), region) {
23-
return nil, "", "", fmt.Errorf("invalid api region, expected one of %s, got: %s", api.Regions(), region)
23+
return nil, "", fmt.Errorf("invalid api region, expected one of %s, got: %s", api.Regions(), region)
2424
}
2525

26-
orgID, err := meta.ExtractOrganizationID(d, m)
27-
if err != nil {
28-
return nil, "", "", err
29-
}
30-
31-
return api, region, orgID, nil
26+
return api, region, nil
3227
}

internal/services/audittrail/helpers_test.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
const (
2323
defaultAuditTrailEventsTimeout = 20 * time.Second
2424
destroyWaitTimeout = 3 * time.Minute
25-
dummyOrgID = "AB7BD9BF-E1BD-41E8-9F1D-F16A2E3F3925"
25+
dummyID = "AB7BD9BF-E1BD-41E8-9F1D-F16A2E3F3925"
2626
serviceName = "scaleway.secret_manager.v1beta1.Api"
2727
productName = "secret-manager"
2828
methodCreate = "CreateSecret"
@@ -64,16 +64,13 @@ func waitForAuditTrailEvents(t *testing.T, ctx context.Context, api *audit_trail
6464
}
6565

6666
// Bundle of checks for audit trail event data source testing
67-
func createEventDataSourceChecks(eventsDataSourceName, orgID string) resource.TestCheckFunc {
67+
func createEventDataSourceChecks(eventsDataSourceName string) resource.TestCheckFunc {
6868
return resource.ComposeTestCheckFunc(
6969
resource.TestCheckResourceAttrPair(
7070
eventsDataSourceName, "events.0.locality",
7171
resourceName, "region",
7272
),
7373
resource.TestCheckResourceAttrSet(eventsDataSourceName, "events.0.principal_id"),
74-
resource.TestCheckResourceAttr(
75-
eventsDataSourceName, "events.0.organization_id", orgID,
76-
),
7774
resource.TestCheckResourceAttrSet(eventsDataSourceName, "events.0.source_ip"),
7875
resource.TestCheckResourceAttrSet(eventsDataSourceName, "events.0.user_agent"),
7976
resource.TestCheckResourceAttr(

0 commit comments

Comments
 (0)