Skip to content

Commit b21dcfa

Browse files
committed
feat: use SDK enums for Key Manager algorithm validation
1 parent 837951b commit b21dcfa

8 files changed

+262
-214
lines changed

go.sum

Lines changed: 57 additions & 0 deletions
Large diffs are not rendered by default.

internal/services/keymanager/key_resource.go

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
1212
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1313
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
14+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/verify"
1415
)
1516

1617
func ResourceKeyManagerKey() *schema.Resource {
@@ -44,12 +45,10 @@ func ResourceKeyManagerKey() *schema.Resource {
4445
},
4546
},
4647
"usage_symmetric_encryption": {
47-
Type: schema.TypeString,
48-
Optional: true,
49-
ValidateFunc: validation.StringInSlice([]string{
50-
"aes_256_gcm",
51-
}, false),
52-
Description: "Algorithm for symmetric encryption. Possible values: aes_256_gcm",
48+
Type: schema.TypeString,
49+
Optional: true,
50+
ValidateDiagFunc: verify.ValidateEnum[key_manager.KeyAlgorithmSymmetricEncryption](),
51+
Description: "Algorithm for symmetric encryption",
5352
ExactlyOneOf: []string{
5453
"usage",
5554
"usage_symmetric_encryption",
@@ -58,14 +57,10 @@ func ResourceKeyManagerKey() *schema.Resource {
5857
},
5958
},
6059
"usage_asymmetric_encryption": {
61-
Type: schema.TypeString,
62-
Optional: true,
63-
ValidateFunc: validation.StringInSlice([]string{
64-
"rsa_oaep_2048_sha256",
65-
"rsa_oaep_3072_sha256",
66-
"rsa_oaep_4096_sha256",
67-
}, false),
68-
Description: "Algorithm for asymmetric encryption. Possible values: rsa_oaep_2048_sha256, rsa_oaep_3072_sha256, rsa_oaep_4096_sha256",
60+
Type: schema.TypeString,
61+
Optional: true,
62+
ValidateDiagFunc: verify.ValidateEnum[key_manager.KeyAlgorithmAsymmetricEncryption](),
63+
Description: "Algorithm for asymmetric encryption",
6964
ExactlyOneOf: []string{
7065
"usage",
7166
"usage_symmetric_encryption",
@@ -74,14 +69,10 @@ func ResourceKeyManagerKey() *schema.Resource {
7469
},
7570
},
7671
"usage_asymmetric_signing": {
77-
Type: schema.TypeString,
78-
Optional: true,
79-
ValidateFunc: validation.StringInSlice([]string{
80-
"ec_p256_sha256",
81-
"rsa_pss_2048_sha256",
82-
"rsa_pkcs1_2048_sha256",
83-
}, false),
84-
Description: "Algorithm for asymmetric signing. Possible values: ec_p256_sha256, rsa_pss_2048_sha256, rsa_pkcs1_2048_sha256",
72+
Type: schema.TypeString,
73+
Optional: true,
74+
ValidateDiagFunc: verify.ValidateEnum[key_manager.KeyAlgorithmAsymmetricSigning](),
75+
Description: "Algorithm for asymmetric signing",
8576
ExactlyOneOf: []string{
8677
"usage",
8778
"usage_symmetric_encryption",

internal/services/keymanager/testdata/key-manager-key-basic.cassette.yaml

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ interactions:
2929
trailer: {}
3030
content_length: 539
3131
uncompressed: false
32-
body: '{"created_at":"2025-10-14T04:45:00.962761Z","deletion_requested_at":null,"description":"Test key","id":"0ce23363-cf10-414b-b4c9-08f4d0b40d2e","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T04:45:00.969638Z","rotation_count":1,"rotation_policy":null,"state":"enabled","tags":["tf","test"],"updated_at":"2025-10-14T04:45:00.969638Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
32+
body: '{"created_at":"2025-10-14T09:00:16.916318Z","deletion_requested_at":null,"description":"Test key","id":"5223fe51-8439-48df-bd65-5aa810acf37b","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T09:00:16.926894Z","rotation_count":1,"rotation_policy":null,"state":"enabled","tags":["tf","test"],"updated_at":"2025-10-14T09:00:16.926894Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
3333
headers:
3434
Content-Length:
3535
- "539"
@@ -38,20 +38,20 @@ interactions:
3838
Content-Type:
3939
- application/json
4040
Date:
41-
- Tue, 14 Oct 2025 04:45:01 GMT
41+
- Tue, 14 Oct 2025 09:00:16 GMT
4242
Server:
43-
- Scaleway API Gateway (fr-par-2;edge03)
43+
- Scaleway API Gateway (fr-par-2;edge01)
4444
Strict-Transport-Security:
4545
- max-age=63072000
4646
X-Content-Type-Options:
4747
- nosniff
4848
X-Frame-Options:
4949
- DENY
5050
X-Request-Id:
51-
- f16da29d-8a2e-4b43-b7b0-2b4bf5172527
51+
- 879bf0ec-c7b5-4432-b7bd-22de327bba3a
5252
status: 200 OK
5353
code: 200
54-
duration: 3.335419708s
54+
duration: 2.032888917s
5555
- id: 1
5656
request:
5757
proto: HTTP/1.1
@@ -68,7 +68,7 @@ interactions:
6868
headers:
6969
User-Agent:
7070
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.25.0; darwin; amd64) terraform-provider/develop terraform/terraform-tests
71-
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/0ce23363-cf10-414b-b4c9-08f4d0b40d2e
71+
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/5223fe51-8439-48df-bd65-5aa810acf37b
7272
method: GET
7373
response:
7474
proto: HTTP/2.0
@@ -78,7 +78,7 @@ interactions:
7878
trailer: {}
7979
content_length: 539
8080
uncompressed: false
81-
body: '{"created_at":"2025-10-14T04:45:00.962761Z","deletion_requested_at":null,"description":"Test key","id":"0ce23363-cf10-414b-b4c9-08f4d0b40d2e","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T04:45:00.969638Z","rotation_count":1,"rotation_policy":null,"state":"enabled","tags":["tf","test"],"updated_at":"2025-10-14T04:45:00.969638Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
81+
body: '{"created_at":"2025-10-14T09:00:16.916318Z","deletion_requested_at":null,"description":"Test key","id":"5223fe51-8439-48df-bd65-5aa810acf37b","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T09:00:16.926894Z","rotation_count":1,"rotation_policy":null,"state":"enabled","tags":["tf","test"],"updated_at":"2025-10-14T09:00:16.926894Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
8282
headers:
8383
Content-Length:
8484
- "539"
@@ -87,20 +87,20 @@ interactions:
8787
Content-Type:
8888
- application/json
8989
Date:
90-
- Tue, 14 Oct 2025 04:45:01 GMT
90+
- Tue, 14 Oct 2025 09:00:17 GMT
9191
Server:
92-
- Scaleway API Gateway (fr-par-2;edge03)
92+
- Scaleway API Gateway (fr-par-2;edge01)
9393
Strict-Transport-Security:
9494
- max-age=63072000
9595
X-Content-Type-Options:
9696
- nosniff
9797
X-Frame-Options:
9898
- DENY
9999
X-Request-Id:
100-
- 4952fd82-6d47-431c-8344-7d90977c12cb
100+
- 79e663d8-3439-4c84-a5c4-a1cbb7fb93f7
101101
status: 200 OK
102102
code: 200
103-
duration: 498.529791ms
103+
duration: 137.603541ms
104104
- id: 2
105105
request:
106106
proto: HTTP/1.1
@@ -117,7 +117,7 @@ interactions:
117117
headers:
118118
User-Agent:
119119
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.25.0; darwin; amd64) terraform-provider/develop terraform/terraform-tests
120-
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/0ce23363-cf10-414b-b4c9-08f4d0b40d2e
120+
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/5223fe51-8439-48df-bd65-5aa810acf37b
121121
method: GET
122122
response:
123123
proto: HTTP/2.0
@@ -127,7 +127,7 @@ interactions:
127127
trailer: {}
128128
content_length: 539
129129
uncompressed: false
130-
body: '{"created_at":"2025-10-14T04:45:00.962761Z","deletion_requested_at":null,"description":"Test key","id":"0ce23363-cf10-414b-b4c9-08f4d0b40d2e","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T04:45:00.969638Z","rotation_count":1,"rotation_policy":null,"state":"enabled","tags":["tf","test"],"updated_at":"2025-10-14T04:45:00.969638Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
130+
body: '{"created_at":"2025-10-14T09:00:16.916318Z","deletion_requested_at":null,"description":"Test key","id":"5223fe51-8439-48df-bd65-5aa810acf37b","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T09:00:16.926894Z","rotation_count":1,"rotation_policy":null,"state":"enabled","tags":["tf","test"],"updated_at":"2025-10-14T09:00:16.926894Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
131131
headers:
132132
Content-Length:
133133
- "539"
@@ -136,20 +136,20 @@ interactions:
136136
Content-Type:
137137
- application/json
138138
Date:
139-
- Tue, 14 Oct 2025 04:45:06 GMT
139+
- Tue, 14 Oct 2025 09:00:18 GMT
140140
Server:
141-
- Scaleway API Gateway (fr-par-2;edge03)
141+
- Scaleway API Gateway (fr-par-2;edge01)
142142
Strict-Transport-Security:
143143
- max-age=63072000
144144
X-Content-Type-Options:
145145
- nosniff
146146
X-Frame-Options:
147147
- DENY
148148
X-Request-Id:
149-
- 5a077bf4-eb93-4b18-bafc-4138665f7a60
149+
- 17e80009-011e-4f56-aa3c-0c25e1d09c0e
150150
status: 200 OK
151151
code: 200
152-
duration: 146.527584ms
152+
duration: 97.353041ms
153153
- id: 3
154154
request:
155155
proto: HTTP/1.1
@@ -166,7 +166,7 @@ interactions:
166166
headers:
167167
User-Agent:
168168
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.25.0; darwin; amd64) terraform-provider/develop terraform/terraform-tests
169-
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/0ce23363-cf10-414b-b4c9-08f4d0b40d2e
169+
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/5223fe51-8439-48df-bd65-5aa810acf37b
170170
method: DELETE
171171
response:
172172
proto: HTTP/2.0
@@ -183,20 +183,20 @@ interactions:
183183
Content-Type:
184184
- application/json
185185
Date:
186-
- Tue, 14 Oct 2025 04:45:08 GMT
186+
- Tue, 14 Oct 2025 09:00:19 GMT
187187
Server:
188-
- Scaleway API Gateway (fr-par-2;edge03)
188+
- Scaleway API Gateway (fr-par-2;edge01)
189189
Strict-Transport-Security:
190190
- max-age=63072000
191191
X-Content-Type-Options:
192192
- nosniff
193193
X-Frame-Options:
194194
- DENY
195195
X-Request-Id:
196-
- e013d158-603b-4f0c-bcf3-80c5efbc84ce
196+
- 7aafefe1-78a2-4db4-a063-e365f0e1b96a
197197
status: 204 No Content
198198
code: 204
199-
duration: 177.873709ms
199+
duration: 131.248792ms
200200
- id: 4
201201
request:
202202
proto: HTTP/1.1
@@ -213,7 +213,7 @@ interactions:
213213
headers:
214214
User-Agent:
215215
- scaleway-sdk-go/v1.0.0-beta.7+dev (go1.25.0; darwin; amd64) terraform-provider/develop terraform/terraform-tests
216-
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/0ce23363-cf10-414b-b4c9-08f4d0b40d2e
216+
url: https://api.scaleway.com/key-manager/v1alpha1/regions/fr-par/keys/5223fe51-8439-48df-bd65-5aa810acf37b
217217
method: GET
218218
response:
219219
proto: HTTP/2.0
@@ -223,7 +223,7 @@ interactions:
223223
trailer: {}
224224
content_length: 579
225225
uncompressed: false
226-
body: '{"created_at":"2025-10-14T04:45:00.962761Z","deletion_requested_at":"2025-10-14T04:45:08.761714Z","description":"Test key","id":"0ce23363-cf10-414b-b4c9-08f4d0b40d2e","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T04:45:00.969638Z","rotation_count":1,"rotation_policy":null,"state":"scheduled_for_deletion","tags":["tf","test"],"updated_at":"2025-10-14T04:45:00.969638Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
226+
body: '{"created_at":"2025-10-14T09:00:16.916318Z","deletion_requested_at":"2025-10-14T09:00:19.050508Z","description":"Test key","id":"5223fe51-8439-48df-bd65-5aa810acf37b","locked":false,"name":"tf-test-kms-key-unprotected-a","origin":"scaleway_kms","project_id":"105bdce1-64c0-48ab-899d-868455867ecf","protected":false,"region":"fr-par","rotated_at":"2025-10-14T09:00:16.926894Z","rotation_count":1,"rotation_policy":null,"state":"scheduled_for_deletion","tags":["tf","test"],"updated_at":"2025-10-14T09:00:16.926894Z","usage":{"symmetric_encryption":"aes_256_gcm"}}'
227227
headers:
228228
Content-Length:
229229
- "579"
@@ -232,17 +232,17 @@ interactions:
232232
Content-Type:
233233
- application/json
234234
Date:
235-
- Tue, 14 Oct 2025 04:45:08 GMT
235+
- Tue, 14 Oct 2025 09:00:19 GMT
236236
Server:
237-
- Scaleway API Gateway (fr-par-2;edge03)
237+
- Scaleway API Gateway (fr-par-2;edge01)
238238
Strict-Transport-Security:
239239
- max-age=63072000
240240
X-Content-Type-Options:
241241
- nosniff
242242
X-Frame-Options:
243243
- DENY
244244
X-Request-Id:
245-
- 1ecc13fa-2d75-4431-a4d9-06b172f80fcc
245+
- ef5b7c15-9b65-48ae-8eb1-401052680eee
246246
status: 200 OK
247247
code: 200
248-
duration: 99.950458ms
248+
duration: 119.225042ms

0 commit comments

Comments
 (0)