@@ -3,6 +3,7 @@ package secret
33import (
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+ Computed : 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