package internal import ( "fmt" "os" "strings" "github.com/AlecAivazis/survey/v2" "github.com/urfave/cli/v2" ) // EnsureServerProvider ensures a 3rd party server provider is chosen. func EnsureServerProvider() error { if ServerProvider == "" && !NoInput { prompt := &survey.Select{ Message: "Select server provider", Options: []string{"capsul", "hetzner-cloud"}, } if err := survey.AskOne(prompt, &ServerProvider); err != nil { return err } } if ServerProvider == "" { return fmt.Errorf("missing server provider?") } return nil } // EnsureNewCapsulVPSFlags ensure all flags are present. func EnsureNewCapsulVPSFlags(c *cli.Context) error { if CapsulName == "" && !NoInput { prompt := &survey.Input{ Message: "specify capsul name", } if err := survey.AskOne(prompt, &CapsulName); err != nil { return err } } if !NoInput { prompt := &survey.Input{ Message: "specify capsul instance URL", Default: CapsulInstanceURL, } if err := survey.AskOne(prompt, &CapsulInstanceURL); err != nil { return err } } if !NoInput { prompt := &survey.Input{ Message: "specify capsul type", Default: CapsulType, } if err := survey.AskOne(prompt, &CapsulType); err != nil { return err } } if !NoInput { prompt := &survey.Input{ Message: "specify capsul image", Default: CapsulImage, } if err := survey.AskOne(prompt, &CapsulImage); err != nil { return err } } if len(CapsulSSHKeys.Value()) == 0 && !NoInput { var sshKeys string prompt := &survey.Input{ Message: "specify capsul SSH keys (e.g. me@foo.com)", Default: "", } if err := survey.AskOne(prompt, &CapsulSSHKeys); err != nil { return err } CapsulSSHKeys = *cli.NewStringSlice(strings.Split(sshKeys, ",")...) } if CapsulAPIToken == "" && !NoInput { token, ok := os.LookupEnv("CAPSUL_TOKEN") if !ok { prompt := &survey.Input{ Message: "specify capsul API token", } if err := survey.AskOne(prompt, &CapsulAPIToken); err != nil { return err } } else { CapsulAPIToken = token } } if CapsulName == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing capsul name?")) } if CapsulInstanceURL == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing capsul instance url?")) } if CapsulType == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing capsul type?")) } if CapsulImage == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing capsul image?")) } if len(CapsulSSHKeys.Value()) == 0 { ShowSubcommandHelpAndError(c, fmt.Errorf("missing capsul ssh keys?")) } if CapsulAPIToken == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing capsul API token?")) } return nil } // EnsureNewHetznerCloudVPSFlags ensure all flags are present. func EnsureNewHetznerCloudVPSFlags(c *cli.Context) error { if HetznerCloudName == "" && !NoInput { prompt := &survey.Input{ Message: "specify hetzner cloud VPS name", } if err := survey.AskOne(prompt, &HetznerCloudName); err != nil { return err } } if !NoInput { prompt := &survey.Input{ Message: "specify hetzner cloud VPS type", Default: HetznerCloudType, } if err := survey.AskOne(prompt, &HetznerCloudType); err != nil { return err } } if !NoInput { prompt := &survey.Input{ Message: "specify hetzner cloud VPS image", Default: HetznerCloudImage, } if err := survey.AskOne(prompt, &HetznerCloudImage); err != nil { return err } } if len(HetznerCloudSSHKeys.Value()) == 0 && !NoInput { var sshKeys string prompt := &survey.Input{ Message: "specify hetzner cloud SSH keys (e.g. me@foo.com)", Default: "", } if err := survey.AskOne(prompt, &sshKeys); err != nil { return err } HetznerCloudSSHKeys = *cli.NewStringSlice(strings.Split(sshKeys, ",")...) } if !NoInput { prompt := &survey.Input{ Message: "specify hetzner cloud VPS location", Default: HetznerCloudLocation, } if err := survey.AskOne(prompt, &HetznerCloudLocation); err != nil { return err } } if HetznerCloudAPIToken == "" && !NoInput { token, ok := os.LookupEnv("HCLOUD_TOKEN") if !ok { prompt := &survey.Input{ Message: "specify hetzner cloud API token", } if err := survey.AskOne(prompt, &HetznerCloudAPIToken); err != nil { return err } } else { HetznerCloudAPIToken = token } } if HetznerCloudName == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing hetzner cloud VPS name?")) } if HetznerCloudType == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing hetzner cloud VPS type?")) } if HetznerCloudImage == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing hetzner cloud image?")) } if len(HetznerCloudSSHKeys.Value()) == 0 { ShowSubcommandHelpAndError(c, fmt.Errorf("missing hetzner cloud ssh keys?")) } if HetznerCloudLocation == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing hetzner cloud VPS location?")) } if HetznerCloudAPIToken == "" { ShowSubcommandHelpAndError(c, fmt.Errorf("missing hetzner cloud API token?")) } return nil }