@@ -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,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