2022-03-28 21:41:27 +00:00
|
|
|
package awsssm
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/service/ssm"
|
|
|
|
"github.com/lmika/awstools/internal/ssm-browse/models"
|
|
|
|
"github.com/pkg/errors"
|
2022-03-28 23:29:25 +00:00
|
|
|
"log"
|
2022-03-28 21:41:27 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Provider struct {
|
|
|
|
client *ssm.Client
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewProvider(client *ssm.Client) *Provider {
|
|
|
|
return &Provider{
|
|
|
|
client: client,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-30 03:09:57 +00:00
|
|
|
func (p *Provider) List(ctx context.Context, prefix string, maxCount int) (*models.SSMParameters, error) {
|
2022-03-28 23:29:25 +00:00
|
|
|
log.Printf("new prefix: %v", prefix)
|
|
|
|
|
2022-03-30 03:09:57 +00:00
|
|
|
pager := ssm.NewGetParametersByPathPaginator(p.client, &ssm.GetParametersByPathInput{
|
2022-03-28 23:29:25 +00:00
|
|
|
Path: aws.String(prefix),
|
2022-03-28 21:41:27 +00:00
|
|
|
Recursive: true,
|
2022-03-30 03:09:57 +00:00
|
|
|
WithDecryption: true,
|
2022-03-28 21:41:27 +00:00
|
|
|
})
|
|
|
|
|
2022-03-30 03:09:57 +00:00
|
|
|
items := make([]models.SSMParameter, 0)
|
|
|
|
outer: for pager.HasMorePages() {
|
|
|
|
out, err := pager.NextPage(ctx)
|
|
|
|
if err != nil {
|
|
|
|
return nil, errors.Wrap(err, "cannot get parameters from path")
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, p := range out.Parameters {
|
|
|
|
items = append(items, models.SSMParameter{
|
|
|
|
Name: aws.ToString(p.Name),
|
|
|
|
Value: aws.ToString(p.Value),
|
|
|
|
})
|
|
|
|
if len(items) >= maxCount {
|
|
|
|
break outer
|
|
|
|
}
|
2022-03-28 21:41:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-30 03:09:57 +00:00
|
|
|
return &models.SSMParameters{Items: items}, nil
|
2022-03-28 21:41:27 +00:00
|
|
|
}
|