Skip to content

Commit

Permalink
Merge pull request #141 from jedipunkz/refactor_login_cmd
Browse files Browse the repository at this point in the history
Refactor login cmd
  • Loading branch information
jedipunkz authored Nov 2, 2023
2 parents 6e3dc9d + 6e7709e commit acc7fee
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 109 deletions.
4 changes: 2 additions & 2 deletions cmd/cmd_types.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cmd

// ExecECS is struct for login info to ECS Container
type ExecECS struct {
type ECSInfo struct {
Cluster string
Service string
Task string
Expand All @@ -12,4 +12,4 @@ type ExecECS struct {
}

// ExecECSs is struct for list of ExecECS
type ExecECSs []ExecECS
type ECSInfos []ECSInfo
62 changes: 32 additions & 30 deletions cmd/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,38 +23,40 @@ var execCmd = &cobra.Command{
Short: "execute ecs subcommand",
Long: `a subcommand for ecs execute to login ecs container on task.
with parameters where ecs cluster, container name and command.`,
Run: func(cmd *cobra.Command, args []string) {
var execECS ExecECS

e := myecs.NewEcs(session.NewSessionWithOptions(session.Options{
Config: aws.Config{
CredentialsChainVerboseErrors: aws.Bool(true),
Region: aws.String(setFlags.region),
},
}))

if err := e.GetTaskDefinition(setFlags.cluster, setFlags.service); err != nil {
log.Fatal(err)
}

execECS.Cluster = setFlags.cluster
execECS.Service = setFlags.service
execECS.Container = setFlags.container
execECS.Command = setFlags.command

if err := e.GetTask(execECS.Cluster, e.TaskDefinition); err != nil {
log.Fatal(err)
}

execECS.Task = *e.Task.TaskArns[0]

if err := execECS.exec(e); err != nil {
log.Fatal(err)
}
},
Run: runExecCmd,
}

func (l *ExecECS) exec(e *myecs.ECS) error {
func runExecCmd(cmd *cobra.Command, args []string) {
var ecsInfo ECSInfo

e := myecs.NewEcs(session.NewSessionWithOptions(session.Options{
Config: aws.Config{
CredentialsChainVerboseErrors: aws.Bool(true),
Region: aws.String(setFlags.region),
},
}))

if err := e.GetTaskDefinition(setFlags.cluster, setFlags.service); err != nil {
log.Fatal(err)
}

ecsInfo.Cluster = setFlags.cluster
ecsInfo.Service = setFlags.service
ecsInfo.Container = setFlags.container
ecsInfo.Command = setFlags.command

if err := e.GetTask(ecsInfo.Cluster, e.TaskDefinition); err != nil {
log.Fatal(err)
}

ecsInfo.Task = *e.Task.TaskArns[0]

if err := ecsInfo.exec(e); err != nil {
log.Fatal(err)
}
}

func (l *ECSInfo) exec(e *myecs.ECS) error {
in := myecs.ExecuteCommandInput{}
in.Cluster = l.Cluster
in.Container = l.Container
Expand Down
136 changes: 59 additions & 77 deletions cmd/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,95 +26,77 @@ var loginSetFlags struct {
var loginCmd = &cobra.Command{
Use: "login",
Short: "login cluster, service",
Run: func(cmd *cobra.Command, args []string) {
var execECS ExecECS
var execECSs ExecECSs

e := myecs.NewEcs(session.NewSessionWithOptions(session.Options{
Config: aws.Config{
CredentialsChainVerboseErrors: aws.Bool(true),
Region: aws.String(loginSetFlags.region),
},
}))
Run: runLoginCmd,
}

execECSs = execECS.listECSs(e)

idx, err := fuzzyfinder.FindMulti(
execECSs,
func(i int) string {
return execECSs[i].Cluster + " " +
execECSs[i].Service + " " +
execECSs[i].Container
},
fuzzyfinder.WithPreviewWindow(func(i, w, h int) string {
if i == -1 {
return ""
}
return fmt.Sprintf(
"Cluster: %s\nService: %s\nContainer: %s\nCommand: %s",
execECSs[i].Cluster,
execECSs[i].Service,
execECSs[i].Container,
execECS.Shell)
}))
if err != nil {
log.Fatal(err)
}
func runLoginCmd(cmd *cobra.Command, args []string) {
var ecsInfo ECSInfo
var ecsInfos ECSInfos

e := myecs.NewEcs(session.NewSessionWithOptions(session.Options{
Config: aws.Config{
CredentialsChainVerboseErrors: aws.Bool(true),
Region: aws.String(loginSetFlags.region),
},
}))

ecsInfos = ecsInfo.fetchListECSs(e)

idx, err := fuzzyfinder.FindMulti(
ecsInfos,
func(i int) string {
return ecsInfos[i].Cluster + " " +
ecsInfos[i].Service + " " +
ecsInfos[i].Container
},
fuzzyfinder.WithPreviewWindow(func(i, w, h int) string {
if i == -1 {
return ""
}
return fmt.Sprintf(
"Cluster: %s\nService: %s\nContainer: %s\nCommand: %s",
ecsInfos[i].Cluster,
ecsInfos[i].Service,
ecsInfos[i].Container,
ecsInfo.Shell)
}))
if err != nil {
log.Fatal(err)
}

execECS.Cluster = execECSs[idx[0]].Cluster
execECS.Service = execECSs[idx[0]].Service
execECS.Container = execECSs[idx[0]].Container
ecsInfo.Cluster = ecsInfos[idx[0]].Cluster
ecsInfo.Service = ecsInfos[idx[0]].Service
ecsInfo.Container = ecsInfos[idx[0]].Container

if err := e.GetTask(
execECSs[idx[0]].Cluster,
execECSs[idx[0]].TaskDefinition); err != nil {
log.Fatal(err)
}
if err := e.GetTask(
ecsInfos[idx[0]].Cluster,
ecsInfos[idx[0]].TaskDefinition); err != nil {
log.Fatal(err)
}

execECS.Task = *e.Task.TaskArns[0]
ecsInfo.Task = *e.Task.TaskArns[0]

if err = execECS.login(e); err != nil {
log.Fatal(err)
}
},
if err = ecsInfo.login(e); err != nil {
log.Fatal(err)
}
}

func (l *ExecECS) listECSs(e *myecs.ECS) ExecECSs {
var execECSs ExecECSs
func (l *ECSInfo) fetchListECSs(e *myecs.ECS) ECSInfos {
var ecsInfos ECSInfos

clusters := []string{loginSetFlags.cluster}
if loginSetFlags.cluster == "" {
if err := e.ListClusters(); err != nil {
log.Fatal(err)
}
clusters = e.Clusters
}

for _, cluster := range e.Clusters {
if err := e.ListServices(cluster); err != nil {
log.Fatal(err)
}
l.Cluster = cluster
for _, service := range e.Services {
if err := e.GetTaskDefinition(l.Cluster, service); err != nil {
log.Fatal(err)
}

if err := e.GetContainerName(e.TaskDefinition); err != nil {
log.Fatal(err)
}

for i := range e.Containers {
l.Service = service
l.TaskDefinition = e.TaskDefinition
l.Container = e.Containers[i]
execECSs = append(execECSs, *l)
}
e.Containers = nil
}
}
} else {
if err := e.ListServices(loginSetFlags.cluster); err != nil {
for _, cluster := range clusters {
if err := e.ListServices(cluster); err != nil {
log.Fatal(err)
}
l.Cluster = loginSetFlags.cluster
l.Cluster = cluster
for _, service := range e.Services {
if err := e.GetTaskDefinition(l.Cluster, service); err != nil {
log.Fatal(err)
Expand All @@ -128,15 +110,15 @@ func (l *ExecECS) listECSs(e *myecs.ECS) ExecECSs {
l.Service = service
l.TaskDefinition = e.TaskDefinition
l.Container = e.Containers[i]
execECSs = append(execECSs, *l)
ecsInfos = append(ecsInfos, *l)
}
e.Containers = nil
}
}
return execECSs
return ecsInfos
}

func (l *ExecECS) login(e *myecs.ECS) error {
func (l *ECSInfo) login(e *myecs.ECS) error {
in := myecs.ExecuteCommandInput{}
in.Cluster = l.Cluster
in.Container = l.Container
Expand Down

0 comments on commit acc7fee

Please sign in to comment.