From a3186ba9300293bdbacc4642f707b88e9e4f3381 Mon Sep 17 00:00:00 2001 From: dev-matthewj Date: Tue, 27 Aug 2019 15:38:10 +1200 Subject: [PATCH 1/4] wip for adding tags to s3 buckets created by stackit --- cmd/root.go | 1 + pkg/stackit/packager/bucket.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/cmd/root.go b/cmd/root.go index dc059ee..9aa7217 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -53,6 +53,7 @@ func init() { RootCmd.PersistentFlags().String("region", "", "") RootCmd.PersistentFlags().String("profile", "", "") RootCmd.PersistentFlags().String("stack-name", "", "") + RootCmd.PersistentFlags().String("stackit-tags", "", "") // Here you will define your flags and configuration settings. // Cobra supports Persistent Flags, which, if defined here, diff --git a/pkg/stackit/packager/bucket.go b/pkg/stackit/packager/bucket.go index 7652779..846c1e2 100644 --- a/pkg/stackit/packager/bucket.go +++ b/pkg/stackit/packager/bucket.go @@ -2,11 +2,13 @@ package packager import ( "fmt" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/sts" "github.com/pkg/errors" + "github.com/spf13/viper" ) func (p *Packager) s3BucketName() (string, error) { @@ -37,6 +39,10 @@ func (p *Packager) s3BucketName() (string, error) { if err != nil { if err, ok := err.(awserr.Error); ok { if err.Code() == s3.ErrCodeNoSuchBucket { + + tags := getStackitTags() + fmt.Println(tags) + _, err := p.s3.CreateBucket(&s3.CreateBucketInput{Bucket: &bucketName}) if err != nil { return "", errors.Wrap(err, "creating s3 bucket") @@ -64,3 +70,11 @@ func (p *Packager) s3BucketName() (string, error) { p.cachedBucketName = bucketName return bucketName, nil } + +func getStackitTags() string { + tags := viper.GetString("stackit-tags") + if tags == "" { + return "" + } + return "loadsa tags" +} From 6647b719d5efd79f1932a9368c6368455c212c20 Mon Sep 17 00:00:00 2001 From: dev-matthewj Date: Thu, 16 Jan 2020 16:10:18 +1300 Subject: [PATCH 2/4] Write tags to buckets created by stackit if specified in the commnd line argument --- pkg/stackit/packager/bucket.go | 46 +++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/pkg/stackit/packager/bucket.go b/pkg/stackit/packager/bucket.go index 846c1e2..a9c1832 100644 --- a/pkg/stackit/packager/bucket.go +++ b/pkg/stackit/packager/bucket.go @@ -2,6 +2,7 @@ package packager import ( "fmt" + "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" @@ -40,9 +41,6 @@ func (p *Packager) s3BucketName() (string, error) { if err, ok := err.(awserr.Error); ok { if err.Code() == s3.ErrCodeNoSuchBucket { - tags := getStackitTags() - fmt.Println(tags) - _, err := p.s3.CreateBucket(&s3.CreateBucketInput{Bucket: &bucketName}) if err != nil { return "", errors.Wrap(err, "creating s3 bucket") @@ -67,14 +65,50 @@ func (p *Packager) s3BucketName() (string, error) { } } + addTags := func() error { + tags := getStackitTags() + _, err := p.s3.PutBucketTagging(&s3.PutBucketTaggingInput{ + Bucket: &bucketName, + Tagging: &s3.Tagging{ + TagSet: tags, + }, + }) + return errors.Wrap(err, "adding tags on bucket") + } + + cTags, err := p.s3.GetBucketTagging(&s3.GetBucketTaggingInput{Bucket: &bucketName}) + if tagerror, ok := err.(awserr.Error); ok && tagerror.Code() == "NoSuchTagSet" { + err = addTags() + if err != nil { + return "", err + } + } + p.cachedBucketName = bucketName return bucketName, nil } -func getStackitTags() string { +func getStackitTags() []*s3.Tag { tags := viper.GetString("stackit-tags") if tags == "" { - return "" + return nil + } + + tagList := strings.Split(tags,",") + tagMap := make(map[string]string) + for _, pair := range tagList { + dict := strings.Split(pair, "=") + tagMap[dict[0]] = dict[1] } - return "loadsa tags" + + result := make([]*s3.Tag, 0, len(tagMap)) + for k, v := range tagMap { + var t = &s3.Tag{ + Key: aws.String(k), + Value: aws.String(v), + } + result = append(result, t) + } + + return result } From b159b106acaf531e5acf07676c6a903bb558b900 Mon Sep 17 00:00:00 2001 From: dev-matthewj Date: Fri, 17 Jan 2020 10:14:53 +1300 Subject: [PATCH 3/4] fix unused variable and add new flag to the README --- README.md | 3 +++ pkg/stackit/packager/bucket.go | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b90b9a0..4e1c290 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,9 @@ your stack in a different region. ## Additional Flags +* `--stackit-tags "key=val,key2=val2"` +If the s3 bucket stackit creates requires tags, you can add them with this flag. + TODO: Document these properly * `--service-role VAL` diff --git a/pkg/stackit/packager/bucket.go b/pkg/stackit/packager/bucket.go index a9c1832..9b17ad1 100644 --- a/pkg/stackit/packager/bucket.go +++ b/pkg/stackit/packager/bucket.go @@ -76,8 +76,8 @@ func (p *Packager) s3BucketName() (string, error) { return errors.Wrap(err, "adding tags on bucket") } - cTags, err := p.s3.GetBucketTagging(&s3.GetBucketTaggingInput{Bucket: &bucketName}) - if tagerror, ok := err.(awserr.Error); ok && tagerror.Code() == "NoSuchTagSet" { + _, getTagErr := p.s3.GetBucketTagging(&s3.GetBucketTaggingInput{Bucket: &bucketName}) + if tagError, ok := getTagErr.(awserr.Error); ok && tagError.Code() == "NoSuchTagSet" { err = addTags() if err != nil { return "", err From 23e78832e303e6a6825d12fa003254e953ba64be Mon Sep 17 00:00:00 2001 From: dev-matthewj Date: Fri, 17 Jan 2020 10:23:28 +1300 Subject: [PATCH 4/4] revert ws change --- pkg/stackit/packager/bucket.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/stackit/packager/bucket.go b/pkg/stackit/packager/bucket.go index 9b17ad1..319873b 100644 --- a/pkg/stackit/packager/bucket.go +++ b/pkg/stackit/packager/bucket.go @@ -40,7 +40,6 @@ func (p *Packager) s3BucketName() (string, error) { if err != nil { if err, ok := err.(awserr.Error); ok { if err.Code() == s3.ErrCodeNoSuchBucket { - _, err := p.s3.CreateBucket(&s3.CreateBucketInput{Bucket: &bucketName}) if err != nil { return "", errors.Wrap(err, "creating s3 bucket")