From c701fd195a629b6648d762542f124bb69d002e26 Mon Sep 17 00:00:00 2001 From: "jan.hajek@zerops.io" Date: Sat, 9 Mar 2024 22:22:56 +0100 Subject: [PATCH 1/4] commands refactor --- src/cmd/project.go | 2 - src/cmd/root.go | 137 ++++++++++++++++-- src/cmd/status.go | 15 -- src/cmd/statusInfo.go | 55 ------- src/cmd/version.go | 2 +- src/cmd/vpn.go | 4 +- src/cmd/{vpnDisconnect.go => vpnDown.go} | 10 +- src/cmd/{vpnConnect.go => vpnUp.go} | 10 +- ...ilderBuildCobraCmd.go => buildCobraCmd.go} | 10 +- src/cmdBuilder/cmd.go | 6 + src/cmdBuilder/cmdBuilder.go | 13 -- ...ilderCreateRunFunc.go => createRunFunc.go} | 42 +++--- ...eRunFunc_test.go => createRunFunc_test.go} | 0 ...derExecuteRootCmd.go => executeRootCmd.go} | 62 +------- src/entity/project.go | 3 +- src/entity/repository/appVersion.go | 84 +++++------ src/entity/repository/container.go | 29 ++-- src/entity/repository/project.go | 31 ++-- src/entity/repository/service.go | 20 ++- src/i18n/en.go | 18 ++- src/i18n/i18n.go | 18 ++- src/uxHelpers/project.go | 5 +- .../handler_get_projects_by_client.go | 98 ------------- .../handler_get_service_stacks_by_project.go | 105 -------------- 24 files changed, 302 insertions(+), 477 deletions(-) delete mode 100644 src/cmd/status.go delete mode 100644 src/cmd/statusInfo.go rename src/cmd/{vpnDisconnect.go => vpnDown.go} (77%) rename src/cmd/{vpnConnect.go => vpnUp.go} (95%) rename src/cmdBuilder/{cmdBuilderBuildCobraCmd.go => buildCobraCmd.go} (86%) delete mode 100644 src/cmdBuilder/cmdBuilder.go rename src/cmdBuilder/{cmdBuilderCreateRunFunc.go => createRunFunc.go} (80%) rename src/cmdBuilder/{cmdBuilderCreateRunFunc_test.go => createRunFunc_test.go} (100%) rename src/cmdBuilder/{cmdBuilderExecuteRootCmd.go => executeRootCmd.go} (52%) delete mode 100644 src/zeropsRestApiClient/handler_get_projects_by_client.go delete mode 100644 src/zeropsRestApiClient/handler_get_service_stacks_by_project.go diff --git a/src/cmd/project.go b/src/cmd/project.go index 477c8da6..6f55db1d 100644 --- a/src/cmd/project.go +++ b/src/cmd/project.go @@ -11,8 +11,6 @@ func projectCmd() *cmdBuilder.Cmd { Short(i18n.T(i18n.CmdProject)). HelpFlag(i18n.T(i18n.ProjectHelp)). AddChildrenCmd(projectListCmd()). - AddChildrenCmd(projectStartCmd()). - AddChildrenCmd(projectStopCmd()). AddChildrenCmd(projectDeleteCmd()). AddChildrenCmd(projectServiceImportCmd()). AddChildrenCmd(projectImportCmd()) diff --git a/src/cmd/root.go b/src/cmd/root.go index 5d5fac2f..b846a141 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -1,19 +1,138 @@ package cmd import ( + "context" + "fmt" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/constants" + repository2 "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" ) func ExecuteCmd() error { - builder := cmdBuilder.NewCmdBuilder() + return cmdBuilder.ExecuteRootCmd(rootCmd()) +} + +func rootCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("zcli"). + SetHelpTemplate(getRootTemplate()). + AddChildrenCmd(loginCmd()). + AddChildrenCmd(versionCmd()). + AddChildrenCmd(scopeCmd()). + AddChildrenCmd(projectCmd()). + AddChildrenCmd(serviceCmd()). + AddChildrenCmd(vpnCmd()). + AddChildrenCmd(statusShowDebugLogsCmd()). + AddChildrenCmd(servicePushCmd()). + GuestRunFunc(func(ctx context.Context, cmdData *cmdBuilder.GuestCmdData) error { + body := &uxBlock.TableBody{} + + body.AddStringsRow(i18n.T(i18n.StatusInfoLoggedUser), "-") + + guestInfoPart(body) + + cmdData.UxBlocks.Table(body) + + return nil + }). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + body := &uxBlock.TableBody{} + + loggedUser := "" + if info, err := cmdData.RestApiClient.GetUserInfo(ctx); err != nil { + loggedUser = err.Error() + } else { + if infoOutput, err := info.Output(); err != nil { + loggedUser = err.Error() + } else { + loggedUser = fmt.Sprintf("%s <%s>", infoOutput.FullName, infoOutput.Email) + } + } + + body.AddStringsRow(i18n.T(i18n.StatusInfoLoggedUser), loggedUser) + + guestInfoPart(body) + + if cmdData.CliStorage.Data().ScopeProjectId.Filled() { + // project scope is set + projectId, _ := cmdData.CliStorage.Data().ScopeProjectId.Get() + project, err := repository2.GetProjectById(ctx, cmdData.RestApiClient, projectId) + if err != nil { + if errorsx.IsUserError(err) { + cmdData.UxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.ScopedProjectNotFound))) + } + + return err + } + + body.AddStringsRow(i18n.T(i18n.ScopedProject), fmt.Sprintf("%s [%s]", project.Name.String(), project.ID.Native())) + } + + cmdData.UxBlocks.Table(body) + + return nil + }) +} + +func guestInfoPart(tableBody *uxBlock.TableBody) { + cliDataFilePath, err := constants.CliDataFilePath() + if err != nil { + cliDataFilePath = err.Error() + } + tableBody.AddStringsRow(i18n.T(i18n.StatusInfoCliDataFilePath), cliDataFilePath) + + logFilePath, err := constants.LogFilePath() + if err != nil { + logFilePath = err.Error() + } + tableBody.AddStringsRow(i18n.T(i18n.StatusInfoLogFilePath), logFilePath) + + wgConfigFilePath, err := constants.WgConfigFilePath() + if err != nil { + wgConfigFilePath = err.Error() + } + tableBody.AddStringsRow(i18n.T(i18n.StatusInfoWgConfigFilePath), wgConfigFilePath) +} + +func getRootTemplate() string { + return styles.CobraSectionColor().SetString("Usage:").String() + `{{if .Runnable}} + {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} + {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} + +` + styles.CobraSectionColor().SetString("Aliases:").String() + ` + {{.NameAndAliases}}{{end}}{{if .HasExample}} + +` + styles.CobraSectionColor().SetString("Examples:").String() + ` +{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}} + +` + styles.CobraSectionColor().SetString("Available Commands:").String() + `{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}} + ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}} + +{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}} + ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}} + +` + styles.CobraSectionColor().SetString("Additional Commands:").String() + `{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}} + ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} + +` + styles.CobraSectionColor().SetString("Flags:").String() + ` +{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} + +` + styles.CobraSectionColor().SetString("Global Flags:").String() + ` +{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} + +` + styles.CobraSectionColor().SetString("Additional help topics:").String() + `{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} + ` + styles.CobraItemNameColor().SetString("{{rpad .CommandPath .CommandPathPadding}}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} - builder.AddCommand(loginCmd()) - builder.AddCommand(versionCmd()) - builder.AddCommand(scopeCmd()) - builder.AddCommand(projectCmd()) - builder.AddCommand(serviceCmd()) - builder.AddCommand(statusCmd()) - builder.AddCommand(vpnCmd()) +` + styles.CobraSectionColor().SetString("Global Env Variables:").String() + ` + ` + styles.CobraItemNameColor().SetString(constants.CliLogFilePathEnvVar).String() + ` ` + i18n.T(i18n.CliLogFilePathEnvVar) + ` + ` + styles.CobraItemNameColor().SetString(constants.CliDataFilePathEnvVar).String() + ` ` + i18n.T(i18n.CliDataFilePathEnvVar) + ` + ` + styles.CobraItemNameColor().SetString(constants.CliTerminalMode).String() + ` ` + i18n.T(i18n.CliTerminalModeEnvVar) + ` - return builder.CreateAndExecuteRootCobraCmd() +Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} +` } diff --git a/src/cmd/status.go b/src/cmd/status.go deleted file mode 100644 index d38e1ff5..00000000 --- a/src/cmd/status.go +++ /dev/null @@ -1,15 +0,0 @@ -package cmd - -import ( - "github.com/zeropsio/zcli/src/cmdBuilder" - "github.com/zeropsio/zcli/src/i18n" -) - -func statusCmd() *cmdBuilder.Cmd { - return cmdBuilder.NewCmd(). - Use("status"). - Short(i18n.T(i18n.CmdStatus)). - HelpFlag(i18n.T(i18n.StatusHelp)). - AddChildrenCmd(statusShowDebugLogsCmd()). - AddChildrenCmd(statusInfoCmd()) -} diff --git a/src/cmd/statusInfo.go b/src/cmd/statusInfo.go deleted file mode 100644 index 2e4094cb..00000000 --- a/src/cmd/statusInfo.go +++ /dev/null @@ -1,55 +0,0 @@ -package cmd - -import ( - "context" - _ "embed" - - "github.com/zeropsio/zcli/src/cmdBuilder" - "github.com/zeropsio/zcli/src/constants" - repository2 "github.com/zeropsio/zcli/src/entity/repository" - "github.com/zeropsio/zcli/src/errorsx" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/uxBlock" - "github.com/zeropsio/zcli/src/uxBlock/styles" -) - -func statusInfoCmd() *cmdBuilder.Cmd { - return cmdBuilder.NewCmd(). - Use("info"). - Short(i18n.T(i18n.CmdStatusInfo)). - HelpFlag(i18n.T(i18n.StatusInfoHelp)). - LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { - body := &uxBlock.TableBody{} - - cliDataFilePath, err := constants.CliDataFilePath() - if err != nil { - cliDataFilePath = err.Error() - } - body.AddStringsRow(i18n.T(i18n.StatusInfoCliDataFilePath), cliDataFilePath) - - logFilePath, err := constants.LogFilePath() - if err != nil { - logFilePath = err.Error() - } - body.AddStringsRow(i18n.T(i18n.StatusInfoLogFilePath), logFilePath) - - if cmdData.CliStorage.Data().ScopeProjectId.Filled() { - // project scope is set - projectId, _ := cmdData.CliStorage.Data().ScopeProjectId.Get() - project, err := repository2.GetProjectById(ctx, cmdData.RestApiClient, projectId) - if err != nil { - if errorsx.IsUserError(err) { - cmdData.UxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.ScopedProjectNotFound))) - } - - return err - } - - body.AddStringsRow(i18n.T(i18n.ScopedProject), project.Name.String()) - } - - cmdData.UxBlocks.Table(body) - - return nil - }) -} diff --git a/src/cmd/version.go b/src/cmd/version.go index b34cc389..96f44b5e 100644 --- a/src/cmd/version.go +++ b/src/cmd/version.go @@ -16,7 +16,7 @@ func versionCmd() *cmdBuilder.Cmd { Use("version"). Short(i18n.T(i18n.CmdVersion)). HelpFlag(i18n.T(i18n.VersionHelp)). - LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + GuestRunFunc(func(ctx context.Context, cmdData *cmdBuilder.GuestCmdData) error { fmt.Printf("zcli version %s (%s) %s/%s\n", Version, runtime.Version(), runtime.GOOS, runtime.GOARCH) return nil diff --git a/src/cmd/vpn.go b/src/cmd/vpn.go index 3f7a8bf3..c0001e4a 100644 --- a/src/cmd/vpn.go +++ b/src/cmd/vpn.go @@ -10,6 +10,6 @@ func vpnCmd() *cmdBuilder.Cmd { Use("vpn"). Short(i18n.T(i18n.CmdVpn)). HelpFlag(i18n.T(i18n.VpnHelp)). - AddChildrenCmd(vpnConnectCmd()). - AddChildrenCmd(vpnDisconnectCmd()) + AddChildrenCmd(vpnUpCmd()). + AddChildrenCmd(vpnDownCmd()) } diff --git a/src/cmd/vpnDisconnect.go b/src/cmd/vpnDown.go similarity index 77% rename from src/cmd/vpnDisconnect.go rename to src/cmd/vpnDown.go index bf3ac775..cce1db00 100644 --- a/src/cmd/vpnDisconnect.go +++ b/src/cmd/vpnDown.go @@ -10,11 +10,11 @@ import ( "github.com/zeropsio/zcli/src/uxBlock/styles" ) -func vpnDisconnectCmd() *cmdBuilder.Cmd { +func vpnDownCmd() *cmdBuilder.Cmd { return cmdBuilder.NewCmd(). - Use("disconnect"). - Short(i18n.T(i18n.CmdVpnDisconnect)). - HelpFlag(i18n.T(i18n.VpnDisconnectHelp)). + Use("down"). + Short(i18n.T(i18n.CmdVpnDown)). + HelpFlag(i18n.T(i18n.VpnDownHelp)). LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { uxBlocks := cmdData.UxBlocks @@ -28,7 +28,7 @@ func vpnDisconnectCmd() *cmdBuilder.Cmd { return err } - uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnDisconnected))) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnDown))) return nil }) diff --git a/src/cmd/vpnConnect.go b/src/cmd/vpnUp.go similarity index 95% rename from src/cmd/vpnConnect.go rename to src/cmd/vpnUp.go index 578e1c5d..7cd1fe00 100644 --- a/src/cmd/vpnConnect.go +++ b/src/cmd/vpnUp.go @@ -23,13 +23,13 @@ import ( "github.com/zeropsio/zcli/src/uxBlock/styles" ) -func vpnConnectCmd() *cmdBuilder.Cmd { +func vpnUpCmd() *cmdBuilder.Cmd { return cmdBuilder.NewCmd(). - Use("connect"). - Short(i18n.T(i18n.CmdVpnConnect)). + Use("up"). + Short(i18n.T(i18n.CmdVpnUp)). ScopeLevel(scope.Project). Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). - HelpFlag(i18n.T(i18n.VpnConnectHelp)). + HelpFlag(i18n.T(i18n.VpnUpHelp)). LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { uxBlocks := cmdData.UxBlocks @@ -115,7 +115,7 @@ func vpnConnectCmd() *cmdBuilder.Cmd { // TODO - janhajek ping {{.Ipv4NetworkGateway}} - uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnConnected))) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnUp))) return nil }) diff --git a/src/cmdBuilder/cmdBuilderBuildCobraCmd.go b/src/cmdBuilder/buildCobraCmd.go similarity index 86% rename from src/cmdBuilder/cmdBuilderBuildCobraCmd.go rename to src/cmdBuilder/buildCobraCmd.go index 01b5d2ac..6bf44744 100644 --- a/src/cmdBuilder/cmdBuilderBuildCobraCmd.go +++ b/src/cmdBuilder/buildCobraCmd.go @@ -10,7 +10,7 @@ import ( "github.com/zeropsio/zcli/src/uxBlock" ) -func (b *CmdBuilder) buildCobraCmd( +func buildCobraCmd( cmd *Cmd, flagParams *flagParams.Handler, uxBlocks uxBlock.UxBlocks, @@ -21,6 +21,10 @@ func (b *CmdBuilder) buildCobraCmd( SilenceUsage: cmd.silenceUsage, } + if cmd.helpTemplate != "" { + cobraCmd.SetHelpTemplate(cmd.helpTemplate) + } + argNames := make([]string, len(cmd.args)) for i, arg := range cmd.args { argName := arg.name @@ -59,11 +63,11 @@ func (b *CmdBuilder) buildCobraCmd( } if cmd.guestRunFunc != nil || cmd.loggedUserRunFunc != nil { - cobraCmd.RunE = b.createCmdRunFunc(cmd, flagParams, uxBlocks, cliStorage) + cobraCmd.RunE = createCmdRunFunc(cmd, flagParams, uxBlocks, cliStorage) } for _, childrenCmd := range cmd.childrenCmds { - cobraChildrenCmd, err := b.buildCobraCmd(childrenCmd, flagParams, uxBlocks, cliStorage) + cobraChildrenCmd, err := buildCobraCmd(childrenCmd, flagParams, uxBlocks, cliStorage) if err != nil { return nil, err } diff --git a/src/cmdBuilder/cmd.go b/src/cmdBuilder/cmd.go index fab3fd30..6f8742ac 100644 --- a/src/cmdBuilder/cmd.go +++ b/src/cmdBuilder/cmd.go @@ -17,6 +17,7 @@ type Cmd struct { use string short string long string + helpTemplate string loggedUserRunFunc loggedUserRunFunc guestRunFunc guestRunFunc silenceUsage bool @@ -59,6 +60,11 @@ func (cmd *Cmd) Use(use string) *Cmd { return cmd } +func (cmd *Cmd) SetHelpTemplate(template string) *Cmd { + cmd.helpTemplate = template + return cmd +} + func (cmd *Cmd) Short(short string) *Cmd { cmd.short = short return cmd diff --git a/src/cmdBuilder/cmdBuilder.go b/src/cmdBuilder/cmdBuilder.go deleted file mode 100644 index 4d5cfc69..00000000 --- a/src/cmdBuilder/cmdBuilder.go +++ /dev/null @@ -1,13 +0,0 @@ -package cmdBuilder - -type CmdBuilder struct { - commands []*Cmd -} - -func NewCmdBuilder() *CmdBuilder { - return &CmdBuilder{} -} - -func (b *CmdBuilder) AddCommand(cmd *Cmd) { - b.commands = append(b.commands, cmd) -} diff --git a/src/cmdBuilder/cmdBuilderCreateRunFunc.go b/src/cmdBuilder/createRunFunc.go similarity index 80% rename from src/cmdBuilder/cmdBuilderCreateRunFunc.go rename to src/cmdBuilder/createRunFunc.go index 97c43646..0d053d1b 100644 --- a/src/cmdBuilder/cmdBuilderCreateRunFunc.go +++ b/src/cmdBuilder/createRunFunc.go @@ -63,7 +63,7 @@ type LoggedUserCmdData struct { VpnKeys map[uuid.ProjectId]entity.VpnKey } -func (b *CmdBuilder) createCmdRunFunc( +func createCmdRunFunc( cmd *Cmd, flagParams *flagParams.Handler, uxBlocks uxBlock.UxBlocks, @@ -88,31 +88,35 @@ func (b *CmdBuilder) createCmdRunFunc( Params: newCmdParamReader(cobraCmd, flagParams), } - if cmd.loggedUserRunFunc != nil { - storedData := cliStorage.Data() + storedData := cliStorage.Data() - token := storedData.Token - if token == "" { - return errors.New(i18n.T(i18n.UnauthenticatedUser)) + token := storedData.Token + if token == "" { + if cmd.guestRunFunc != nil { + return cmd.guestRunFunc(ctx, guestCmdData) } + return errors.New(i18n.T(i18n.UnauthenticatedUser)) + } - cmdData := &LoggedUserCmdData{ - GuestCmdData: guestCmdData, - VpnKeys: storedData.VpnKeys, - } + // user is logged in but there is only the guest run func + if cmd.loggedUserRunFunc == nil { + return cmd.guestRunFunc(ctx, guestCmdData) + } - cmdData.RestApiClient = zeropsRestApiClient.NewAuthorizedClient(token, "https://"+storedData.RegionData.Address) + cmdData := &LoggedUserCmdData{ + GuestCmdData: guestCmdData, + VpnKeys: storedData.VpnKeys, + } + + cmdData.RestApiClient = zeropsRestApiClient.NewAuthorizedClient(token, "https://"+storedData.RegionData.Address) - for _, dep := range getScopeListFromRoot(cmd.scopeLevel) { - err := dep.LoadSelectedScope(ctx, cmd, cmdData) - if err != nil { - return err - } + for _, dep := range getScopeListFromRoot(cmd.scopeLevel) { + err := dep.LoadSelectedScope(ctx, cmd, cmdData) + if err != nil { + return err } - return cmd.loggedUserRunFunc(ctx, cmdData) } - - return cmd.guestRunFunc(ctx, guestCmdData) + return cmd.loggedUserRunFunc(ctx, cmdData) } } diff --git a/src/cmdBuilder/cmdBuilderCreateRunFunc_test.go b/src/cmdBuilder/createRunFunc_test.go similarity index 100% rename from src/cmdBuilder/cmdBuilderCreateRunFunc_test.go rename to src/cmdBuilder/createRunFunc_test.go diff --git a/src/cmdBuilder/cmdBuilderExecuteRootCmd.go b/src/cmdBuilder/executeRootCmd.go similarity index 52% rename from src/cmdBuilder/cmdBuilderExecuteRootCmd.go rename to src/cmdBuilder/executeRootCmd.go index 4ae16837..04373c44 100644 --- a/src/cmdBuilder/cmdBuilderExecuteRootCmd.go +++ b/src/cmdBuilder/executeRootCmd.go @@ -9,7 +9,6 @@ import ( "github.com/mattn/go-isatty" "github.com/pkg/errors" - "github.com/spf13/cobra" "github.com/zeropsio/zcli/src/cliStorage" "github.com/zeropsio/zcli/src/constants" "github.com/zeropsio/zcli/src/errorsx" @@ -25,7 +24,7 @@ import ( "gopkg.in/yaml.v3" ) -func (b *CmdBuilder) CreateAndExecuteRootCobraCmd() (err error) { +func ExecuteRootCmd(rootCmd *Cmd) (err error) { ctx, cancel := context.WithCancel(context.Background()) regSignals(cancel) ctx = support.Context(ctx) @@ -54,17 +53,12 @@ func (b *CmdBuilder) CreateAndExecuteRootCobraCmd() (err error) { flagParams := flagParams.New() - rootCmd := createRootCommand() - - for _, cmd := range b.commands { - cobraCmd, err := b.buildCobraCmd(cmd, flagParams, uxBlocks, cliStorage) - if err != nil { - return err - } - rootCmd.AddCommand(cobraCmd) + cobraCmd, err := buildCobraCmd(rootCmd, flagParams, uxBlocks, cliStorage) + if err != nil { + return err } - err = rootCmd.ExecuteContext(ctx) + err = cobraCmd.ExecuteContext(ctx) if err != nil { printError(err, uxBlocks) } @@ -72,52 +66,6 @@ func (b *CmdBuilder) CreateAndExecuteRootCobraCmd() (err error) { return nil } -func createRootCommand() *cobra.Command { - rootCmd := &cobra.Command{ - Use: "zcli", - CompletionOptions: cobra.CompletionOptions{HiddenDefaultCmd: true}, - SilenceErrors: true, - } - - rootCmd.SetHelpTemplate(`` + styles.CobraSectionColor().SetString("Usage:").String() + `{{if .Runnable}} - {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} - {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} - -` + styles.CobraSectionColor().SetString("Aliases:").String() + ` - {{.NameAndAliases}}{{end}}{{if .HasExample}} - -` + styles.CobraSectionColor().SetString("Examples:").String() + ` -{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}} - -` + styles.CobraSectionColor().SetString("Available Commands:").String() + `{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}} - ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}} - -{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}} - ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}} - -` + styles.CobraSectionColor().SetString("Additional Commands:").String() + `{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}} - ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} - -` + styles.CobraSectionColor().SetString("Flags:").String() + ` -{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} - -` + styles.CobraSectionColor().SetString("Global Flags:").String() + ` -{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} - -` + styles.CobraSectionColor().SetString("Additional help topics:").String() + `{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} - ` + styles.CobraItemNameColor().SetString("{{rpad .CommandPath .CommandPathPadding}}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} - -` + styles.CobraSectionColor().SetString("Global Env Variables:").String() + ` - ` + styles.CobraItemNameColor().SetString(constants.CliLogFilePathEnvVar).String() + ` ` + i18n.T(i18n.CliLogFilePathEnvVar) + ` - ` + styles.CobraItemNameColor().SetString(constants.CliDataFilePathEnvVar).String() + ` ` + i18n.T(i18n.CliDataFilePathEnvVar) + ` - ` + styles.CobraItemNameColor().SetString(constants.CliTerminalMode).String() + ` ` + i18n.T(i18n.CliTerminalModeEnvVar) + ` - -Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} -`) - - return rootCmd -} - func printError(err error, uxBlocks uxBlock.UxBlocks) { uxBlocks.LogDebug(fmt.Sprintf("error: %+v", err)) diff --git a/src/entity/project.go b/src/entity/project.go index f5d39c37..ee9f28fe 100644 --- a/src/entity/project.go +++ b/src/entity/project.go @@ -9,7 +9,8 @@ import ( type Project struct { ID uuid.ProjectId Name types.String - ClientId uuid.ClientId + OrgId uuid.ClientId + OrgName types.String Description types.Text Status enum.ProjectStatusEnum } diff --git a/src/entity/repository/appVersion.go b/src/entity/repository/appVersion.go index 36e98565..0726e784 100644 --- a/src/entity/repository/appVersion.go +++ b/src/entity/repository/appVersion.go @@ -15,24 +15,25 @@ func GetAllAppVersionByService( restApiClient *zeropsRestApiClient.Handler, service entity.Service, ) ([]entity.AppVersion, error) { - var searchData []body.EsSearchItem - searchData = append(searchData, body.EsSearchItem{ - Name: "clientId", - Operator: "eq", - Value: service.ClientId.TypedString(), - }, body.EsSearchItem{ - Name: "serviceStackId", - Operator: "eq", - Value: service.ID.TypedString(), - }, body.EsSearchItem{ - Name: "build.serviceStackId", - Operator: "ne", - Value: "", - }) + esFilter := body.EsFilter{ + Search: []body.EsSearchItem{ + { + Name: "clientId", + Operator: "eq", + Value: service.ClientId.TypedString(), + }, { + Name: "serviceStackId", + Operator: "eq", + Value: service.ID.TypedString(), + }, { + Name: "build.serviceStackId", + Operator: "ne", + Value: "", + }, + }, + } - response, err := restApiClient.PostAppVersionSearch(ctx, body.EsFilter{ - Search: searchData, - }) + response, err := restApiClient.PostAppVersionSearch(ctx, esFilter) if err != nil { return nil, err } @@ -55,31 +56,32 @@ func GetLatestAppVersionByService( restApiClient *zeropsRestApiClient.Handler, service entity.Service, ) ([]entity.AppVersion, error) { - var searchData []body.EsSearchItem - searchData = append(searchData, body.EsSearchItem{ - Name: "clientId", - Operator: "eq", - Value: service.ClientId.TypedString(), - }, body.EsSearchItem{ - Name: "serviceStackId", - Operator: "eq", - Value: service.ID.TypedString(), - }, body.EsSearchItem{ - Name: "build.serviceStackId", - Operator: "ne", - Value: "", - }) - var sortData []body.EsSortItem - sortData = append(sortData, body.EsSortItem{ - Name: "sequence", - Ascending: types.NewBoolNull(false), - }) + esFilter := body.EsFilter{ + Search: []body.EsSearchItem{ + { + Name: "clientId", + Operator: "eq", + Value: service.ClientId.TypedString(), + }, { + Name: "serviceStackId", + Operator: "eq", + Value: service.ID.TypedString(), + }, { + Name: "build.serviceStackId", + Operator: "ne", + Value: "", + }, + }, + Sort: []body.EsSortItem{ + { + Name: "sequence", + Ascending: types.NewBoolNull(false), + }, + }, + Limit: types.NewIntNull(1), + } - response, err := restApiClient.PostAppVersionSearch(ctx, body.EsFilter{ - Search: searchData, - Sort: sortData, - Limit: types.NewIntNull(1), - }) + response, err := restApiClient.PostAppVersionSearch(ctx, esFilter) if err != nil { return nil, err } diff --git a/src/entity/repository/container.go b/src/entity/repository/container.go index aa957456..773b823f 100644 --- a/src/entity/repository/container.go +++ b/src/entity/repository/container.go @@ -14,20 +14,21 @@ func GetAllContainers( restApiClient *zeropsRestApiClient.Handler, service entity.Service, ) ([]entity.Container, error) { - var searchData []body.EsSearchItem - searchData = append(searchData, body.EsSearchItem{ - Name: "clientId", - Operator: "eq", - Value: service.ClientId.TypedString(), - }, body.EsSearchItem{ - Name: "serviceStackId", - Operator: "eq", - Value: service.ID.TypedString(), - }) - - response, err := restApiClient.PostContainerSearch(ctx, body.EsFilter{ - Search: searchData, - }) + esFilter := body.EsFilter{ + Search: []body.EsSearchItem{ + { + Name: "clientId", + Operator: "eq", + Value: service.ClientId.TypedString(), + }, { + Name: "serviceStackId", + Operator: "eq", + Value: service.ID.TypedString(), + }, + }, + } + + response, err := restApiClient.PostContainerSearch(ctx, esFilter) if err != nil { return nil, err } diff --git a/src/entity/repository/project.go b/src/entity/repository/project.go index a20563cd..2a3ac4d7 100644 --- a/src/entity/repository/project.go +++ b/src/entity/repository/project.go @@ -5,6 +5,7 @@ import ( "github.com/zeropsio/zcli/src/entity" "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/body" "github.com/zeropsio/zerops-go/dto/input/path" "github.com/zeropsio/zerops-go/dto/output" "github.com/zeropsio/zerops-go/types/uuid" @@ -33,19 +34,24 @@ func GetAllProjects( ctx context.Context, restApiClient *zeropsRestApiClient.Handler, ) ([]entity.Project, error) { - info, err := restApiClient.GetUserInfo(ctx) - if err != nil { - return nil, err - } - - output, err := info.Output() + orgs, err := GetAllOrgs(ctx, restApiClient) if err != nil { return nil, err } var projects []entity.Project - for _, clientUser := range output.ClientUserList { - response, err := restApiClient.GetProjectsByClient(ctx, clientUser.ClientId) + for _, org := range orgs { + esFilter := body.EsFilter{ + Search: []body.EsSearchItem{ + { + Name: "clientId", + Operator: "eq", + Value: org.ID.TypedString(), + }, + }, + } + + response, err := restApiClient.PostProjectSearch(ctx, esFilter) if err != nil { return nil, err } @@ -55,20 +61,21 @@ func GetAllProjects( } for _, project := range projectsResponse.Items { - projects = append(projects, projectFromEsSearch(project)) + projects = append(projects, projectFromEsSearch(org, project)) } } return projects, nil } -func projectFromEsSearch(esProject zeropsRestApiClient.EsProject) entity.Project { +func projectFromEsSearch(org entity.Org, esProject output.EsProject) entity.Project { description, _ := esProject.Description.Get() return entity.Project{ ID: esProject.Id, Name: esProject.Name, - ClientId: esProject.ClientId, + OrgId: org.ID, + OrgName: org.Name, Description: description, Status: esProject.Status, } @@ -80,7 +87,7 @@ func projectFromApiOutput(project output.Project) entity.Project { return entity.Project{ ID: project.Id, Name: project.Name, - ClientId: project.ClientId, + OrgId: project.ClientId, Description: description, Status: project.Status, } diff --git a/src/entity/repository/service.go b/src/entity/repository/service.go index 445b9235..8864c6a1 100644 --- a/src/entity/repository/service.go +++ b/src/entity/repository/service.go @@ -6,6 +6,7 @@ import ( "github.com/zeropsio/zcli/src/entity" "github.com/zeropsio/zcli/src/errorsx" "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/body" "github.com/zeropsio/zerops-go/dto/input/path" "github.com/zeropsio/zerops-go/dto/output" "github.com/zeropsio/zerops-go/types" @@ -78,7 +79,22 @@ func GetNonSystemServicesByProject( restApiClient *zeropsRestApiClient.Handler, project entity.Project, ) ([]entity.Service, error) { - servicesResponse, err := restApiClient.GetServiceStackByProject(ctx, project.ID, project.ClientId) + esFilter := body.EsFilter{ + Search: []body.EsSearchItem{ + { + Name: "projectId", + Operator: "eq", + Value: project.ID.TypedString(), + }, + { + Name: "clientId", + Operator: "eq", + Value: project.OrgId.TypedString(), + }, + }, + } + + servicesResponse, err := restApiClient.PostServiceStackSearch(ctx, esFilter) if err != nil { return nil, err } @@ -98,7 +114,7 @@ func GetNonSystemServicesByProject( return services, nil } -func serviceFromEsSearch(esServiceStack zeropsRestApiClient.EsServiceStack) entity.Service { +func serviceFromEsSearch(esServiceStack output.EsServiceStack) entity.Service { return entity.Service{ ID: esServiceStack.Id, ClientId: esServiceStack.ClientId, diff --git a/src/i18n/en.go b/src/i18n/en.go index f9f42cb1..e2790bd8 100644 --- a/src/i18n/en.go +++ b/src/i18n/en.go @@ -36,8 +36,8 @@ var en = map[string]string{ BucketCreateHelp: "the bucket create command.", BucketDeleteHelp: "the bucket delete command.", VpnHelp: "the vpn command.", - VpnConnectHelp: "the vpn connect command.", - VpnDisconnectHelp: "the vpn disconnect command.", + VpnUpHelp: "the vpn up command.", + VpnDownHelp: "the vpn down command.", // cmd short CmdDeployDesc: "Deploys your application to Zerops.", @@ -72,8 +72,8 @@ var en = map[string]string{ CmdBucketCreate: "Creates a bucket in an existing object storage.", CmdBucketDelete: "Deletes a bucket from an existing object storage.", CmdVpn: "VPN commands group", - CmdVpnConnect: "Connects to the Zerops VPN.", - CmdVpnDisconnect: "Disconnects from the Zerops VPN.", + CmdVpnUp: "Connects to the Zerops VPN.", + CmdVpnDown: "Disconnects from the Zerops VPN.", // cmd long CmdProjectImportLong: "Creates a new project with one or more services according to the definition in the import YAML file.", @@ -214,15 +214,17 @@ var en = map[string]string{ BucketS3BucketAlreadyExists: "The bucket name already exists under a different object storage user. Set a different bucket name.", // status info - StatusInfoCliDataFilePath: "Zerops CLI data file path", - StatusInfoLogFilePath: "Zerops CLI log file path", + StatusInfoCliDataFilePath: "Zerops CLI data file path", + StatusInfoLogFilePath: "Zerops CLI log file path", + StatusInfoWgConfigFilePath: "Zerops CLI wg config file path", + StatusInfoLoggedUser: "Logged user", // debug logs DebugLogsNotFound: "Debug logs not found", // vpn - VpnConnected: "VPN connected", - VpnDisconnected: "VPN disconnected", + VpnUp: "VPN connected", + VpnDown: "VPN disconnected", VpnConfigSaved: "VPN config saved", VpnPrivateKeyCorrupted: "VPN private key corrupted, a new one will be created", VpnPrivateKeyCreated: "VPN private key created", diff --git a/src/i18n/i18n.go b/src/i18n/i18n.go index c714534a..7b2da6a6 100644 --- a/src/i18n/i18n.go +++ b/src/i18n/i18n.go @@ -49,8 +49,8 @@ const ( BucketCreateHelp = "BucketCreateHelp" BucketDeleteHelp = "BucketDeleteHelp" VpnHelp = "VpnHelp" - VpnConnectHelp = "VpnConnectHelp" - VpnDisconnectHelp = "VpnDisconnectHelp" + VpnUpHelp = "VpnUpHelp" + VpnDownHelp = "VpnDownHelp" // cmd short CmdDeployDesc = "CmdDeployDesc" @@ -85,8 +85,8 @@ const ( CmdBucketCreate = "CmdBucketCreate" CmdBucketDelete = "CmdBucketDelete" CmdVpn = "CmdVpn" - CmdVpnConnect = "CmdVpnConnect" - CmdVpnDisconnect = "CmdVpnDisconnect" + CmdVpnUp = "CmdVpnUp" + CmdVpnDown = "CmdVpnDown" // cmd long CmdProjectImportLong = "CmdProjectImportLong" @@ -252,15 +252,17 @@ const ( BucketS3BucketAlreadyExists = "BucketAlreadyExists" // status info - StatusInfoCliDataFilePath = "StatusInfoCliDataFilePath" - StatusInfoLogFilePath = "StatusInfoLogFilePath" + StatusInfoCliDataFilePath = "StatusInfoCliDataFilePath" + StatusInfoLogFilePath = "StatusInfoLogFilePath" + StatusInfoWgConfigFilePath = "StatusInfoWgConfigFilePath" + StatusInfoLoggedUser = "StatusInfoLoggedUser" // debug logs DebugLogsNotFound = "DebugLogsNotFound" // vpn - VpnConnected = "VpnConnected" - VpnDisconnected = "VpnDisconnected" + VpnUp = "VpnUp" + VpnDown = "VpnDown" VpnConfigSaved = "VpnConfigSaved" VpnPrivateKeyCorrupted = "VpnPrivateKeyCorrupted" VpnPrivateKeyCreated = "VpnPrivateKeyCreated" diff --git a/src/uxHelpers/project.go b/src/uxHelpers/project.go index 33ebe306..6e1ee6b7 100644 --- a/src/uxHelpers/project.go +++ b/src/uxHelpers/project.go @@ -68,7 +68,7 @@ func PrintProjectList( func createProjectTableRows(projects []entity.Project) (*uxBlock.TableRow, *uxBlock.TableBody) { // TODO - janhajek translation - header := (&uxBlock.TableRow{}).AddStringCells("ID", "Name", "Description", "Org ID", "Status") + header := (&uxBlock.TableRow{}).AddStringCells("ID", "Name", "Description", "Org Name", "Org ID", "Status") tableBody := &uxBlock.TableBody{} for _, project := range projects { @@ -76,7 +76,8 @@ func createProjectTableRows(projects []entity.Project) (*uxBlock.TableRow, *uxBl string(project.ID), project.Name.String(), project.Description.Native(), - project.ClientId.Native(), + project.OrgName.Native(), + project.OrgId.Native(), project.Status.String(), ) } diff --git a/src/zeropsRestApiClient/handler_get_projects_by_client.go b/src/zeropsRestApiClient/handler_get_projects_by_client.go deleted file mode 100644 index c548af3a..00000000 --- a/src/zeropsRestApiClient/handler_get_projects_by_client.go +++ /dev/null @@ -1,98 +0,0 @@ -// Package zeropsRestApiClient provides a client for the zerops rest api -package zeropsRestApiClient - -import ( - "context" - "encoding/json" - "net/http" - - "github.com/pkg/errors" - "github.com/zeropsio/zerops-go/apiError" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" - "github.com/zeropsio/zerops-go/types/enum" - "github.com/zeropsio/zerops-go/types/uuid" -) - -func (h *Handler) GetProjectsByClient( - ctx context.Context, - clientId uuid.ClientId, -) (GetProjectsByClientResponse, error) { - var response GetProjectsByClientResponse - - u := "/api/rest/public/project/search" - - filter := EsFilter{ - Search: []EsSearchItem{ - { - Name: "clientId", - Operator: "eq", - Value: clientId.Native(), - }, - }, - } - - sdkResponse := sdkBase.Post(ctx, h.env, u, filter) - - if sdkResponse.Err != nil { - return response, sdkResponse.Err - } - response.responseHeaders = sdkResponse.HttpResponse.Header - response.responseStatusCode = sdkResponse.HttpResponse.StatusCode - - decoder := json.NewDecoder(sdkResponse.ResponseData) - if sdkResponse.HttpResponse.StatusCode < http.StatusMultipleChoices { - if err := decoder.Decode(&response.success); err != nil { - return response, err - } - } else { - responseString := sdkResponse.ResponseData.String() - apiErrorResponse := struct { - Error apiError.Error `json:"error"` - }{} - err := decoder.Decode(&apiErrorResponse) - if err != nil { - return response, errors.New(sdkResponse.HttpResponse.Status + ": " + responseString) - } - apiErrorResponse.Error.HttpStatusCode = sdkResponse.HttpResponse.StatusCode - response.err = apiErrorResponse.Error - } - - return response, nil -} - -type EsFilter struct { - Search []EsSearchItem `json:"search"` -} - -type EsSearchItem struct { - Name string `json:"name"` - Operator string `json:"operator"` - Value string `json:"value"` -} - -type GetProjectsByClientResponse struct { - success EsProjectResponse - err error - responseHeaders http.Header - responseStatusCode int -} - -func (r GetProjectsByClientResponse) Output() (output EsProjectResponse, err error) { - return r.success, r.err -} - -type EsProjectResponse struct { - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` - TotalHits int64 `json:"totalHits"` - Items []EsProject `json:"items"` -} - -type EsProject struct { - Id uuid.ProjectId `json:"id"` - ClientId uuid.ClientId `json:"clientId"` - Name types.String `json:"name"` - Description types.TextNull `json:"description"` - Status enum.ProjectStatusEnum `json:"status"` -} diff --git a/src/zeropsRestApiClient/handler_get_service_stacks_by_project.go b/src/zeropsRestApiClient/handler_get_service_stacks_by_project.go deleted file mode 100644 index 96d51c64..00000000 --- a/src/zeropsRestApiClient/handler_get_service_stacks_by_project.go +++ /dev/null @@ -1,105 +0,0 @@ -// Package zeropsRestApiClient provides a client for the zerops rest api -package zeropsRestApiClient - -import ( - "context" - "encoding/json" - "errors" - "net/http" - - "github.com/zeropsio/zerops-go/apiError" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" - "github.com/zeropsio/zerops-go/types/enum" - "github.com/zeropsio/zerops-go/types/stringId" - "github.com/zeropsio/zerops-go/types/uuid" -) - -func (h *Handler) GetServiceStackByProject( - ctx context.Context, - projectId uuid.ProjectId, - clientId uuid.ClientId, -) (GetServiceStackByProjectResponse, error) { - var response GetServiceStackByProjectResponse - - u := "/api/rest/public/service-stack/search" - - filter := EsFilter{ - Search: []EsSearchItem{ - { - Name: "projectId", - Operator: "eq", - Value: projectId.Native(), - }, - { - Name: "clientId", - Operator: "eq", - Value: clientId.Native(), - }, - }, - } - - sdkResponse := sdkBase.Post(ctx, h.env, u, filter) - - if sdkResponse.Err != nil { - return response, sdkResponse.Err - } - response.responseHeaders = sdkResponse.HttpResponse.Header - response.responseStatusCode = sdkResponse.HttpResponse.StatusCode - - decoder := json.NewDecoder(sdkResponse.ResponseData) - if sdkResponse.HttpResponse.StatusCode < http.StatusMultipleChoices { - if err := decoder.Decode(&response.success); err != nil { - return response, err - } - } else { - responseString := sdkResponse.ResponseData.String() - apiErrorResponse := struct { - Error apiError.Error `json:"error"` - }{} - err := decoder.Decode(&apiErrorResponse) - if err != nil { - return response, errors.New(sdkResponse.HttpResponse.Status + ": " + responseString) - } - apiErrorResponse.Error.HttpStatusCode = sdkResponse.HttpResponse.StatusCode - response.err = apiErrorResponse.Error - } - - return response, nil -} - -type GetServiceStackByProjectResponse struct { - success EsServiceStackResponse - err error - responseHeaders http.Header - responseStatusCode int -} - -func (r GetServiceStackByProjectResponse) Output() (output EsServiceStackResponse, err error) { - return r.success, r.err -} - -type EsServiceStackResponse struct { - Limit int `json:"limit"` - Offset int `json:"offset"` - TotalHits int `json:"totalHits"` - Items []EsServiceStack `json:"items"` -} - -type EsServiceStack struct { - Id uuid.ServiceStackId `json:"id"` - ProjectId uuid.ProjectId `json:"projectId"` - ClientId uuid.ClientId `json:"clientId"` - ServiceStackTypeId stringId.ServiceStackTypeId `json:"serviceStackTypeId"` - ServiceStackTypeVersionId stringId.ServiceStackTypeVersionId `json:"serviceStackTypeVersionId"` - Status enum.ServiceStackStatusEnum `json:"status"` - Name types.String `json:"name"` - IsSystem types.Bool `json:"isSystem"` - ServiceStackTypeInfo EsServiceStackInfoJsonObject `json:"serviceStackTypeInfo"` -} - -type EsServiceStackInfoJsonObject struct { - ServiceStackTypeName types.String `json:"serviceStackTypeName"` // serviceStackTypeName - types.String - ServiceStackTypeCategory enum.ServiceStackTypeCategoryEnum `json:"serviceStackTypeCategory"` // serviceStackTypeCategory - enum.ServiceStackTypeCategoryEnum - ServiceStackTypeVersionName types.String `json:"serviceStackTypeVersionName"` // serviceStackTypeVersionName - types.String -} From acc42ca883b3f654aa9fe7e6764b8011beffe8a3 Mon Sep 17 00:00:00 2001 From: "jan.hajek@zerops.io" Date: Sat, 9 Mar 2024 23:34:35 +0100 Subject: [PATCH 2/4] vpn down fix - missing conf --- src/cmd/root.go | 4 ++-- src/cmd/vpnDown.go | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cmd/root.go b/src/cmd/root.go index b846a141..63c28b9c 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -6,7 +6,7 @@ import ( "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/constants" - repository2 "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/entity/repository" "github.com/zeropsio/zcli/src/errorsx" "github.com/zeropsio/zcli/src/i18n" "github.com/zeropsio/zcli/src/uxBlock" @@ -61,7 +61,7 @@ func rootCmd() *cmdBuilder.Cmd { if cmdData.CliStorage.Data().ScopeProjectId.Filled() { // project scope is set projectId, _ := cmdData.CliStorage.Data().ScopeProjectId.Get() - project, err := repository2.GetProjectById(ctx, cmdData.RestApiClient, projectId) + project, err := repository.GetProjectById(ctx, cmdData.RestApiClient, projectId) if err != nil { if errorsx.IsUserError(err) { cmdData.UxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.ScopedProjectNotFound))) diff --git a/src/cmd/vpnDown.go b/src/cmd/vpnDown.go index cce1db00..15f4df4a 100644 --- a/src/cmd/vpnDown.go +++ b/src/cmd/vpnDown.go @@ -2,10 +2,12 @@ package cmd import ( "context" + "os" "os/exec" "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/cmdRunner" + "github.com/zeropsio/zcli/src/constants" "github.com/zeropsio/zcli/src/i18n" "github.com/zeropsio/zcli/src/uxBlock/styles" ) @@ -18,12 +20,24 @@ func vpnDownCmd() *cmdBuilder.Cmd { LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { uxBlocks := cmdData.UxBlocks + filePath, err := constants.WgConfigFilePath() + if err != nil { + return err + } + + // create empty file if not exists, only thing wg-quick needs is a proper file name + f, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0666) + if err != nil { + return err + } + defer f.Close() + // TODO - janhajek check if vpn is connected // TODO - janhajek get somehow a meaningful output // TODO - janhajek check if wg-quick is installed // TODO - janhajek a configurable path to wg-quick - c := exec.CommandContext(ctx, "wg-quick", "down", "zerops") - _, err := cmdRunner.Run(c) + c := exec.CommandContext(ctx, "wg-quick", "down", filePath) + _, err = cmdRunner.Run(c) if err != nil { return err } From e63a10bf6ced7b5834c9106d6bba6a37142ad101 Mon Sep 17 00:00:00 2001 From: "jan.hajek@zerops.io" Date: Sat, 9 Mar 2024 23:36:33 +0100 Subject: [PATCH 3/4] fix linter --- src/cmd/projectStart.go | 54 ---------------------------------------- src/cmd/projectStop.go | 55 ----------------------------------------- src/cmd/root.go | 2 +- 3 files changed, 1 insertion(+), 110 deletions(-) delete mode 100644 src/cmd/projectStart.go delete mode 100644 src/cmd/projectStop.go diff --git a/src/cmd/projectStart.go b/src/cmd/projectStart.go deleted file mode 100644 index 4967b509..00000000 --- a/src/cmd/projectStart.go +++ /dev/null @@ -1,54 +0,0 @@ -package cmd - -import ( - "context" - - "github.com/zeropsio/zcli/src/cmd/scope" - "github.com/zeropsio/zcli/src/cmdBuilder" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/uxHelpers" - "github.com/zeropsio/zerops-go/dto/input/path" -) - -func projectStartCmd() *cmdBuilder.Cmd { - return cmdBuilder.NewCmd(). - Use("start"). - Short(i18n.T(i18n.CmdProjectStart)). - ScopeLevel(scope.Project). - Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). - HelpFlag(i18n.T(i18n.ProjectStartHelp)). - LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { - startProjectResponse, err := cmdData.RestApiClient.PutProjectStart( - ctx, - path.ProjectId{ - Id: cmdData.Project.ID, - }, - ) - if err != nil { - return err - } - - responseOutput, err := startProjectResponse.Output() - if err != nil { - return err - } - - processId := responseOutput.Id - - err = uxHelpers.ProcessCheckWithSpinner( - ctx, - cmdData.UxBlocks, - []uxHelpers.Process{{ - F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), - RunningMessage: i18n.T(i18n.ProjectStarting), - ErrorMessageMessage: i18n.T(i18n.ProjectStarting), - SuccessMessage: i18n.T(i18n.ProjectStarted), - }}, - ) - if err != nil { - return err - } - - return nil - }) -} diff --git a/src/cmd/projectStop.go b/src/cmd/projectStop.go deleted file mode 100644 index 83e5b364..00000000 --- a/src/cmd/projectStop.go +++ /dev/null @@ -1,55 +0,0 @@ -package cmd - -import ( - "context" - - "github.com/zeropsio/zcli/src/cmd/scope" - "github.com/zeropsio/zcli/src/cmdBuilder" - "github.com/zeropsio/zcli/src/uxHelpers" - "github.com/zeropsio/zerops-go/dto/input/path" - - "github.com/zeropsio/zcli/src/i18n" -) - -func projectStopCmd() *cmdBuilder.Cmd { - return cmdBuilder.NewCmd(). - Use("stop"). - Short(i18n.T(i18n.CmdProjectStop)). - ScopeLevel(scope.Project). - Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). - HelpFlag(i18n.T(i18n.ProjectStopHelp)). - LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { - stopProjectResponse, err := cmdData.RestApiClient.PutProjectStop( - ctx, - path.ProjectId{ - Id: cmdData.Project.ID, - }, - ) - if err != nil { - return err - } - - responseOutput, err := stopProjectResponse.Output() - if err != nil { - return err - } - - processId := responseOutput.Id - - err = uxHelpers.ProcessCheckWithSpinner( - ctx, - cmdData.UxBlocks, - []uxHelpers.Process{{ - F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), - RunningMessage: i18n.T(i18n.ProjectStopping), - ErrorMessageMessage: i18n.T(i18n.ProjectStopping), - SuccessMessage: i18n.T(i18n.ProjectStopped), - }}, - ) - if err != nil { - return err - } - - return nil - }) -} diff --git a/src/cmd/root.go b/src/cmd/root.go index 63c28b9c..db1a9594 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -43,7 +43,7 @@ func rootCmd() *cmdBuilder.Cmd { LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { body := &uxBlock.TableBody{} - loggedUser := "" + var loggedUser string if info, err := cmdData.RestApiClient.GetUserInfo(ctx); err != nil { loggedUser = err.Error() } else { From fbbfe626ea15ea07e55f854b759d609494e2ab14 Mon Sep 17 00:00:00 2001 From: "jan.hajek@zerops.io" Date: Sat, 9 Mar 2024 23:46:05 +0100 Subject: [PATCH 4/4] remove unused translations --- src/i18n/en.go | 64 ------------------------- src/i18n/i18n.go | 118 +++++------------------------------------------ 2 files changed, 11 insertions(+), 171 deletions(-) diff --git a/src/i18n/en.go b/src/i18n/en.go index e2790bd8..0123fe6f 100644 --- a/src/i18n/en.go +++ b/src/i18n/en.go @@ -2,39 +2,25 @@ package i18n var en = map[string]string{ // help - DisplayHelp: "Displays help for ", - GroupHelp: "any command.", - DeployHelp: "the deploy command.", - LogShowHelp: "the log show command.", LoginHelp: "the login command.", ProjectHelp: "the project command.", - ProjectStartHelp: "the project start command.", - ProjectStopHelp: "the project stop command.", ProjectListHelp: "the project list command.", ScopeHelp: "the scope command.", ScopeProjectHelp: "the scope project command.", - ScopeServiceHelp: "the scope project command.", ScopeResetHelp: "the scope reset command.", ProjectDeleteHelp: "the project delete command.", ProjectImportHelp: "the project import command.", ProjectServiceImportHelp: "the project service import command.", ServiceHelp: "the service command.", - PushHelp: "the push command.", - RegionListHelp: "the region list command.", ServiceStartHelp: "the service start command.", ServiceStopHelp: "the service stop command.", - ServiceImportHelp: "the service import command.", ServiceDeleteHelp: "the service delete command.", ServiceLogHelp: "the service log command.", ServiceDeployHelp: "the service deploy command.", ServiceListHelp: "the service list command.", ServicePushHelp: "the service push command.", - StatusHelp: "the status command.", - StatusInfoHelp: "the status info command.", StatusShowDebugLogsHelp: "the status show debug logs command.", VersionHelp: "the version command.", - BucketCreateHelp: "the bucket create command.", - BucketDeleteHelp: "the bucket delete command.", VpnHelp: "the vpn command.", VpnUpHelp: "the vpn up command.", VpnDownHelp: "the vpn down command.", @@ -43,20 +29,13 @@ var en = map[string]string{ CmdDeployDesc: "Deploys your application to Zerops.", CmdPushDesc: "Builds your application in Zerops and deploys it.", CmdLogin: "Logs you into Zerops. Use a generated Zerops token or your login e-mail and password.", - CmdStatus: "Status commands group.", - CmdStatusInfo: "Shows the current status of the Zerops CLI.", CmdStatusShowDebugLogs: "Shows zCLI debug logs.", CmdVersion: "Shows the current zCLI version.", - CmdRegion: "Zerops region commands group.", - CmdRegionList: "Lists all Zerops regions.", CmdProject: "Project commands group.", CmdService: "Zerops service commands group.", - CmdProjectStart: "Starts the project and the services that were running before the project was stopped.", - CmdProjectStop: "Stops the project and all of its services.", CmdProjectList: "Lists all projects.", CmdScope: "Scope commands group", CmdScopeProject: "Sets the scope for project. All commands that require project ID will use the selected one.", - CmdScopeService: "Sets the scope for service. All commands that require service ID will use the selected one.", CmdScopeReset: "Resets the scope for project and service.", CmdProjectDelete: "Deletes a project and all of its services.", CmdProjectImport: "Creates a new project with one or more services.", @@ -66,11 +45,6 @@ var en = map[string]string{ CmdServiceStop: "Stops the Zerops service.", CmdServiceDelete: "Deletes the Zerops service.", CmdServiceLog: "Get service runtime or build log to stdout.", - CmdBucket: "S3 storage management", - CmdBucketZerops: "Management via Zerops API", - CmdBucketS3: "Management directly via S3 API", - CmdBucketCreate: "Creates a bucket in an existing object storage.", - CmdBucketDelete: "Deletes a bucket from an existing object storage.", CmdVpn: "VPN commands group", CmdVpnUp: "Connects to the Zerops VPN.", CmdVpnDown: "Disconnects from the Zerops VPN.", @@ -131,16 +105,9 @@ var en = map[string]string{ QueuedProcesses: "Queued processes: %d", CoreServices: "Core services activation started", - // delete cmd - DeleteCanceledByUser: "delete command canceled by user", - // project + service ProjectDeleteConfirm: "Project %s will be deleted? \n Are you sure?", ServiceDeleteConfirm: "Service %s will be deleted? \n Are you sure?", - ProjectStarting: "Project is being started", - ProjectStarted: "Project was started", - ProjectStopping: "Project is begin stopped", - ProjectStopped: "Project was stopped", ProjectDeleting: "Project is being deleted", ProjectDeleted: "Project was deleted", ServiceStarting: "Service is being started", @@ -160,13 +127,8 @@ var en = map[string]string{ LogFormatInvalid: "Invalid --format value. Allowed values are FULL, SHORT, JSON, JSONSTREAM.", LogFormatTemplateMismatch: "--formatTemplate can be used only in combination with --format=FULL.", LogFormatStreamMismatch: "--format=JSON cannot be used in combination with --follow. Use --format=JSONSTREAM instead.", - LogServiceNameInvalid: "Invalid serviceName value. Multiple @ characters are not supported. See -h for help.", LogFormatTemplateInvalid: "Invalid --formatTemplate content. The custom template failed with following error:", LogFormatTemplateNoSpace: "Template items must be split by a (single) space.", - LogSuffixInvalid: "Invalid serviceName value. Use @ to return log messages from the N-th runtime container only.\nUse @BUILD to return log messages from the last build if available.", - LogRuntimeOnly: "This command can be used on runtime services only.", - LogNoContainerFound: "No runtime container was found.", - LogTooFewContainers: "There %s only %d runtime container%s at the moment. Select a lower container index.", LogNoBuildFound: "No build was found for this service.", LogBuildStatusUploading: "Service status UPLOADING, need to wait for app version data.", LogAccessFailed: "Request for access to logs failed.", @@ -191,28 +153,6 @@ var en = map[string]string{ BuildDeployZeropsYamlFound: "File zerops.yml found. Path: %s.", BuildDeployZeropsYamlNotFound: "File zerops.yml not found. Expected path: %s.", - // s3 - BucketGenericXAmzAcl: "Defines one of predefined grants, known as canned ACLs.\nValid values are: private, public-read, public-read-write, authenticated-read.", - BucketGenericXAmzAclInvalid: "Invalid --x-amz-acl value. Allowed values are: private, public-read, public-read-write, authenticated-read.", - BucketGenericOnlyForObjectStorage: "This command can be used on object storage services only.", - BucketGenericBucketNamePrefixed: "Bucket names are prefixed by object storage service ID to make the bucket names unique.\nLearn more about bucket naming conventions at https://docs.zerops.io/documentation/services/storage/s3.html#used-technology", - - BucketCreated: "Bucket created", - BucketCreateCreatingDirect: "Creating bucket %s directly on S3 API.", - BucketCreateCreatingZeropsApi: "Creating bucket %s using Zerops API.", - - BucketDeleteConfirm: "Bucket %s will be deleted? \n Are you sure?", - BucketDeleted: "Bucket deleted", - BucketDeleteDeletingDirect: "Deleting bucket %s directly on S3 API.", - BucketDeleteDeletingZeropsApi: "Deleting bucket %s using Zerops API.", - - BucketS3AccessKeyId: "When using direct S3 API the accessKeyId to the Zerops object storage is required.\nAutomatically filled if the {serviceName}_accessKeyId environment variable exists.", - BucketS3SecretAccessKey: "When using direct S3 API the secretAccessKey to the Zerops object storage is required.\nAutomatically filled if the {serviceName}_secretAccessKey environment variable exists.", - BucketS3FlagBothMandatory: "If you are specifying accessKeyId or secretAccessKey, both flags are mandatory.", - BucketS3EnvBothMandatory: "If you are using env for accessKeyId or secretAccessKey, both env variables must be set.", - BucketS3RequestFailed: "S3 API request failed: %s", - BucketS3BucketAlreadyExists: "The bucket name already exists under a different object storage user. Set a different bucket name.", - // status info StatusInfoCliDataFilePath: "Zerops CLI data file path", StatusInfoLogFilePath: "Zerops CLI log file path", @@ -248,9 +188,6 @@ var en = map[string]string{ ArgsNotEnoughRequiredArgs: "expected at least %d arg(s), got %d", ArgsTooManyArgs: "expected no more than %d arg(s), got %d", - // logger - LoggerUnableToOpenLogFileWarning: "Failed to open a log file, used path: %s", - // ux helpers ProjectSelectorListEmpty: "You don't have any projects yet. Create a new project using `zcli project import` command.", ProjectSelectorPrompt: "Please, select a project", @@ -283,5 +220,4 @@ more info: https://docs.zerops.io/documentation/cli/authorization.html`, ErrorInvalidScopedProjectId: "Invalid ID of the scoped project [%s], select a different project using `zcli scope project` command.", ErrorInvalidServiceId: "Invalid service ID [%s]", ErrorInvalidServiceIdOrName: "Invalid service ID or name [%s]", - ErrorProjectIsNotActive: "Project is not active", } diff --git a/src/i18n/i18n.go b/src/i18n/i18n.go index 7b2da6a6..4e5c7908 100644 --- a/src/i18n/i18n.go +++ b/src/i18n/i18n.go @@ -15,39 +15,25 @@ func T(textConst string, args ...interface{}) string { const ( // help - DisplayHelp = "DisplayHelp" - GroupHelp = "GroupHelp" - DeployHelp = "DeployHelp" - LogShowHelp = "LogShowHelp" LoginHelp = "LoginHelp" ProjectHelp = "ProjectHelp" - ProjectStartHelp = "ProjectStartHelp" - ProjectStopHelp = "ProjectStopHelp" ProjectListHelp = "ProjectListHelp" ScopeHelp = "ScopeHelp" ScopeProjectHelp = "ScopeProjectHelp" - ScopeServiceHelp = "ScopeServiceHelp" ScopeResetHelp = "ScopeResetHelp" ProjectDeleteHelp = "ProjectDeleteHelp" ProjectImportHelp = "ProjectImportHelp" ProjectServiceImportHelp = "ProjectServiceImportHelp" ServiceHelp = "ServiceHelp" - PushHelp = "PushHelp" - RegionListHelp = "RegionListHelp" ServiceStartHelp = "ServiceStartHelp" ServiceStopHelp = "ServiceStopHelp" - ServiceImportHelp = "ServiceImportHelp" ServiceDeleteHelp = "ServiceDeleteHelp" ServiceLogHelp = "ServiceLogHelp" ServiceDeployHelp = "ServiceDeployHelp" ServiceListHelp = "ServiceListHelp" ServicePushHelp = "ServicePushHelp" - StatusHelp = "StatusHelp" - StatusInfoHelp = "StatusInfoHelp" StatusShowDebugLogsHelp = "StatusShowDebugLogsHelp" VersionHelp = "VersionHelp" - BucketCreateHelp = "BucketCreateHelp" - BucketDeleteHelp = "BucketDeleteHelp" VpnHelp = "VpnHelp" VpnUpHelp = "VpnUpHelp" VpnDownHelp = "VpnDownHelp" @@ -56,20 +42,13 @@ const ( CmdDeployDesc = "CmdDeployDesc" CmdPushDesc = "CmdPushDesc" CmdLogin = "CmdLogin" - CmdStatus = "CmdStatus" - CmdStatusInfo = "CmdStatusInfo" CmdStatusShowDebugLogs = "CmdStatusShowDebugLogs" CmdVersion = "CmdVersion" - CmdRegion = "CmdRegion" - CmdRegionList = "CmdRegionList" CmdProject = "CmdProject" CmdService = "CmdService" - CmdProjectStart = "CmdProjectStart" - CmdProjectStop = "CmdProjectStop" CmdProjectList = "CmdProjectList" CmdScope = "CmdScope" CmdScopeProject = "CmdScopeProject" - CmdScopeService = "CmdScopeService" CmdScopeReset = "CmdScopeReset" CmdProjectDelete = "CmdProjectDelete" CmdProjectImport = "CmdProjectImport" @@ -79,11 +58,6 @@ const ( CmdServiceStop = "CmdServiceStop" CmdServiceDelete = "CmdServiceDelete" CmdServiceLog = "CmdServiceLog" - CmdBucket = "CmdBucket" - CmdBucketZerops = "CmdBucketZerops" - CmdBucketS3 = "" - CmdBucketCreate = "CmdBucketCreate" - CmdBucketDelete = "CmdBucketDelete" CmdVpn = "CmdVpn" CmdVpnUp = "CmdVpnUp" CmdVpnDown = "CmdVpnDown" @@ -116,17 +90,8 @@ const ( ServiceIdFlag = "ServiceIdFlag" ProjectIdFlag = "ProjectIdFlag" - // prompt - PromptEnterZeropsServiceName = "PromptEnterZeropsServiceName" - PromptName = "PromptName" - PromptInvalidInput = "PromptInvalidInput" - PromptInvalidHostname = "PromptInvalidHostname" - // process - ProcessInvalidState = "ProcessInvalidState" - ProcessInvalidStateProcess = "ProcessInvalidStateProcess" - ProcessStart = "ProcessStart" - ProcessEnd = "ProcessEnd" + ProcessInvalidState = "ProcessInvalidState" // archiveClient ArchClientWorkingDirectory = "ArchClientWorkingDirectory" @@ -136,48 +101,26 @@ const ( ArchClientFileAlreadyExists = "ArchClientFileAlreadyExists" // login - LoginSuccess = "LoginSuccess" - LoginIncorrectToken = "LoginIncorrectToken" - RegionUrl = "RegionUrl" + LoginSuccess = "LoginSuccess" // region RegionNotFound = "RegionNotFound" RegionTableColumnName = "RegionTableColumnName" - // client ID - MultipleClientIds = "MultipleClientIds" - AvailableClientIds = "AvailableClientIds" - MissingClientId = "MissingClientId" - // import - YamlCheck = "YamlCheck" - ImportYamlOk = "ImportYamlOk" - ImportYamlEmpty = "ImportYamlEmpty" - ImportYamlTooLarge = "ImportYamlTooLarge" - ImportYamlFound = "ImportYamlFound" - ImportYamlNotFound = "ImportYamlNotFound" - ImportYamlCorrupted = "ImportYamlCorrupted" - ServiceCount = "ServiceCount" - QueuedProcesses = "QueuedProcesses" - CoreServices = "CoreServices" - ReadyToImportServices = "ReadyToImportServices" - - // delete cmd - DeleteCanceledByUser = "DeleteCanceledByUser" + ImportYamlOk = "ImportYamlOk" + ImportYamlEmpty = "ImportYamlEmpty" + ImportYamlTooLarge = "ImportYamlTooLarge" + ImportYamlFound = "ImportYamlFound" + ImportYamlNotFound = "ImportYamlNotFound" + ImportYamlCorrupted = "ImportYamlCorrupted" + ServiceCount = "ServiceCount" + QueuedProcesses = "QueuedProcesses" + CoreServices = "CoreServices" // project + service - ProjectWrongId = "ProjectWrongId" - ProjectsWithSameName = "ProjectsWithSameName" - AvailableProjectIds = "AvailableProjectIds" - ProjectNameOrIdEmpty = "ProjectNameOrIdEmpty" ProjectDeleteConfirm = "ProjectDeleteConfirm" - ServiceNameIsEmpty = "ServiceNameIsEmpty" ServiceDeleteConfirm = "ServiceDeleteConfirm" - ProcessInit = "ProcessInit" - ProjectStarting = "ProjectStarting" - ProjectStarted = "ProjectStarted" - ProjectStopping = "ProjectStopping" - ProjectStopped = "ProjectStopped" ProjectDeleting = "ProjectDeleting" ProjectDeleted = "ProjectDeleted" ServiceStarting = "ServiceStarting" @@ -197,13 +140,8 @@ const ( LogFormatInvalid = "LogFormatInvalid" LogFormatTemplateMismatch = "LogFormatTemplateMismatch" LogFormatStreamMismatch = "LogFormatStreamMismatch" - LogServiceNameInvalid = "LogServiceNameInvalid" LogFormatTemplateInvalid = "LogFormatTemplateInvalid" LogFormatTemplateNoSpace = "LogFormatTemplateNoSpace" - LogSuffixInvalid = "LogSuffixInvalid" - LogRuntimeOnly = "LogRuntimeOnly" - LogNoContainerFound = "LogNoContainerFound" - LogTooFewContainers = "LogTooFewContainers" LogNoBuildFound = "LogNoBuildFound" LogBuildStatusUploading = "LogBuildStatusUploading" LogAccessFailed = "LogAccessFailed" @@ -216,7 +154,6 @@ const ( // deploy DeployHintPush = "DeployHintPush" - BuildDeployServiceStatus = "BuildDeployServiceStatus" BuildDeployCreatingPackageStart = "BuildDeployCreatingPackageStart" BuildDeployCreatingPackageDone = "BuildDeployCreatingPackageDone" BuildDeployPackageSavedInto = "BuildDeployPackageSavedInto" @@ -229,28 +166,6 @@ const ( BuildDeployZeropsYamlFound = "BuildDeployZeropsYamlFound" BuildDeployZeropsYamlNotFound = "BuildDeployZeropsYamlNotFound" - // s3 - BucketGenericXAmzAcl = "BucketGenericXAmzAcl" - BucketGenericXAmzAclInvalid = "BucketGenericXAmzAclInvalid" - BucketGenericOnlyForObjectStorage = "BucketGenericOnlyForObjectStorage" - BucketGenericBucketNamePrefixed = "BucketGenericBucketNamePrefixed" - - BucketCreated = "BucketCreated" - BucketCreateCreatingDirect = "BucketCreateCreatingDirect" - BucketCreateCreatingZeropsApi = "BucketCreateCreatingZeropsApi" - - BucketDeleteConfirm = "BucketDeleteConfirm" - BucketDeleted = "BucketDeleted" - BucketDeleteDeletingDirect = "BucketDeleteDeletingDirect" - BucketDeleteDeletingZeropsApi = "BucketDeleteDeletingZeropsApi" - - BucketS3AccessKeyId = "AccessKeyId" - BucketS3SecretAccessKey = "SecretAccessKey" - BucketS3FlagBothMandatory = "FlagBothMandatory" - BucketS3EnvBothMandatory = "EnvBothMandatory" - BucketS3RequestFailed = "RequestFailed" - BucketS3BucketAlreadyExists = "BucketAlreadyExists" - // status info StatusInfoCliDataFilePath = "StatusInfoCliDataFilePath" StatusInfoLogFilePath = "StatusInfoLogFilePath" @@ -285,9 +200,6 @@ const ( ArgsNotEnoughRequiredArgs = "ArgsNotEnoughRequiredArgs" ArgsTooManyArgs = "ArgsTooManyArgs" - // logger - LoggerUnableToOpenLogFileWarning = "LoggerUnableToOpenLogFileWarning" - // ux helpers ProjectSelectorListEmpty = "ProjectSelectorListEmpty" ProjectSelectorPrompt = "ProjectSelectorPrompt" @@ -313,17 +225,9 @@ const ( DestructiveOperationConfirmationFailed = "DestructiveOperationConfirmationFailed" - HintChangeRegion = "HintChangeRegion" - ScopedServiceNotFound = "ScopedServiceNotFound" - ProjectIdInvalidFormat = "ProjectIdInvalidFormat" - ProjectNotFound = "ProjectNotFound" - ServiceIdInvalidFormat = "ServiceIdInvalidFormat" - ServiceNotFound = "ServiceNotFound" - // errors ErrorInvalidProjectId = "ErrorInvalidProjectId" ErrorInvalidScopedProjectId = "ErrorInvalidScopedProjectId" ErrorInvalidServiceId = "ErrorInvalidServiceId" ErrorInvalidServiceIdOrName = "ErrorInvalidServiceIdOrName" - ErrorProjectIsNotActive = "ErrorProjectIsNotActive" )