@@ -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,49 @@ 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
+ "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
+ },
118
162
"region" : regional .Schema (),
119
163
"project_id" : account .ProjectIDSchema (),
120
164
},
@@ -192,19 +236,48 @@ func ResourceSecretRead(ctx context.Context, d *schema.ResourceData, m interface
192
236
_ = d .Set ("tags" , types .FlattenSliceString (secretResponse .Tags ))
193
237
}
194
238
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
+
195
253
_ = d .Set ("name" , secretResponse .Name )
196
254
_ = d .Set ("description" , types .FlattenStringPtr (secretResponse .Description ))
197
255
_ = d .Set ("created_at" , types .FlattenTime (secretResponse .CreatedAt ))
198
256
_ = d .Set ("updated_at" , types .FlattenTime (secretResponse .UpdatedAt ))
199
257
_ = d .Set ("status" , secretResponse .Status .String ())
200
- _ = d .Set ("version_count" , int (secretResponse . VersionCount ))
258
+ _ = d .Set ("version_count" , int (versions . TotalCount ))
201
259
_ = d .Set ("region" , string (region ))
202
260
_ = d .Set ("project_id" , secretResponse .ProjectID )
203
261
_ = d .Set ("path" , secretResponse .Path )
204
262
_ = d .Set ("protected" , secretResponse .Protected )
205
263
_ = d .Set ("ephemeral_policy" , flattenEphemeralPolicy (secretResponse .EphemeralPolicy ))
206
264
_ = d .Set ("type" , secretResponse .Type )
207
265
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
+
208
281
return nil
209
282
}
210
283
0 commit comments