Skip to content

Commit

Permalink
Docs and command fixups
Browse files Browse the repository at this point in the history
  • Loading branch information
codepope committed Sep 23, 2020
1 parent 9a48294 commit 835806d
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 36 deletions.
66 changes: 45 additions & 21 deletions cmd/dns.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"os"
"strconv"

"github.com/AlecAivazis/survey/v2"
"github.com/olekukonko/tablewriter"
"github.com/spf13/cobra"
"github.com/superfly/flyctl/cmdctx"
Expand All @@ -24,11 +23,15 @@ func newDNSCommand() *Command {
recordsExportStrings := docstrings.Get("dns-records.export")
recordsExportCmd := BuildCommandKS(cmd, runRecordsExport, recordsExportStrings, os.Stdout, requireSession)
recordsExportCmd.Args = cobra.MinimumNArgs(1)
recordsExportCmd.Args = cobra.MaximumNArgs(2)
recordsExportCmd.Args = cobra.MaximumNArgs(3)
recordsExportCmd.AddBoolFlag(BoolFlagOpts{
Name: "overwrite",
})

recordsImportStrings := docstrings.Get("dns-records.import")
recordsImportCmd := BuildCommandKS(cmd, runRecordsImport, recordsImportStrings, os.Stdout, requireSession)
recordsImportCmd.Args = cobra.MaximumNArgs(3)
recordsImportCmd.Args = cobra.MinimumNArgs(1)

return cmd
}
Expand All @@ -49,7 +52,15 @@ func runRecordsList(ctx *cmdctx.CmdContext) error {
}

table := tablewriter.NewWriter(ctx.Out)
table.SetAutoWrapText(false)
table.SetAutoWrapText(true)
table.SetReflowDuringAutoWrap(true)
table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetNoWhiteSpace(true)
table.SetTablePadding(" ")
table.SetCenterSeparator("")
table.SetColumnSeparator("")
table.SetRowSeparator("")
table.SetHeader([]string{"FQDN", "TTL", "Type", "Content"})

for _, record := range records {
Expand Down Expand Up @@ -77,20 +88,11 @@ func runRecordsExport(ctx *cmdctx.CmdContext) error {
if len(ctx.Args) == 1 {
fmt.Println(records)
} else {
var filename string

validateFile := func(val interface{}) error {
_, err := os.Stat(val.(string))
if err == nil {
return fmt.Errorf("File %s already exists", val.(string))
}
return nil
}

err := survey.AskOne(&survey.Input{Message: "Export filename:"}, &filename, survey.WithValidator(validateFile))
var filename = ctx.Args[1]

if err != nil {
return err
_, err := os.Stat(filename)
if err == nil {
return fmt.Errorf("File %s already exists", filename)
}

err = ioutil.WriteFile(filename, []byte(records), 0644)
Expand All @@ -106,24 +108,46 @@ func runRecordsExport(ctx *cmdctx.CmdContext) error {

func runRecordsImport(ctx *cmdctx.CmdContext) error {
name := ctx.Args[0]
filename := ctx.Args[1]
var filename string

if len(ctx.Args) == 1 {
// One arg, use stdin
filename = "-"
} else {
filename = ctx.Args[1]
}

domain, err := ctx.Client.API().GetDomain(name)
if err != nil {
return err
}

data, err := ioutil.ReadFile(filename)
if err != nil {
return err
var data []byte

if filename != "-" {
data, err = ioutil.ReadFile(filename)
if err != nil {
return err
}
} else {
data, err = ioutil.ReadAll(os.Stdin)
if err != nil {
return err
}
}

warnings, changes, err := ctx.Client.API().ImportDNSRecords(domain.ID, string(data))
if err != nil {
return err
}

fmt.Println("Zonefile import report")
fmt.Printf("Zonefile import report for %s\n", domain.Name)

if filename == "-" {
fmt.Printf("Imported from stdin\n")
} else {
fmt.Printf("Imported from %s\n", filename)
}

fmt.Printf("%d warnings\n", len(warnings))
for _, warning := range warnings {
Expand Down
10 changes: 6 additions & 4 deletions docstrings/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,14 @@ from the Fly platform.`,
`Manage DNS records within a domain`,
}
case "dns-records.export":
return KeyStrings{"export <domain>", "Export DNS records",
`Export DNS records`,
return KeyStrings{"export <domain> [<filename>]", "Export DNS records",
`Export DNS records. Will write to a file if a filename is given, otherwise
writers to StdOut.`,
}
case "dns-records.import":
return KeyStrings{"import <domain> <path>", "Import DNS records",
`Import DNS records`,
return KeyStrings{"import <domain> [<filename>]", "Import DNS records",
`Import DNS records. Will import from a file is a filename is given, otherwise
imports from StdIn.`,
}
case "dns-records.list":
return KeyStrings{"list <domain>", "List DNS records",
Expand Down
24 changes: 13 additions & 11 deletions helpgen/flyctlhelp.toml
Original file line number Diff line number Diff line change
Expand Up @@ -300,22 +300,24 @@ Use flyctl monitor to restart monitoring deployment progress
[dns-records]
usage="dns-records"
shortHelp="Manage DNS records"
longHelp="Manage DNS records within a domain"
longHelp="""Manage DNS records within a domain"""

[dns-records.list]
usage="list <domain>"
shortHelp="List DNS records"
longHelp="List DNS records within a domain"
longHelp="""List DNS records within a domain"""

[dns-records.export]
usage="export <domain>"
usage="export <domain> [<filename>]"
shortHelp="Export DNS records"
longHelp="Export DNS records"
longHelp="""Export DNS records. Will write to a file if a filename is given, otherwise
writers to StdOut."""

[dns-records.import]
usage="import <domain> <path>"
usage="import <domain> [<filename>]"
shortHelp="Import DNS records"
longHelp="Import DNS records"
longHelp="""Import DNS records. Will import from a file is a filename is given, otherwise
imports from StdIn."""

[docs]
usage="docs"
Expand All @@ -327,27 +329,27 @@ browser to view the content.
[domains]
usage="domains"
shortHelp="Manage domains"
longHelp="Manage domains"
longHelp="""Manage domains"""

[domains.add]
usage="add [org] [name]"
shortHelp="Add a domain"
longHelp="Add a domain to an organization"
longHelp="""Add a domain to an organization"""

[domains.list]
usage="list [<org>]"
shortHelp="List domains"
longHelp="List domains for an organization"
longHelp="""List domains for an organization"""

[domains.register]
usage="register [org] [name]"
shortHelp="Register a domain"
longHelp="Register a new domain in an organization"
longHelp="""Register a new domain in an organization"""

[domains.show]
usage="show <domain>"
shortHelp="Show domain"
longHelp="Show information about a domain"
longHelp="""Show information about a domain"""

[history]
usage="history"
Expand Down

0 comments on commit 835806d

Please sign in to comment.