30
30
// # As
31
31
//
32
32
// awsparamstore exposes the following types for As:
33
- // - Snapshot: (V1) *ssm.GetParameterOutput, *ssm.DescribeParametersOutput, (V2) *ssmv2.GetParameterOutput, *ssmv2.DescribeParametersOutput
33
+ // - Snapshot: (V1) *ssm.GetParameterOutput, (V2) *ssmv2.GetParameterOutput
34
34
// - Error: (V1) awserr.Error, (V2) any error type returned by the service, notably smithy.APIError
35
35
package awsparamstore // import "gocloud.dev/runtimevar/awsparamstore"
36
36
@@ -46,7 +46,6 @@ import (
46
46
47
47
awsv2 "github.com/aws/aws-sdk-go-v2/aws"
48
48
ssmv2 "github.com/aws/aws-sdk-go-v2/service/ssm"
49
- ssmv2types "github.com/aws/aws-sdk-go-v2/service/ssm/types"
50
49
"github.com/aws/aws-sdk-go/aws"
51
50
"github.com/aws/aws-sdk-go/aws/awserr"
52
51
"github.com/aws/aws-sdk-go/aws/client"
@@ -212,8 +211,6 @@ type state struct {
212
211
val interface {}
213
212
rawGetV1 * ssm.GetParameterOutput
214
213
rawGetV2 * ssmv2.GetParameterOutput
215
- rawDescV1 * ssm.DescribeParametersOutput
216
- rawDescV2 * ssmv2.DescribeParametersOutput
217
214
updateTime time.Time
218
215
version int64
219
216
err error
@@ -236,10 +233,6 @@ func (s *state) As(i interface{}) bool {
236
233
* p = s .rawGetV1
237
234
case * * ssmv2.GetParameterOutput :
238
235
* p = s .rawGetV2
239
- case * * ssm.DescribeParametersOutput :
240
- * p = s .rawDescV1
241
- case * * ssmv2.DescribeParametersOutput :
242
- * p = s .rawDescV2
243
236
default :
244
237
return false
245
238
}
@@ -300,91 +293,36 @@ type watcher struct {
300
293
decoder * runtimevar.Decoder
301
294
}
302
295
303
- func getParameter (svc * ssm.SSM , name string ) (int64 , []byte , * ssm.GetParameterOutput , error ) {
296
+ func getParameter (svc * ssm.SSM , name string ) (int64 , []byte , time. Time , * ssm.GetParameterOutput , error ) {
304
297
getResp , err := svc .GetParameter (& ssm.GetParameterInput {
305
298
Name : aws .String (name ),
306
299
// Ignored if the parameter is not encrypted.
307
300
WithDecryption : aws .Bool (true ),
308
301
})
309
302
if err != nil {
310
- return 0 , nil , nil , err
303
+ return 0 , nil , time. Time {}, nil , err
311
304
}
312
305
if getResp .Parameter == nil {
313
- return 0 , nil , getResp , fmt .Errorf ("unable to get %q parameter" , name )
306
+ return 0 , nil , time. Time {}, getResp , fmt .Errorf ("unable to get %q parameter" , name )
314
307
}
315
- return aws .Int64Value (getResp .Parameter .Version ), []byte (aws .StringValue (getResp .Parameter .Value )), getResp , nil
308
+ return aws .Int64Value (getResp .Parameter .Version ), []byte (aws .StringValue (getResp .Parameter .Value )), aws . TimeValue ( getResp . Parameter . LastModifiedDate ), getResp , nil
316
309
}
317
310
318
- func getParameterV2 (ctx context.Context , client * ssmv2.Client , name string ) (int64 , []byte , * ssmv2.GetParameterOutput , error ) {
311
+ func getParameterV2 (ctx context.Context , client * ssmv2.Client , name string ) (int64 , []byte , time. Time , * ssmv2.GetParameterOutput , error ) {
319
312
getResp , err := client .GetParameter (ctx , & ssmv2.GetParameterInput {
320
313
Name : aws .String (name ),
321
314
// Ignored if the parameter is not encrypted.
322
315
WithDecryption : true ,
323
316
})
324
317
if err != nil {
325
- return 0 , nil , nil , err
318
+ return 0 , nil , time. Time {}, nil , err
326
319
}
327
320
if getResp .Parameter == nil {
328
- return 0 , nil , getResp , fmt .Errorf ("unable to get %q parameter" , name )
321
+ return 0 , nil , time. Time {}, getResp , fmt .Errorf ("unable to get %q parameter" , name )
329
322
}
330
- return getResp .Parameter .Version , []byte (awsv2 .ToString (getResp .Parameter .Value )), getResp , nil
323
+ return getResp .Parameter .Version , []byte (awsv2 .ToString (getResp .Parameter .Value )), awsv2 . ToTime ( getResp . Parameter . LastModifiedDate ), getResp , nil
331
324
}
332
325
333
- func describeParameter (svc * ssm.SSM , name string ) (time.Time , * ssm.DescribeParametersOutput , error ) {
334
- query := func (nextToken * string ) (* ssm.DescribeParametersOutput , error ) {
335
- return svc .DescribeParameters (& ssm.DescribeParametersInput {
336
- NextToken : nextToken ,
337
- Filters : []* ssm.ParametersFilter {
338
- {Key : aws .String ("Name" ), Values : []* string {& name }},
339
- },
340
- })
341
- }
342
- var result []* ssm.ParameterMetadata
343
- var descResp * ssm.DescribeParametersOutput
344
- var err error
345
- var token * string
346
- for ok := true ; ok ; ok = (token != nil ) {
347
- if descResp , err = query (token ); err != nil {
348
- return time.Time {}, nil , err
349
- } else {
350
- result = append (result , descResp .Parameters ... )
351
- token = descResp .NextToken
352
- }
353
- }
354
- if len (result ) != 1 || * result [0 ].Name != name {
355
- return time.Time {}, nil , fmt .Errorf ("unable to get single %q parameter" , name )
356
- }
357
- return aws .TimeValue (result [0 ].LastModifiedDate ), descResp , nil
358
- }
359
-
360
- func describeParameterV2 (ctx context.Context , client * ssmv2.Client , name string ) (time.Time , * ssmv2.DescribeParametersOutput , error ) {
361
- query := func (nextToken * string ) (* ssmv2.DescribeParametersOutput , error ) {
362
- return client .DescribeParameters (ctx , & ssmv2.DescribeParametersInput {
363
- NextToken : nextToken ,
364
- Filters : []ssmv2types.ParametersFilter {
365
- {Key : "Name" , Values : []string {name }},
366
- },
367
- })
368
- }
369
- result := []ssmv2types.ParameterMetadata {}
370
- var descResp * ssmv2.DescribeParametersOutput
371
- var err error
372
- var token * string
373
- for ok := true ; ok ; ok = (token != nil ) {
374
- if descResp , err = query (token ); err != nil {
375
- return time.Time {}, nil , err
376
- } else {
377
- result = append (result , descResp .Parameters ... )
378
- token = descResp .NextToken
379
- }
380
- }
381
- if len (result ) != 1 || * result [0 ].Name != name {
382
- return time.Time {}, descResp , fmt .Errorf ("unable to get single %q parameter" , name )
383
- }
384
- return awsv2 .ToTime (descResp .Parameters [0 ].LastModifiedDate ), descResp , nil
385
- }
386
-
387
- // WatchVariable implements driver.WatchVariable.
388
326
func (w * watcher ) WatchVariable (ctx context.Context , prev driver.State ) (driver.State , time.Duration ) {
389
327
lastVersion := int64 (- 1 )
390
328
if prev != nil {
@@ -398,13 +336,14 @@ func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.
398
336
// GetParameter from S3 to get the current value and version.
399
337
var newVersion int64
400
338
var newVal []byte
339
+ var newLastModified time.Time
401
340
var rawGetV1 * ssm.GetParameterOutput
402
341
var rawGetV2 * ssmv2.GetParameterOutput
403
342
var err error
404
343
if w .useV2 {
405
- newVersion , newVal , rawGetV2 , err = getParameterV2 (ctx , w .clientV2 , w .name )
344
+ newVersion , newVal , newLastModified , rawGetV2 , err = getParameterV2 (ctx , w .clientV2 , w .name )
406
345
} else {
407
- newVersion , newVal , rawGetV1 , err = getParameter (svc , w .name )
346
+ newVersion , newVal , newLastModified , rawGetV1 , err = getParameter (svc , w .name )
408
347
}
409
348
if err != nil {
410
349
return errorState (err , prev ), w .wait
@@ -414,19 +353,6 @@ func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.
414
353
return nil , w .wait
415
354
}
416
355
417
- // DescribeParameters from S3 to get the LastModified date.
418
- var newLastModified time.Time
419
- var rawDescV1 * ssm.DescribeParametersOutput
420
- var rawDescV2 * ssmv2.DescribeParametersOutput
421
- if w .useV2 {
422
- newLastModified , rawDescV2 , err = describeParameterV2 (ctx , w .clientV2 , w .name )
423
- } else {
424
- newLastModified , rawDescV1 , err = describeParameter (svc , w .name )
425
- }
426
- if err != nil {
427
- return errorState (err , prev ), w .wait
428
- }
429
-
430
356
// New value (or at least, new version). Decode it.
431
357
val , err := w .decoder .Decode (ctx , newVal )
432
358
if err != nil {
@@ -436,8 +362,6 @@ func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.
436
362
val : val ,
437
363
rawGetV1 : rawGetV1 ,
438
364
rawGetV2 : rawGetV2 ,
439
- rawDescV1 : rawDescV1 ,
440
- rawDescV2 : rawDescV2 ,
441
365
updateTime : newLastModified ,
442
366
version : newVersion ,
443
367
}, w .wait
0 commit comments