Skip to content

Commit

Permalink
refactor when upgraded to go 2 sdk RC1
Browse files Browse the repository at this point in the history
  • Loading branch information
mariotoffia committed Jan 5, 2021
1 parent 15b3dcf commit f4d2d63
Show file tree
Hide file tree
Showing 15 changed files with 316 additions and 154 deletions.
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"dprm",
"dreq",
"eval",
"extrprms",
"fqname",
"g",
"gurka",
Expand All @@ -32,15 +33,19 @@
"hunden",
"kalle",
"keyid",
"kula",
"mariotoffia",
"mprms",
"mydb",
"myname",
"nasm",
"nasse",
"nisse",
"omitempty",
"panna",
"pgsql",
"rdis",
"smtypes",
"stretchr",
"strkey",
"struct",
Expand Down
6 changes: 4 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
module github.com/mariotoffia/ssm

require (
github.com/aws/aws-sdk-go v1.35.16
github.com/aws/aws-sdk-go-v2 v0.22.0
github.com/aws/aws-sdk-go-v2 v0.31.0
github.com/aws/aws-sdk-go-v2/config v0.4.0
github.com/aws/aws-sdk-go-v2/service/secretsmanager v0.31.0
github.com/aws/aws-sdk-go-v2/service/ssm v0.31.0
github.com/google/uuid v1.1.1
github.com/kr/pretty v0.1.0 // indirect
github.com/pkg/errors v0.9.1
Expand Down
19 changes: 19 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,31 @@ github.com/aws/aws-sdk-go v1.35.16 h1:kaYAh0lYwMUTmb/t6whBkj2nZzi3yAeQuwv0QB6dQc
github.com/aws/aws-sdk-go v1.35.16/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
github.com/aws/aws-sdk-go-v2 v0.22.0 h1:mlixfS5HVzn7Sf3KVhjAIM2H3bB7uoTbLCtKHvteUfE=
github.com/aws/aws-sdk-go-v2 v0.22.0/go.mod h1:2LhT7UgHOXK3UXONKI5OMgIyoQL6zTAw/jwIeX6yqzw=
github.com/aws/aws-sdk-go-v2 v0.31.0 h1:TNTDsz+Xq80nYzZPUFS4a2Oyjz9jKHKcTuNAXtcW8b8=
github.com/aws/aws-sdk-go-v2 v0.31.0/go.mod h1:IQw4KL7QIoaNDT3WoEBV1fDlVRhp/WTRteoaplV3SHo=
github.com/aws/aws-sdk-go-v2/config v0.4.0 h1:16lwnZRhleaPbDesZgEJbHxuOv4wy12A372mkhmiktc=
github.com/aws/aws-sdk-go-v2/config v0.4.0/go.mod h1:5uxQPUBCF+TwwWYo2xau4N+rSOS47ZH+QvLbae1Cckc=
github.com/aws/aws-sdk-go-v2/credentials v0.2.0 h1:YDv/0/8BzaZtpS4jfptcyIPh5zlhmIhbM2RtNscn/bo=
github.com/aws/aws-sdk-go-v2/credentials v0.2.0/go.mod h1:U81m6Xb5IpJ66ZnotiG7/6JJFuwrc8q8rWpXQxYP0hI=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v0.1.0 h1:zwhJDxNht/+a0QGy3RCveUFf6REXcmaQIHcYS11m5KY=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v0.1.0/go.mod h1:d3o/QBgbYw2OYmbv/EGYs0zFH47qsCKCTDbaOgdQGH8=
github.com/aws/aws-sdk-go-v2/service/secretsmanager v0.31.0 h1:RPlRz535UVwpXtj7lWAL2HW7Lv8S0y/Jy+9sZHxtkdw=
github.com/aws/aws-sdk-go-v2/service/secretsmanager v0.31.0/go.mod h1:C/lUWjIxMClzBE33jWymfvA9x5hb3busK6cuLg+0KT8=
github.com/aws/aws-sdk-go-v2/service/ssm v0.31.0 h1:PgiMnz5Nle2aMAv8JitZOCzNUvHHiGIoVppm8G5wQ0U=
github.com/aws/aws-sdk-go-v2/service/ssm v0.31.0/go.mod h1:Hljt5lvdt0flVIiWfZinwI6Eda3edGAxlTAu9owR104=
github.com/aws/aws-sdk-go-v2/service/sts v0.31.0 h1:iJwlIyswoW4VM8RUmhC3397jdGa6QhMUtUf5daX+/a0=
github.com/aws/aws-sdk-go-v2/service/sts v0.31.0/go.mod h1:gliVu4/DZsKINvBoEcMIlxMIQft/yPYQhnSLxwiWqFM=
github.com/aws/smithy-go v0.5.0 h1:ArsdWUrb1n6/V/REXhuwq2TZv+kuqOBpMlGBd2EkDYM=
github.com/aws/smithy-go v0.5.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
Expand Down
32 changes: 16 additions & 16 deletions internal/asm/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager/types"
"github.com/google/uuid"
"github.com/mariotoffia/ssm/internal/common"
"github.com/mariotoffia/ssm/parser"
Expand All @@ -23,7 +24,7 @@ func genCreateSecretParams(nodes map[string]*parser.StructNode) []secretsmanager

func genCreateSecretParam(node *parser.StructNode) secretsmanager.CreateSecretInput {
var keyid *string = nil
var tags []secretsmanager.Tag = nil
var tags []types.Tag = nil

if tag, ok := ToAsmTag(node); ok {
if !tag.DefaultAccountKey() {
Expand All @@ -32,9 +33,9 @@ func genCreateSecretParam(node *parser.StructNode) secretsmanager.CreateSecretIn

t := tag.Tag()
if len(t) > 0 {
tags = []secretsmanager.Tag{}
tags = []types.Tag{}
for key := range t {
tags = append(tags, secretsmanager.Tag{Key: aws.String(key), Value: aws.String(t[key])})
tags = append(tags, types.Tag{Key: aws.String(key), Value: aws.String(t[key])})
}
}

Expand Down Expand Up @@ -64,22 +65,21 @@ func (p *Serializer) getFromAws(prm string,
params = &secretsmanager.GetSecretValueInput{SecretId: aws.String(prm), VersionId: aws.String(nasm.VersionID())}
}

client := secretsmanager.New(p.config)
req := client.GetSecretValueRequest(params)
resp, err := req.Send(context.Background())
client := secretsmanager.NewFromConfig(p.config)

resp, err := client.GetSecretValue(context.Background(), params)

if err != nil {
log.Debug().Msgf("error for '%s': %v err %v", prm, resp, err)
return nil, err
}
return resp.GetSecretValueOutput, nil
return resp, nil
}

func (p *Serializer) createAwsSecret(client *secretsmanager.Client,
secret secretsmanager.CreateSecretInput) (*secretsmanager.CreateSecretOutput, error) {

req := client.CreateSecretRequest(&secret)
resp, err := req.Send(context.Background())
resp, err := client.CreateSecret(context.Background(), &secret)

if err != nil {
log.Debug().Msgf("create error for '%s': %v err %v", *secret.Name, resp, err)
Expand All @@ -89,21 +89,21 @@ func (p *Serializer) createAwsSecret(client *secretsmanager.Client,
log.Debug().Str("svc", p.service).Str("method", "createAwsSecret").
Msgf("created secret %s value ***", *secret.Name)

return resp.CreateSecretOutput, nil
return resp, nil

}

func (p *Serializer) updateAwsSecret(client *secretsmanager.Client,
secret secretsmanager.CreateSecretInput) (*secretsmanager.UpdateSecretOutput, error) {

req := client.UpdateSecretRequest(&secretsmanager.UpdateSecretInput{
resp, err := client.UpdateSecret(context.Background(), &secretsmanager.UpdateSecretInput{
ClientRequestToken: secret.ClientRequestToken,
Description: secret.Description,
KmsKeyId: secret.KmsKeyId,
SecretId: secret.Name,
SecretString: secret.SecretString,
})
resp, err := req.Send(context.Background())

if err != nil {
log.Debug().Msgf("update error for '%s': %v err %v", *secret.Name, resp, err)
return nil, err
Expand All @@ -112,18 +112,18 @@ func (p *Serializer) updateAwsSecret(client *secretsmanager.Client,
log.Debug().Str("svc", p.service).Str("method", "updateAwsSecret").
Msgf("updated secret %s value ***", *secret.Name)

return resp.UpdateSecretOutput, nil
return resp, nil

}

func (p *Serializer) tagAwsSecret(client *secretsmanager.Client,
secret secretsmanager.CreateSecretInput) (*secretsmanager.TagResourceOutput, error) {

req := client.TagResourceRequest(&secretsmanager.TagResourceInput{
resp, err := client.TagResource(context.Background(), &secretsmanager.TagResourceInput{
SecretId: secret.Name,
Tags: secret.Tags,
})
resp, err := req.Send(context.Background())

if err != nil {
log.Debug().Msgf("update tgs error for '%s': %v err %v", *secret.Name, resp, err)
return nil, err
Expand All @@ -132,6 +132,6 @@ func (p *Serializer) tagAwsSecret(client *secretsmanager.Client,
log.Debug().Str("svc", p.service).Str("method", "tagAwsSecret").
Msgf("tagged secret %s tags %v", *secret.Name, secret.Tags)

return resp.TagResourceOutput, nil
return resp, nil

}
35 changes: 18 additions & 17 deletions internal/asm/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ package asm

import (
"context"
"errors"
"fmt"
"strings"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/awserr"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
smtypes "github.com/aws/aws-sdk-go-v2/service/secretsmanager/types"
"github.com/mariotoffia/ssm/parser"
"github.com/mariotoffia/ssm/support"
"github.com/rs/zerolog/log"
Expand All @@ -19,7 +20,7 @@ func (p *Serializer) Delete(
filter *support.FieldFilters) (map[string]support.FullNameField, error) {

m := map[string]*parser.StructNode{}
svc := secretsmanager.New(p.config)
svc := secretsmanager.NewFromConfig(p.config)

parser.NodesToParameterMap(node, m, filter, []string{"asm"})

Expand All @@ -31,7 +32,7 @@ func (p *Serializer) Delete(
err := internalDelete(
svc,
secretsmanager.DeleteSecretInput{SecretId: aws.String(path),
ForceDeleteWithoutRecovery: aws.Bool(true)},
ForceDeleteWithoutRecovery: true},
)

if err != nil {
Expand All @@ -57,13 +58,12 @@ func (p *Serializer) Delete(
// to delete several trees.
func (p *Serializer) DeleteTree(prefixes ...string) error {

svc := secretsmanager.New(p.config)
svc := secretsmanager.NewFromConfig(p.config)
input := secretsmanager.ListSecretsInput{}

for {

req := svc.ListSecretsRequest(&input)
resp, err := req.Send(context.Background())
resp, err := svc.ListSecrets(context.Background(), &input)

if err != nil {

Expand All @@ -83,7 +83,7 @@ func (p *Serializer) DeleteTree(prefixes ...string) error {
internalDelete(
svc,
secretsmanager.DeleteSecretInput{SecretId: aws.String(*s.Name),
ForceDeleteWithoutRecovery: aws.Bool(true)},
ForceDeleteWithoutRecovery: true},
)

}
Expand Down Expand Up @@ -117,17 +117,18 @@ func findPrefix(array []string, val string) bool {
func internalDelete(svc *secretsmanager.Client, prms secretsmanager.DeleteSecretInput) error {

fmt.Printf("deleting-asm %v", prms)
req := svc.DeleteSecretRequest(&prms)
if _, err := req.Send(context.Background()); err != nil {
if awserr, ok := err.(awserr.Error); ok {
switch awserr.Code() {
case secretsmanager.ErrCodeResourceNotFoundException:
break
default:
log.Warn().Msgf("Error when deleting %v", prms)
return err
}

if _, err := svc.DeleteSecret(context.Background(), &prms); err != nil {

var resourceNotFound *smtypes.ResourceNotFoundException

if errors.As(err, resourceNotFound) {
return nil
}

log.Warn().Msgf("Error when deleting %v", prms)
return err
}

return nil
}
37 changes: 24 additions & 13 deletions internal/asm/serializer.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package asm

import (
"context"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/awserr"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager/types"
"github.com/mariotoffia/ssm/internal/common"
"github.com/mariotoffia/ssm/parser"
"github.com/mariotoffia/ssm/support"
Expand All @@ -25,7 +27,8 @@ func NewFromConfig(config aws.Config, service string) *Serializer {

// New creates a repository using the default configuration.
func New(service string) (*Serializer, error) {
awscfg, err := external.LoadDefaultAWSConfig()

awscfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
return &Serializer{}, errors.Wrapf(err, "Failed to load AWS config")
}
Expand Down Expand Up @@ -57,22 +60,30 @@ func (p *Serializer) Get(node *parser.StructNode,
result, err := p.getFromAws(prm, nasm)

if err != nil {
if aerr, ok := err.(awserr.Error); ok {
switch aerr.Code() {
case secretsmanager.ErrCodeResourceNotFoundException:
im[n.FqName] = support.FullNameField{LocalName: n.FqName,
RemoteName: prm, Field: node.Field, Value: node.Value}
default:
return nil, errors.Wrapf(err, "Failed fetch asm config entry %s", prm)
}

var resourceNotFound *types.ResourceNotFoundException

if errors.As(err, resourceNotFound) {

im[n.FqName] = support.FullNameField{LocalName: n.FqName,
RemoteName: prm, Field: node.Field, Value: node.Value}

} else {

return nil, errors.Wrapf(err, "Failed fetch asm config entry %s", prm)

}

} else {
log.Debug().Str("svc", p.service).Str("method", "Get").Msgf("field %s", n.FqName)

log.Debug().Str("svc", p.service).Str("method", "Get").Msgf("field %s", n.FqName)
mprms[n.FqName] = result

}
} else {

log.Warn().Str("svc", p.service).Msgf("tag is not asm tag! tag: %v", n)

}
}
}
Expand All @@ -92,7 +103,7 @@ func (p *Serializer) Upsert(node *parser.StructNode,
// TODO: Implement me!
im := map[string]support.FullNameField{}

client := secretsmanager.New(p.config)
client := secretsmanager.NewFromConfig(p.config)
params := genCreateSecretParams(m)

for _, prm := range params {
Expand Down
Loading

0 comments on commit f4d2d63

Please sign in to comment.