Skip to content

Commit f7c1c9a

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

File tree

1 file changed

+74
-1
lines changed

1 file changed

+74
-1
lines changed

internal/services/secret/secret.go

+74-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,49 @@ 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+
"secret_id": {
130+
Type: schema.TypeString,
131+
Computed: true,
132+
Description: "The secret ID associated with this version",
133+
},
134+
"status": {
135+
Type: schema.TypeString,
136+
Computed: true,
137+
Description: "Status of the secret version",
138+
},
139+
"created_at": {
140+
Type: schema.TypeString,
141+
Computed: true,
142+
Description: "Date and time of secret version's creation (RFC 3339 format)",
143+
},
144+
"updated_at": {
145+
Type: schema.TypeString,
146+
Computed: true,
147+
Description: "Date and time of secret version's creation (RFC 3339 format)",
148+
},
149+
"description": {
150+
Type: schema.TypeString,
151+
Optional: true,
152+
Description: "Description of the secret version",
153+
},
154+
"latest": {
155+
Type: schema.TypeBool,
156+
Optional: true,
157+
Description: "Returns true if the version is the latest.",
158+
},
159+
},
160+
},
161+
},
118162
"region": regional.Schema(),
119163
"project_id": account.ProjectIDSchema(),
120164
},
@@ -192,19 +236,48 @@ func ResourceSecretRead(ctx context.Context, d *schema.ResourceData, m interface
192236
_ = d.Set("tags", types.FlattenSliceString(secretResponse.Tags))
193237
}
194238

239+
versions, err := api.ListSecretVersions(&secret.ListSecretVersionsRequest{
240+
Region: region,
241+
SecretID: id,
242+
}, scw.WithAllPages(), scw.WithContext(ctx))
243+
if err != nil {
244+
if httperrors.Is404(err) {
245+
d.SetId("")
246+
247+
return nil
248+
}
249+
250+
return diag.FromErr(err)
251+
}
252+
195253
_ = d.Set("name", secretResponse.Name)
196254
_ = d.Set("description", types.FlattenStringPtr(secretResponse.Description))
197255
_ = d.Set("created_at", types.FlattenTime(secretResponse.CreatedAt))
198256
_ = d.Set("updated_at", types.FlattenTime(secretResponse.UpdatedAt))
199257
_ = d.Set("status", secretResponse.Status.String())
200-
_ = d.Set("version_count", int(secretResponse.VersionCount))
258+
_ = d.Set("version_count", int(versions.TotalCount))
201259
_ = d.Set("region", string(region))
202260
_ = d.Set("project_id", secretResponse.ProjectID)
203261
_ = d.Set("path", secretResponse.Path)
204262
_ = d.Set("protected", secretResponse.Protected)
205263
_ = d.Set("ephemeral_policy", flattenEphemeralPolicy(secretResponse.EphemeralPolicy))
206264
_ = d.Set("type", secretResponse.Type)
207265

266+
versionsList := make([]map[string]interface{}, 0, len(versions.Versions))
267+
for _, version := range versions.Versions {
268+
versionsList = append(versionsList, map[string]interface{}{
269+
"revision": strconv.Itoa(int(version.Revision)),
270+
"secret_id": version.SecretID,
271+
"status": version.Status.String(),
272+
"created_at": types.FlattenTime(version.CreatedAt),
273+
"updated_at": types.FlattenTime(version.UpdatedAt),
274+
"description": types.FlattenStringPtr(version.Description),
275+
"latest": types.FlattenBoolPtr(&version.Latest),
276+
})
277+
}
278+
279+
_ = d.Set("versions", versionsList)
280+
208281
return nil
209282
}
210283

0 commit comments

Comments
 (0)