Skip to content

Commit 6e3283c

Browse files
authored
Merge branch 'main' into feat/rdb-benchmarks
2 parents 07cb4f3 + 2ea12a9 commit 6e3283c

File tree

38 files changed

+3338
-753
lines changed

38 files changed

+3338
-753
lines changed

cmd/scw/testdata/test-all-usage-object-config-get-usage.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ EXAMPLES:
1818
ARGS:
1919
type Type of S3 tool you want to generate a config for (rclone | s3cmd | mc)
2020
[name=scaleway] Name of the s3 remote you want to generate
21+
[project-id] Scaleway project ID to use with IAM Access Key syntax
2122
[region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams)
2223

2324
FLAGS:

cmd/scw/testdata/test-all-usage-object-config-install-usage.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ EXAMPLES:
1818
ARGS:
1919
type Type of S3 tool you want to generate a config for (rclone | s3cmd | mc)
2020
[name=scaleway] Name of the s3 remote you want to generate
21+
[project-id] Scaleway project ID to use with IAM Access Key syntax
2122
[region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams)
2223

2324
FLAGS:

core/human/marshal.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ type Marshaler interface {
2626
MarshalHuman() (string, error)
2727
}
2828

29+
// Validates fields containing <index> placeholders
30+
func validateIndexedField(t reflect.Type, fieldName string) error {
31+
testFieldName := strings.ReplaceAll(fieldName, "<index>", "0")
32+
_, err := gofields.GetType(t, testFieldName)
33+
34+
return err
35+
}
36+
2937
func Marshal(data any, opt *MarshalOpt) (string, error) {
3038
if opt == nil {
3139
opt = &MarshalOpt{}
@@ -298,11 +306,20 @@ func marshalSlice(slice reflect.Value, opt *MarshalOpt) (string, error) {
298306

299307
// Validate that all field exist
300308
for _, f := range opt.Fields {
301-
_, err := gofields.GetType(itemType, f.FieldName)
302-
if err != nil {
303-
return "", &UnknownFieldError{
304-
FieldName: f.FieldName,
305-
ValidFields: gofields.ListFields(itemType),
309+
if strings.Contains(f.FieldName, "<index>") {
310+
if err := validateIndexedField(itemType, f.FieldName); err != nil {
311+
return "", &UnknownFieldError{
312+
FieldName: f.FieldName,
313+
ValidFields: gofields.ListFields(itemType),
314+
}
315+
}
316+
} else {
317+
_, err := gofields.GetType(itemType, f.FieldName)
318+
if err != nil {
319+
return "", &UnknownFieldError{
320+
FieldName: f.FieldName,
321+
ValidFields: gofields.ListFields(itemType),
322+
}
306323
}
307324
}
308325
}

docs/commands/object.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ scw object config get [arg=value ...]
146146
|------|---|-------------|
147147
| type | Required<br />One of: `rclone`, `s3cmd`, `mc` | Type of S3 tool you want to generate a config for |
148148
| name | Default: `scaleway` | Name of the s3 remote you want to generate |
149+
| project-id | | Scaleway project ID to use with IAM Access Key syntax |
149150
| region | Default: `fr-par`<br />One of: `fr-par`, `nl-ams` | Region to target. If none is passed will use default region from the config |
150151

151152

@@ -187,6 +188,7 @@ scw object config install [arg=value ...]
187188
|------|---|-------------|
188189
| type | Required<br />One of: `rclone`, `s3cmd`, `mc` | Type of S3 tool you want to generate a config for |
189190
| name | Default: `scaleway` | Name of the s3 remote you want to generate |
191+
| project-id | | Scaleway project ID to use with IAM Access Key syntax |
190192
| region | Default: `fr-par`<br />One of: `fr-par`, `nl-ams` | Region to target. If none is passed will use default region from the config |
191193

192194

internal/namespaces/audit_trail/v1alpha1/custom_event.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func eventListBuilder(c *core.Command) *core.Command {
1616
},
1717
{
1818
Label: "Name",
19-
FieldName: "Resource.Name",
19+
FieldName: "Resources.<index>.Name",
2020
},
2121
{
2222
Label: "StatusCode",
@@ -64,19 +64,11 @@ func eventListBuilder(c *core.Command) *core.Command {
6464
},
6565
{
6666
Label: "Type",
67-
FieldName: "Resource.Type",
67+
FieldName: "Resources.<index>.Type",
6868
},
6969
{
7070
Label: "ResourceID",
71-
FieldName: "Resource.ID",
72-
},
73-
{
74-
Label: "Resource Created At",
75-
FieldName: "Resource.CreatedAt",
76-
},
77-
{
78-
Label: "Resource Updated At",
79-
FieldName: "Resource.UpdatedAt",
71+
FieldName: "Resources.<index>.ID",
8072
},
8173
},
8274
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
version: 1
3+
interactions:
4+
- request:
5+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
6+
form: {}
7+
headers:
8+
User-Agent:
9+
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.26.1; linux; amd64) cli-e2e-test
10+
url: https://api.scaleway.com/iam/v1alpha1/api-keys/SCW2RRD4GEWP546QJ71C
11+
method: GET
12+
response:
13+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
14+
headers:
15+
Content-Length:
16+
- "390"
17+
Content-Security-Policy:
18+
- default-src 'none'; frame-ancestors 'none'
19+
Content-Type:
20+
- application/json
21+
Date:
22+
- Thu, 02 Apr 2026 14:31:23 GMT
23+
Server:
24+
- Scaleway API Gateway (fr-par-1;edge02)
25+
Strict-Transport-Security:
26+
- max-age=63072000
27+
X-Content-Type-Options:
28+
- nosniff
29+
X-Frame-Options:
30+
- DENY
31+
X-Request-Id:
32+
- c6a06de4-d669-4faf-92de-9ae304c7228d
33+
status: 200 OK
34+
code: 200
35+
duration: ""
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
version: 1
3+
interactions:
4+
- request:
5+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
6+
form: {}
7+
headers:
8+
User-Agent:
9+
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.26.1; linux; amd64) cli-e2e-test
10+
url: https://api.scaleway.com/iam/v1alpha1/api-keys/SCW2RRD4GEWP546QJ71C
11+
method: GET
12+
response:
13+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
14+
headers:
15+
Content-Length:
16+
- "390"
17+
Content-Security-Policy:
18+
- default-src 'none'; frame-ancestors 'none'
19+
Content-Type:
20+
- application/json
21+
Date:
22+
- Thu, 02 Apr 2026 14:31:23 GMT
23+
Server:
24+
- Scaleway API Gateway (fr-par-1;edge02)
25+
Strict-Transport-Security:
26+
- max-age=63072000
27+
X-Content-Type-Options:
28+
- nosniff
29+
X-Frame-Options:
30+
- DENY
31+
X-Request-Id:
32+
- 57113c83-37d3-443c-ae55-df2a61401fce
33+
status: 200 OK
34+
code: 200
35+
duration: ""
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
version: 1
3+
interactions:
4+
- request:
5+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
6+
form: {}
7+
headers:
8+
User-Agent:
9+
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.26.1; linux; amd64) cli-e2e-test
10+
url: https://api.scaleway.com/iam/v1alpha1/api-keys/SCW2RRD4GEWP546QJ71C
11+
method: GET
12+
response:
13+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
14+
headers:
15+
Content-Length:
16+
- "390"
17+
Content-Security-Policy:
18+
- default-src 'none'; frame-ancestors 'none'
19+
Content-Type:
20+
- application/json
21+
Date:
22+
- Thu, 02 Apr 2026 14:31:23 GMT
23+
Server:
24+
- Scaleway API Gateway (fr-par-1;edge02)
25+
Strict-Transport-Security:
26+
- max-age=63072000
27+
X-Content-Type-Options:
28+
- nosniff
29+
X-Frame-Options:
30+
- DENY
31+
X-Request-Id:
32+
- 37aaafb3-027a-4deb-9fce-52f668750686
33+
status: 200 OK
34+
code: 200
35+
duration: ""
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
version: 1
3+
interactions:
4+
- request:
5+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
6+
form: {}
7+
headers:
8+
User-Agent:
9+
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.26.1; linux; amd64) cli-e2e-test
10+
url: https://api.scaleway.com/iam/v1alpha1/api-keys/SCW2RRD4GEWP546QJ71C
11+
method: GET
12+
response:
13+
body: '{"access_key":"SCW2RRD4GEWP546QJ71C","secret_key":null,"description":"my-key","created_at":"2026-04-02T14:31:06.008718Z","updated_at":"2026-04-02T14:31:06.008718Z","expires_at":"2026-04-02T15:31:05.899Z","default_project_id":"5ebc0159-7cb7-406c-9521-9347d1987fb2","editable":true,"deletable":true,"managed":false,"creation_ip":"51.159.73.9","user_id":"fe7ad43d-91bc-4206-a4b9-f9d4150eafef"}'
14+
headers:
15+
Content-Length:
16+
- "390"
17+
Content-Security-Policy:
18+
- default-src 'none'; frame-ancestors 'none'
19+
Content-Type:
20+
- application/json
21+
Date:
22+
- Thu, 02 Apr 2026 14:31:23 GMT
23+
Server:
24+
- Scaleway API Gateway (fr-par-1;edge02)
25+
Strict-Transport-Security:
26+
- max-age=63072000
27+
X-Content-Type-Options:
28+
- nosniff
29+
X-Frame-Options:
30+
- DENY
31+
X-Request-Id:
32+
- 6a824b28-e70e-4df3-a171-2b264bc8c9d7
33+
status: 200 OK
34+
code: 200
35+
duration: ""

internal/namespaces/iam/v1alpha1/custom_iam_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010
iamSdk "github.com/scaleway/scaleway-sdk-go/api/iam/v1alpha1"
1111
)
1212

