package main import ( "context" "os" "esxlib/api/cloud" "esxlib/pkg/pprint" "github.com/urfave/cli/v2" ) var ( zoneIdFlag = cli.StringFlag{ Name: "zone.id", Value: "", Required: true, Usage: "The zone id", } ) var zoneCommands = []*cli.Command{ { Name: "list", Aliases: []string{"ls", "list"}, Usage: "list zones", Description: "list zones", Flags: []cli.Flag{}, Action: zoneCommandList, }, { Name: "slugs", Aliases: []string{"slugs"}, Usage: "Lists slugs in a zone", Description: "Lists slugs in a zone", Flags: []cli.Flag{ &zoneIdFlag, }, Action: zoneCommandSlugs, }, } func zoneCommandList(ctx *cli.Context) error { client := mustGetClient(ctx) resp, err := client.ZonesList(context.Background(), &cloud.ZonesListRequest{}) if err != nil { return err } out := pprint.NewPrinter("human", os.Stdout) out.Headers("ID", "Name") for _, zone := range resp.Zones { out.Fields(zone.Id, zone.Name) } out.Flush() return nil } func zoneCommandSlugs(ctx *cli.Context) error { client := mustGetClient(ctx) resp, err := client.VMListSlugs(context.Background(), &cloud.VMListSlugsRequest{ ZoneId: ctx.String(zoneIdFlag.Name), }) if err != nil { return err } out := pprint.NewPrinter("human", os.Stdout) out.Headers("ID", "Name", "Cpu", "memory", "Disk") for _, item := range resp.Slugs { out.Fields(item.Id, item.Name, item.CpuCount, item.MemoryMb, item.DiskGb) } out.Flush() return nil }