@@ -2,8 +2,6 @@ package secret
22
33import (
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
1919func 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