Skip to content

Commit 487be63

Browse files
author
protobuf-ci-cd
committed
fix test
1 parent cf66cfa commit 487be63

File tree

6 files changed

+249
-87
lines changed

6 files changed

+249
-87
lines changed

docs/resources/key_manager_key.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
---
21
# scaleway_key_manager_key
32

43
Provides a Scaleway Key Manager Key resource.
@@ -30,17 +29,17 @@ The following arguments are supported:
3029
- `region` (String) – The region in which to create the key (e.g., `fr-par`).
3130
- `project_id` (String, Optional) – The ID of the project the key belongs to.
3231
- `usage` (String, **Required**) – The usage of the key. Valid values are:
33-
- `symmetric_encryption`
34-
- `asymmetric_encryption`
35-
- `asymmetric_signing`
32+
- `symmetric_encryption`
33+
- `asymmetric_encryption`
34+
- `asymmetric_signing`
3635
- `description` (String, Optional) – A description for the key.
3736
- `tags` (List of String, Optional) – A list of tags to assign to the key.
3837
- `unprotected` (Boolean, Optional) – If `true`, the key can be deleted. Defaults to `false` (protected).
3938
- `origin` (String, Optional) – The origin of the key. Valid values are:
40-
- `scaleway_kms` (default)
41-
- `external`
39+
- `scaleway_kms` (default)
40+
- `external`
4241
- `rotation_policy` (Block, Optional) – Rotation policy for the key:
43-
- `rotation_period` (String, Optional) – The period between key rotations (e.g., `"720h"` for 30 days).
42+
- `rotation_period` (String, Optional) – The period between key rotations (e.g., `"720h"` for 30 days).
4443

4544
## Attributes Reference
4645

@@ -57,8 +56,8 @@ In addition to the arguments above, the following attributes are exported:
5756
- `origin_read` – The origin of the key as returned by the API.
5857
- `region_read` – The region of the key as returned by the API.
5958
- `rotation_policy` (Block)
60-
- `rotation_period` – The period between key rotations.
61-
- `next_rotation_at` – The date and time of the next scheduled rotation.
59+
- `rotation_period` – The period between key rotations.
60+
- `next_rotation_at` – The date and time of the next scheduled rotation.
6261

6362
## Import
6463

internal/services/keymanager/helpers.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package keymanager
22

33
import (
4+
"fmt"
5+
"strings"
46
"time"
57

68
key_manager "github.com/scaleway/scaleway-sdk-go/api/key_manager/v1alpha1"
9+
"github.com/scaleway/scaleway-sdk-go/scw"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
711
)
812