13+
const (
14+
TestMemberID = "e7a35342-d125-42e3-a0d8-f2f378abd1de" // ID for the test-cli-iam-membership-api-key Member
15+
)
16+
1317
func Test_iamAPIKeyGet(t *testing.T) {
1418
if isNightly := os.Getenv("SLACK_WEBHOOK_NIGHTLY"); isNightly != "" {
1519
t.Skip()
@@ -77,7 +81,7 @@ func Test_iamAPIKeyGet(t *testing.T) {
7781
BeforeFunc: core.BeforeFuncCombine(
7882
core.ExecStoreBeforeCmdWithResulter(
7983
"member",
80-
"scw iam user list type=member",
84+
"scw iam user list type=member user-ids.0="+TestMemberID,
8185
userResulter,
8286
),
8387
core.ExecStoreBeforeCmdWithResulter(
@@ -112,7 +116,7 @@ func Test_iamAPIKeyGet(t *testing.T) {
112116
BeforeFunc: core.BeforeFuncCombine(
113117
core.ExecStoreBeforeCmdWithResulter(
114118
"application",
115-
"scw iam application list",
119+
"scw iam application list name=test-cli-iam-application-api-key",
116120
appResulter,
117121
),
118122
core.ExecStoreBeforeCmdWithResulter(

0 commit comments

Comments
 (0)