From 287081f65483e9535af0ad1a18095d0494586637 Mon Sep 17 00:00:00 2001 From: Tomokazu HIRAI Date: Sat, 5 Oct 2024 20:00:31 +0900 Subject: [PATCH 1/2] add list subcommand --- cmd/list.go | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 cmd/list.go diff --git a/cmd/list.go b/cmd/list.go new file mode 100644 index 0000000..2b66bbc --- /dev/null +++ b/cmd/list.go @@ -0,0 +1,116 @@ +package cmd + +import ( + "context" + "os" + + "github.com/aws/aws-sdk-go-v2/config" + myecs "github.com/jedipunkz/miniecs/internal/pkg/aws/ecs" + "github.com/olekukonko/tablewriter" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +var listSetFlags struct { + region string + cluster string + shell string +} + +var listCmd = &cobra.Command{ + Use: "list", + Short: "list clusters, services", + Run: runlistCmd, +} + +func runlistCmd(cmd *cobra.Command, args []string) { + ctx := context.Background() + + // var ecsResources []myecs.ECSResource + + cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(loginSetFlags.region)) + if err != nil { + log.Fatalf("unable to load SDK config, %v", err) + } + + if os.Getenv("AWS_PROFILE") == "" { + log.Fatal("set AWS_PROFILE environment variable to use") + } + + e := myecs.NewEcs(cfg, loginSetFlags.region) + if e == nil { + log.Fatal("failed to initialize ECS client") + } + + err = e.ListClusters(ctx) + if err != nil { + log.Fatal(err) + } + + ecsTable, err := listECSTable(ctx, e) + if err != nil { + log.Fatal(err) + } + + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{ + "Cluster", + "Service", + "Task Definition", + "Container"}) + // table.SetFooter([]string{"Total", "", "", strconv.Itoa(len(ecsTable))}) // Add Footer + table.SetBorder(true) + table.AppendBulk(ecsTable) + table.Render() +} + +func listECSTable(ctx context.Context, e *myecs.ECSResource) ([][]string, error) { + var ecsTable [][]string + + if listSetFlags.cluster == "" { + for _, cluster := range e.Clusters { + if err := e.ListServices(ctx, cluster.ClusterName); err != nil { + return nil, err + } + for _, service := range e.Services { + if err := e.GetTasks(ctx, cluster.ClusterName, service.ServiceName); err != nil { + return nil, err + } + + if err := e.ListContainers(ctx, e.Tasks[0].TaskDefinition); err != nil { + return nil, err + } + + for _, container := range e.Containers { + ecsTable = append(ecsTable, []string{cluster.ClusterName, service.ServiceName, e.Tasks[0].TaskDefinition, container.ContainerName}) + } + } + } + } else { + for _, service := range e.Services { + if err := e.GetTasks(ctx, listSetFlags.cluster, service.ServiceName); err != nil { + return nil, err + } + + if err := e.ListContainers(ctx, e.Tasks[0].TaskDefinition); err != nil { + return nil, err + } + + for _, container := range e.Containers { + ecsTable = append(ecsTable, []string{listSetFlags.cluster, service.ServiceName, e.Tasks[0].TaskDefinition, container.ContainerName}) + } + } + } + return ecsTable, nil +} + +func init() { + rootCmd.AddCommand(loginCmd) + loginCmd.Flags().StringVarP( + &loginSetFlags.region, "region", "", "", "Region Name") + if err := loginCmd.MarkFlagRequired("region"); err != nil { + log.Fatal(err) + } + loginCmd.Flags().StringVarP( + &loginSetFlags.cluster, "cluster", "", "", "ECS Cluster Name") +} From a3f42d030dfed5c244bd1abb36ccaa7b7a4b073f Mon Sep 17 00:00:00 2001 From: Tomokazu HIRAI Date: Sat, 5 Oct 2024 20:05:16 +0900 Subject: [PATCH 2/2] fix --- cmd/list.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/list.go b/cmd/list.go index 2b66bbc..d370e06 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -105,12 +105,12 @@ func listECSTable(ctx context.Context, e *myecs.ECSResource) ([][]string, error) } func init() { - rootCmd.AddCommand(loginCmd) - loginCmd.Flags().StringVarP( - &loginSetFlags.region, "region", "", "", "Region Name") - if err := loginCmd.MarkFlagRequired("region"); err != nil { + rootCmd.AddCommand(listCmd) + listCmd.Flags().StringVarP( + &listSetFlags.region, "region", "", "", "Region Name") + if err := listCmd.MarkFlagRequired("region"); err != nil { log.Fatal(err) } - loginCmd.Flags().StringVarP( - &loginSetFlags.cluster, "cluster", "", "", "ECS Cluster Name") + listCmd.Flags().StringVarP( + &listSetFlags.cluster, "cluster", "", "", "ECS Cluster Name") }