81 lines
1.5 KiB
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
|
|
}
|