Skip to content

Commit

Permalink
Fix Refactor Code
Browse files Browse the repository at this point in the history
  • Loading branch information
sofyan48 committed Mar 12, 2020
1 parent 49dc55d commit 840f0ba
Show file tree
Hide file tree
Showing 11 changed files with 336 additions and 226 deletions.
5 changes: 3 additions & 2 deletions cli/delete.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cli

import (
"github.com/sofyan48/maklo/utils/ssm"
"github.com/sofyan48/maklo/libs/cmd"
"github.com/urfave/cli"
)

Expand All @@ -24,7 +24,8 @@ func Deleted() cli.Command {
},
}
command.Action = func(c *cli.Context) error {
ssm.DeleteParameterByTemplate(Args.Path, Args.Type)
cmdHandler := cmd.CMDLibraryHandler()
cmdHandler.DeleteParameterByTemplate(Args.Path, Args.Type)
return nil
}
return command
Expand Down
5 changes: 3 additions & 2 deletions cli/generate.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cli

import (
"github.com/sofyan48/maklo/utils/ssm"
"github.com/sofyan48/maklo/libs/cmd"
"github.com/urfave/cli"
)

Expand All @@ -24,7 +24,8 @@ func Generate() cli.Command {
},
}
command.Action = func(c *cli.Context) error {
return ssm.GenerateByTemplates(Args.Path, Args.Type)
cmdHandler := cmd.CMDLibraryHandler()
return cmdHandler.GenerateByTemplates(Args.Path, Args.Type)
}
return command
}
8 changes: 5 additions & 3 deletions cli/generatePath.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cli

import (
"github.com/sofyan48/maklo/utils/ssm"
"github.com/sofyan48/maklo/libs/cmd"
"github.com/urfave/cli"
)

Expand Down Expand Up @@ -41,14 +41,16 @@ func GeneratePath() cli.Command {
},
}
command.Action = func(c *cli.Context) error {
cmdHandler := cmd.CMDLibraryHandler()

decrypt := false
if Args.Decryption != "" {
decrypt = true
}
if Args.Type != "" {
return ssm.GeneralParametersToEnvirontment(Args.Name, Args.Stage, Args.Path, decrypt)
return cmdHandler.GenerateParametersToEnvirontment(Args.Name, Args.Stage, Args.Path, decrypt)
}
return ssm.GeneralParametersByPath(Args.Name, Args.Stage, Args.Path, decrypt)
return cmdHandler.GenerateParametersByPath(Args.Name, Args.Stage, Args.Path, decrypt)
}

return command
Expand Down
5 changes: 3 additions & 2 deletions cli/insert.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cli

import (
"github.com/sofyan48/maklo/utils/ssm"
"github.com/sofyan48/maklo/libs/cmd"
"github.com/urfave/cli"
)

Expand Down Expand Up @@ -33,7 +33,8 @@ func InsertParameter() cli.Command {
if Args.OverWrites != "" {
overwrites = true
}
return ssm.InsertParametersByPath(Args.TemplatePath, Args.Type, overwrites)
cmdHandler := cmd.CMDLibraryHandler()
return cmdHandler.InsertParametersByPath(Args.TemplatePath, Args.Type, overwrites)
}

return command
Expand Down
12 changes: 12 additions & 0 deletions entity/entity.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package entity

import "time"

