package record import ( "context" "fmt" "strconv" "coopcloud.tech/abra/cli/internal" gandiPkg "coopcloud.tech/abra/pkg/dns/gandi" "coopcloud.tech/abra/pkg/formatter" "github.com/libdns/gandi" "github.com/sirupsen/logrus" "github.com/urfave/cli" ) // RecordListCommand lists domains. var RecordListCommand = cli.Command{ Name: "list", Usage: "List domain name records", Aliases: []string{"ls"}, ArgsUsage: "", Flags: []cli.Flag{ internal.DebugFlag, internal.NoInputFlag, internal.DNSProviderFlag, }, Before: internal.SubCommandBefore, Description: ` This command lists all domain name records managed by a 3rd party provider for a specific zone. You must specify a zone (e.g. example.com) under which your domain name records are listed. This zone must already be created on your provider account. `, Action: func(c *cli.Context) error { if err := internal.EnsureDNSProvider(); err != nil { logrus.Fatal(err) } zone, err := internal.EnsureZoneArgument(c) if err != nil { logrus.Fatal(err) } var provider gandi.Provider switch internal.DNSProvider { case "gandi": provider, err = gandiPkg.New() if err != nil { logrus.Fatal(err) } default: logrus.Fatalf("%s is not a supported DNS provider", internal.DNSProvider) } records, err := provider.GetRecords(context.Background(), zone) if err != nil { logrus.Fatal(err) } tableCol := []string{"type", "name", "value", "TTL", "priority"} table := formatter.CreateTable(tableCol) for _, record := range records { value := record.Value if len(record.Value) > 30 { value = fmt.Sprintf("%s...", record.Value[:30]) } table.Append([]string{ record.Type, record.Name, value, record.TTL.String(), strconv.Itoa(record.Priority), }) } table.Render() return nil }, }