esxlib/cmd/vmctl/command_zone.go

81 lines
1.5 KiB
Go

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
}