Skip to content

Commit 5037362

Browse files
author
Mélanie Marques
committed
feat(secret_manager): add list of secret versions in secret datasource
1 parent c4b3921 commit 5037362

File tree

3 files changed

+75
-3
lines changed

3 files changed

+75
-3
lines changed

.envrc

Whitespace-only changes.

.terraformrc

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
provider_installation {
2+
dev_overrides {
3+
"scaleway/scaleway" = "/Users/melaniemarques/go/bin/terraform-provider-scaleway"
4+
}
5+
direct {}
6+
}

internal/services/secret/secret.go

+69-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package secret
22

33
import (
44
"context"
5-
"path/filepath"
6-
75
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
86
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
97
secret "github.com/scaleway/scaleway-sdk-go/api/secret/v1beta1"
@@ -14,6 +12,8 @@ import (
1412
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1513
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
1614
"github.com/scaleway/terraform-provider-scaleway/v2/internal/verify"
15+
"path/filepath"
16+
"strconv"
1717
)
1818

1919
func ResourceSecret() *schema.Resource {
@@ -115,6 +115,44 @@ func ResourceSecret() *schema.Resource {
115115
},
116116
},
117117
},
118+
"versions": {
119+
Type: schema.TypeList,
120+
Optional: true,
121+
Elem: &schema.Resource{
122+
Schema: map[string]*schema.Schema{
123+
"revision": {
124+
Type: schema.TypeString,
125+
Computed: true,
126+
Description: "The revision of secret version",
127+
},
128+
"status": {
129+
Type: schema.TypeString,
130+
Computed: true,
131+
Description: "Status of the secret version",
132+
},
133+
"created_at": {
134+
Type: schema.TypeString,
135+
Computed: true,
136+
Description: "Date and time of secret version's creation (RFC 3339 format)",
137+
},
138+
"updated_at": {
139+
Type: schema.TypeString,
140+
Computed: true,
141+
Description: "Date and time of secret version's creation (RFC 3339 format)",
142+
},
143+
"description": {
144+
Type: schema.TypeString,
145+
Optional: true,
146+
Description: "Description of the secret version",
147+
},
148+
"latest": {
149+
Type: schema.TypeBool,
150+
Optional: true,
151+
Description: "Returns true if the version is the latest.",
152+
},
153+
},
154+
},
155+
},
118156
"region": regional.Schema(),
119157
"project_id": account.ProjectIDSchema(),
120158
},
@@ -192,19 +230,47 @@ func ResourceSecretRead(ctx context.Context, d *schema.ResourceData, m interface
192230
_ = d.Set("tags", types.FlattenSliceString(secretResponse.Tags))
193231
}
194232

233+
versions, err := api.ListSecretVersions(&secret.ListSecretVersionsRequest{
234+
Region: region,
235+
SecretID: id,
236+
}, scw.WithContext(ctx))
237+
if err != nil {
238+
if httperrors.Is404(err) {
239+
d.SetId("")
240+
241+
return nil
242+
}
243+
244+
return diag.FromErr(err)
245+
}
246+
195247
_ = d.Set("name", secretResponse.Name)
196248
_ = d.Set("description", types.FlattenStringPtr(secretResponse.Description))
197249
_ = d.Set("created_at", types.FlattenTime(secretResponse.CreatedAt))
198250
_ = d.Set("updated_at", types.FlattenTime(secretResponse.UpdatedAt))
199251
_ = d.Set("status", secretResponse.Status.String())
200-
_ = d.Set("version_count", int(secretResponse.VersionCount))
252+
_ = d.Set("version_count", int(versions.TotalCount))
201253
_ = d.Set("region", string(region))
202254
_ = d.Set("project_id", secretResponse.ProjectID)
203255
_ = d.Set("path", secretResponse.Path)
204256
_ = d.Set("protected", secretResponse.Protected)
205257
_ = d.Set("ephemeral_policy", flattenEphemeralPolicy(secretResponse.EphemeralPolicy))
206258
_ = d.Set("type", secretResponse.Type)
207259

260+
var versionsList []map[string]interface{}
261+
for _, version := range versions.Versions {
262+
versionsList = append(versionsList, map[string]interface{}{
263+
"revision": strconv.Itoa(int(version.Revision)),
264+
"status": version.Status.String(),
265+
"created_at": types.FlattenTime(version.CreatedAt),
266+
"updated_at": types.FlattenTime(version.UpdatedAt),
267+
"description": types.FlattenStringPtr(version.Description),
268+
"latest": types.FlattenBoolPtr(&version.Latest),
269+
})
270+
}
271+
272+
_ = d.Set("versions", versionsList)
273+
208274
return nil
209275
}
210276

0 commit comments

Comments
 (0)