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  }