// InsertDataModels ...
type InsertDataModels struct {
Path string `json:"path" yaml:"path"`
Expand All @@ -13,3 +15,13 @@ type TemplatesModels struct {
Name string `json:"name" yaml:"name"`
Parameters []InsertDataModels `json:"parameters" yaml:"parameters"`
}

// GenerateOutputs ...
type GenerateOutputs struct {
Name string
Value string
Type string
Arn string
LastModified *time.Time
Version int64
}
15 changes: 14 additions & 1 deletion utils/aws/aws.go → libs/aws/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@ import (
"github.com/aws/aws-sdk-go/service/ssm"
)

type AWSLibrary struct{}

// AWSLibraryHandler ...
func AWSLibraryHandler() *AWSLibrary {
return &AWSLibrary{}
}

// AWSLibraryInterface ...
type AWSLibraryInterface interface {
GetSystemManagerStore() *ssm.SSM
}

func sessions() *aws.Config {
creds := credentials.NewStaticCredentials(
os.Getenv("AWS_ACCESS_KEY"),
Expand All @@ -18,7 +30,8 @@ func sessions() *aws.Config {
return cfgAws
}

func GetSSM() *ssm.SSM {
// GetSystemManagerStore ...
func (aws *AWSLibrary) GetSystemManagerStore() *ssm.SSM {
cfg := sessions()
return ssm.New(session.New(), cfg)
}
94 changes: 94 additions & 0 deletions libs/cmd/ssm.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package cmd

import (
"github.com/sofyan48/maklo/entity"
"github.com/sofyan48/maklo/libs/ssmlib"
"github.com/sofyan48/maklo/libs/tool"
)

// CMDLibrary ...
type CMDLibrary struct {
SSMLib ssmlib.SSManagerInterface
Tools tool.ToolsInterface
}

// CMDLibraryHandler ...
func CMDLibraryHandler() *CMDLibrary {
return &CMDLibrary{
SSMLib: ssmlib.SSManagerHandler(),
Tools: tool.ToolsHandler(),
}
}

// CMDLibraryInterface ...
type CMDLibraryInterface interface {
InsertParametersByPath(path, types string, overwrite bool) error
GenerateByTemplates(path, types string) error
DeleteParameterByTemplate(path, types string)
GenerateParametersByPath(appname, stage, path string, decryption bool) error
GenerateParametersToEnvirontment(appname, stage, path string, decryption bool) error
}

// InsertParametersByPath ...
func (cmd *CMDLibrary) InsertParametersByPath(path, types string, overwrite bool) error {
data := &entity.TemplatesModels{}
if types == "json" {
data, _ = cmd.Tools.ParsingJSON(path)
} else {
data, _ = cmd.Tools.ParsingYAML(path)
}
cmd.SSMLib.InsertParameter(data.Parameters, overwrite)
return nil
}

// GenerateByTemplates ...
func (cmd *CMDLibrary) GenerateByTemplates(path, types string) error {
data := &entity.TemplatesModels{}
if types == "json" {
data, _ = cmd.Tools.ParsingJSON(path)
} else {
data, _ = cmd.Tools.ParsingYAML(path)
}
file := cmd.Tools.Storage(data.Stage, data.Name)
for _, i := range data.Parameters {
cmd.Tools.GenerateAWK(i.Path, i.IsEncrypt, file)
}
return nil
}

// DeleteParameterByTemplate ...
func (cmd *CMDLibrary) DeleteParameterByTemplate(path, types string) {
data := &entity.TemplatesModels{}
if types == "json" {
data, _ = cmd.Tools.ParsingJSON(path)
} else {
data, _ = cmd.Tools.ParsingYAML(path)
}
cmd.SSMLib.DeleteParameter(data.Parameters)
}

// GenerateParametersByPath ...
func (cmd *CMDLibrary) GenerateParametersByPath(appname, stage, path string, decryption bool) error {
file := cmd.Tools.Storage(stage, appname)
data, err := cmd.SSMLib.GenerateParameters(path, stage, appname, decryption)
if err != nil {
return err
}
for _, i := range data {
cmd.Tools.GenerateAWK(i.Name, decryption, file)
}
return nil
}

// GenerateParametersToEnvirontment ...
func (cmd *CMDLibrary) GenerateParametersToEnvirontment(appname, stage, path string, decryption bool) error {
file := cmd.Tools.Storage(stage, appname)
data, err := cmd.SSMLib.GenerateParameters(path, stage, appname, decryption)
if err != nil {
return err
}
for _, i := range data {
cmd.Tools.GenerateDotEnvirontment(i.Name, file)
}
return nil
}
90 changes: 90 additions & 0 deletions libs/ssmlib/ssm.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package ssmlib

import (
"log"

"github.com/aws/aws-sdk-go/service/ssm"
"github.com/sofyan48/maklo/entity"
"github.com/sofyan48/maklo/libs/aws"
"github.com/sofyan48/maklo/libs/tool"
)

// SSManager ...
type SSManager struct {
AWS aws.AWSLibraryInterface
Tools tool.ToolsInterface
}

// SSManagerHandler ...
func SSManagerHandler() *SSManager {
return &SSManager{
AWS: aws.AWSLibraryHandler(),
Tools: tool.ToolsHandler(),
}
}

// SSManagerInterface ...
type SSManagerInterface interface {
InsertParameter(dataJSON []entity.InsertDataModels, overwrite bool)
DeleteParameter(dataJSON []entity.InsertDataModels)
GenerateParameters(path, stage, appname string, decryption bool) ([]entity.GenerateOutputs, error)
}

// GenerateParameters ...
func (ssmtool *SSManager) GenerateParameters(path, stage, appname string, decryption bool) ([]entity.GenerateOutputs, error) {
svc := ssmtool.AWS.GetSystemManagerStore()
results := []entity.GenerateOutputs{}
input := &ssm.GetParametersByPathInput{}
input.SetPath(path)
input.SetWithDecryption(decryption)
data, err := svc.GetParametersByPath(input)
if err != nil {
return results, err
}
for _, i := range data.Parameters {
dataTemps := entity.GenerateOutputs{}
dataTemps.Name = *i.Name
dataTemps.Value = *i.Value
dataTemps.Version = *i.Version
dataTemps.Type = *i.Type
dataTemps.LastModified = *&i.LastModifiedDate
results = append(results, dataTemps)
}
return results, nil
}

// InsertParameter ...
func (ssmtool *SSManager) InsertParameter(dataJSON []entity.InsertDataModels, overwrite bool) {
svc := ssmtool.AWS.GetSystemManagerStore()
for _, i := range dataJSON {
inputFormat := &ssm.PutParameterInput{}
inputFormat.SetName(i.Path)
inputFormat.SetValue(i.Value)
inputFormat.SetOverwrite(overwrite)
if i.IsEncrypt {
inputFormat.SetType("SecureString")
} else {
inputFormat.SetType("String")
}
result, err := svc.PutParameter(inputFormat)
if err != nil {
log.Println("Not Uploaded Parameter: ", err)
}
log.Println("Uploaded Parameter: ", result)
}
}

// DeleteParameter ..
func (ssmtool *SSManager) DeleteParameter(dataJSON []entity.InsertDataModels) {
svc := ssmtool.AWS.GetSystemManagerStore()
for _, i := range dataJSON {
inputFormat := &ssm.DeleteParameterInput{}
inputFormat.SetName(i.Path)
result, err := svc.DeleteParameter(inputFormat)
if err != nil {
log.Println("Not Deleted Parameter: ", err)
}
log.Println("Deleted Parameter: ", result)
}

}
Loading

0 comments on commit 840f0ba

Please sign in to comment.