@@ -3,6 +3,7 @@ package secret
3
3
import (
4
4
"context"
5
5
"path/filepath"
6
+ "strconv"
6
7
7
8
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8
9
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -115,6 +116,44 @@ func ResourceSecret() *schema.Resource {
115
116
},
116
117
},
117
118
},
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
+ },
118
157
"region" : regional .Schema (),
119
158
"project_id" : account .ProjectIDSchema (),
120
159
},
@@ -192,19 +231,47 @@ func ResourceSecretRead(ctx context.Context, d *schema.ResourceData, m interface
192
231
_ = d .Set ("tags" , types .FlattenSliceString (secretResponse .Tags ))
193
232
}
194
233
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
+
195
248
_ = d .Set ("name" , secretResponse .Name )
196
249
_ = d .Set ("description" , types .FlattenStringPtr (secretResponse .Description ))
197
250
_ = d .Set ("created_at" , types .FlattenTime (secretResponse .CreatedAt ))
198
251
_ = d .Set ("updated_at" , types .FlattenTime (secretResponse .UpdatedAt ))
199
252
_ = d .Set ("status" , secretResponse .Status .String ())
200
- _ = d .Set ("version_count" , int (secretResponse . VersionCount ))
253
+ _ = d .Set ("version_count" , int (versions . TotalCount ))
201
254
_ = d .Set ("region" , string (region ))
202
255
_ = d .Set ("project_id" , secretResponse .ProjectID )
203
256
_ = d .Set ("path" , secretResponse .Path )
204
257
_ = d .Set ("protected" , secretResponse .Protected )
205
258
_ = d .Set ("ephemeral_policy" , flattenEphemeralPolicy (secretResponse .EphemeralPolicy ))
206
259
_ = d .Set ("type" , secretResponse .Type )
207
260
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
+
208
275
return nil
209
276
}
210
277
0 commit comments