github.com/henvic/wedeploycli@v1.7.6-0.20200319005353-3630f582f284/command/new/new.go (about) 1 package new 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 "github.com/henvic/wedeploycli/cmdflagsfromhost" 9 "github.com/henvic/wedeploycli/color" 10 "github.com/henvic/wedeploycli/command/canceled" 11 "github.com/henvic/wedeploycli/command/internal/we" 12 "github.com/henvic/wedeploycli/command/new/project" 13 "github.com/henvic/wedeploycli/command/new/service" 14 "github.com/henvic/wedeploycli/fancy" 15 16 "github.com/henvic/wedeploycli/isterm" 17 "github.com/spf13/cobra" 18 ) 19 20 var setupHost = cmdflagsfromhost.SetupHost{ 21 Pattern: cmdflagsfromhost.RegionPattern | cmdflagsfromhost.FullHostPattern, 22 23 Requires: cmdflagsfromhost.Requires{ 24 Auth: true, 25 }, 26 } 27 28 // NewCmd is used to create new projects/services 29 var NewCmd = &cobra.Command{ 30 Use: "new", 31 Short: "Create new project or install new service\n\t\t", 32 PreRunE: preRun, 33 RunE: newRun, 34 Args: cobra.NoArgs, 35 } 36 37 func preRun(cmd *cobra.Command, args []string) error { 38 return setupHost.Process(context.Background(), we.Context()) 39 } 40 41 func newRun(cmd *cobra.Command, args []string) error { 42 var region = setupHost.Region() 43 var projectID = setupHost.Project() 44 var serviceID = setupHost.Service() 45 46 if serviceID != "" && setupHost.Region() != "" { 47 return errors.New("cannot use --region on this") 48 } 49 50 if serviceID != "" { 51 return service.Run(projectID, serviceID, setupHost.ServiceDomain()) 52 } 53 54 if projectID != "" { 55 return project.Run(projectID, region) 56 } 57 58 if !isterm.Check() { 59 return cmd.Help() 60 } 61 62 var options = fancy.Options{} 63 options.Add("1", "Create a project") 64 options.Add("2", "Install a service") 65 options.Add("3", "Cancel") 66 67 q := fmt.Sprintf("Do you want to %s a new project or install a new service?", 68 color.Format(color.FgMagenta, color.Bold, "create")) 69 70 switch option, err := options.Ask(q); option { 71 case "1", "p", "project": 72 return project.Cmd.RunE(cmd, []string{}) 73 case "2", "s", "service": 74 if setupHost.Region() != "" { 75 return errors.New("cannot use --region on this") 76 } 77 78 return service.Cmd.RunE(cmd, []string{}) 79 case "3", "cancel": 80 return canceled.Skip() 81 default: 82 return err 83 } 84 } 85 86 func init() { 87 setupHost.Init(NewCmd) 88 89 NewCmd.AddCommand(project.Cmd) 90 NewCmd.AddCommand(service.Cmd) 91 }