Skip to content

Commit d132c58

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

File tree

1 file changed

+68
-1
lines changed

1 file changed

+68
-1
lines changed

internal/services/secret/secret.go

+68-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package secret
33
import (
44
"context"
55
"path/filepath"
6+
"strconv"
67

78
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -115,6 +116,44 @@ func ResourceSecret() *schema.Resource {
115116
},
116117
},
117118
},
119+
"versions": {
120+
Type: schema.TypeList,
121+
Optional: true,
122+
Elem: &schema.Resource{
123+
Schema: map[string]*schema.Schema{
124+
"revision": {
125+
Type: schema.TypeString,
126+
Computed: true,
127+
Description: "The revision of secret version",
128+
},
129+
"status": {
130+
Type: schema.TypeString,
131+
Computed: true,
132+
Description: "Status of the secret version",
133+
},
134+
"created_at": {
135+
Type: schema.TypeString,
136+
Computed: true,
137+
Description: "Date and time of secret version's creation (RFC 3339 format)",
138+
},
139+
"updated_at": {
140+
Type: schema.TypeString,
141+
Computed: true,
142+
Description: "Date and time of secret version's creation (RFC 3339 format)",
143+
},
144+
"description": {
145+
Type: schema.TypeString,
146+
Optional: true,
147+
Description: "Description of the secret version",
148+
},
149+
"latest": {
150+
Type: schema.TypeBool,
151+
Optional: true,
152+
Description: "Returns true if the version is the latest.",
153+
},
154+
},
155+
},
156+
},
118157
"region": regional.Schema(),
119158
"project_id": account.ProjectIDSchema(),
120159
},
@@ -192,19 +231,47 @@ func ResourceSecretRead(ctx context.Context, d *schema.ResourceData, m interface
192231
_ = d.Set("tags", types.FlattenSliceString(secretResponse.Tags))
193232
}
194233

234+
versions, err := api.ListSecretVersions(&secret.ListSecretVersionsRequest{
235+
Region: region,
236+
SecretID: id,
237+
}, scw.WithContext(ctx))
238+
if err != nil {
239+
if httperrors.Is404(err) {
240+
d.SetId("")
241+
242+
return nil
243+
}
244+
245+
return diag.FromErr(err)
246+
}
247+
195248
_ = d.Set("name", secretResponse.Name)
196249
_ = d.Set("description", types.FlattenStringPtr(secretResponse.Description))
197250
_ = d.Set("created_at", types.FlattenTime(secretResponse.CreatedAt))
198251
_ = d.Set("updated_at", types.FlattenTime(secretResponse.UpdatedAt))
199252
_ = d.Set("status", secretResponse.Status.String())
200-
_ = d.Set("version_count", int(secretResponse.VersionCount))
253+
_ = d.Set("version_count", int(versions.TotalCount))
201254
_ = d.Set("region", string(region))
202255
_ = d.Set("project_id", secretResponse.ProjectID)
203256
_ = d.Set("path", secretResponse.Path)
204257
_ = d.Set("protected", secretResponse.Protected)
205258
_ = d.Set("ephemeral_policy", flattenEphemeralPolicy(secretResponse.EphemeralPolicy))
206259
_ = d.Set("type", secretResponse.Type)
207260

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

0 commit comments

Comments
 (0)