913
func ExpandStringList(v interface{}) []string {
@@ -48,3 +52,22 @@ func TimeToRFC3339(t *time.Time) string {
4852

4953
return t.Format(time.RFC3339)
5054
}
55+
56+
// ExtractRegionAndKeyID parses an ID of the form "region/key_id" and returns the region and key ID.
57+
func ExtractRegionAndKeyID(id string) (scw.Region, string, error) {
58+
parts := strings.SplitN(id, "/", 2)
59+
if len(parts) != 2 {
60+
return "", "", fmt.Errorf("unexpected ID format (%s), expected region/key_id", id)
61+
}
62+
return scw.Region(parts[0]), parts[1], nil
63+
}
64+
65+
// NewKeyManagerAPIWithRegionAndID returns a Key Manager API client, region, and key ID from meta and a composite ID.
66+
func NewKeyManagerAPIWithRegionAndID(m any, id string) (*key_manager.API, scw.Region, string, error) {
67+
region, keyID, err := ExtractRegionAndKeyID(id)
68+
if err != nil {
69+
return nil, "", "", err
70+
}
71+
client := key_manager.NewAPI(meta.ExtractScwClient(m))
72+
return client, region, keyID, nil
73+
}

internal/services/keymanager/key_resource.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package keymanager
22

33
import (
44
"context"
5+
"fmt"
56
"time"
67

78
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -144,15 +145,16 @@ func resourceKeyManagerKeyCreate(ctx context.Context, d *schema.ResourceData, m
144145
return diag.FromErr(err)
145146
}
146147

147-
d.SetId(key.ID)
148+
d.SetId(fmt.Sprintf("%s/%s", key.Region, key.ID))
148149

149150
return resourceKeyManagerKeyRead(ctx, d, m)
150151
}
151152

152153
func resourceKeyManagerKeyRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
153-
client := key_manager.NewAPI(meta.ExtractScwClient(m))
154-
region := scw.Region(d.Get("region").(string))
155-
keyID := d.Id()
154+
client, region, keyID, err := NewKeyManagerAPIWithRegionAndID(m, d.Id())
155+
if err != nil {
156+
return diag.FromErr(err)
157+
}
156158

157159
key, err := client.GetKey(&key_manager.GetKeyRequest{
158160
Region: region,
@@ -168,8 +170,7 @@ func resourceKeyManagerKeyRead(ctx context.Context, d *schema.ResourceData, m in
168170
_ = d.Set("usage", UsageToString(key.Usage))
169171
_ = d.Set("description", key.Description)
170172
_ = d.Set("tags", key.Tags)
171-
_ = d.Set("rotation_count", key.RotationCount)
172-
_ = d.Set("state", key.State.String())
173+
_ = d.Set("rotation_count", int(key.RotationCount))
173174
_ = d.Set("created_at", TimeToRFC3339(key.CreatedAt))
174175
_ = d.Set("updated_at", TimeToRFC3339(key.UpdatedAt))
175176
_ = d.Set("protected", key.Protected)
@@ -197,9 +198,10 @@ func resourceKeyManagerKeyRead(ctx context.Context, d *schema.ResourceData, m in
197198
}
198199

199200
func resourceKeyManagerKeyUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
200-
client := key_manager.NewAPI(meta.ExtractScwClient(m))
201-
region := scw.Region(d.Get("region").(string))
202-
keyID := d.Id()
201+
client, region, keyID, err := NewKeyManagerAPIWithRegionAndID(m, d.Id())
202+
if err != nil {
203+
return diag.FromErr(err)
204+
}
203205

204206
updateReq := &key_manager.UpdateKeyRequest{
205207
Region: region,
@@ -239,7 +241,7 @@ func resourceKeyManagerKeyUpdate(ctx context.Context, d *schema.ResourceData, m
239241
}
240242
}
241243

242-
_, err := client.UpdateKey(updateReq)
244+
_, err = client.UpdateKey(updateReq)
243245
if err != nil {
244246
return diag.FromErr(err)
245247
}
@@ -248,11 +250,12 @@ func resourceKeyManagerKeyUpdate(ctx context.Context, d *schema.ResourceData, m
248250
}
249251

250252
func resourceKeyManagerKeyDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
251-
client := key_manager.NewAPI(meta.ExtractScwClient(m))
252-
region := scw.Region(d.Get("region").(string))
253-
keyID := d.Id()
253+
client, region, keyID, err := NewKeyManagerAPIWithRegionAndID(m, d.Id())
254+
if err != nil {
255+
return diag.FromErr(err)
256+
}
254257

255-
err := client.DeleteKey(&key_manager.DeleteKeyRequest{
258+
err = client.DeleteKey(&key_manager.DeleteKeyRequest{
256259
Region: region,
257260
KeyID: keyID,
258261
})

internal/services/keymanager/key_resource_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package keymanager_test
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
9+
key_manager "github.com/scaleway/scaleway-sdk-go/api/key_manager/v1alpha1"
710
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
11+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
12+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/keymanager"
813
)
914

1015
func TestAccKeyManagerKey_Basic(t *testing.T) {
@@ -14,6 +19,7 @@ func TestAccKeyManagerKey_Basic(t *testing.T) {
1419
resource.ParallelTest(t, resource.TestCase{
1520
PreCheck: func() { acctest.PreCheck(t) },
1621
ProviderFactories: tt.ProviderFactories,
22+
CheckDestroy: IsKeyManagerKeyDestroyed(tt),
1723
Steps: []resource.TestStep{
1824
{
1925
Config: `
@@ -46,6 +52,7 @@ func TestAccKeyManagerKey_Update(t *testing.T) {
4652
resource.ParallelTest(t, resource.TestCase{
4753
PreCheck: func() { acctest.PreCheck(t) },
4854
ProviderFactories: tt.ProviderFactories,
55+
CheckDestroy: IsKeyManagerKeyDestroyed(tt),
4956
Steps: []resource.TestStep{
5057
{
5158
Config: `
@@ -83,3 +90,35 @@ func TestAccKeyManagerKey_Update(t *testing.T) {
8390
},
8491
})
8592
}
93+
94+
func IsKeyManagerKeyDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
95+
return func(state *terraform.State) error {
96+
for _, rs := range state.RootModule().Resources {
97+
if rs.Type != "scaleway_key_manager_key" {
98+
continue
99+
}
100+
101+
client, region, keyID, err := keymanager.NewKeyManagerAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
102+
if err != nil {
103+
return err
104+
}
105+
106+
key, err := client.GetKey(&key_manager.GetKeyRequest{
107+
Region: region,
108+
KeyID: keyID,
109+
})
110+
if err == nil {
111+
// If the key exists but has DeletionRequestedAt set, we consider it "destroyed" for test purposes
112+
if key.DeletionRequestedAt != nil {
113+
continue
114+
}
115+
return fmt.Errorf("Key (%s) still exists", rs.Primary.ID)
116+
}
117+
118+
if !httperrors.Is404(err) {
119+
return err
120+
}
121+
}
122+
return nil
123+
}
124+
}

0 commit comments

Comments
 (0)