From b943a8b9b166ee60b8f9d9d8811845a36550d102 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Wed, 30 Mar 2022 11:30:36 +0200 Subject: [PATCH 1/3] feat: allow choosing user on remote commands --- cli/app/cmd.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cli/app/cmd.go b/cli/app/cmd.go index 12295b94..32fc0545 100644 --- a/cli/app/cmd.go +++ b/cli/app/cmd.go @@ -32,6 +32,14 @@ var localCmdFlag = &cli.BoolFlag{ Destination: &localCmd, } +var remoteUser string +var remoteUserFlag = &cli.StringFlag{ + Name: "user, u", + Value: "", + Usage: "User to run command within a service context", + Destination: &remoteUser, +} + var appCmdCommand = cli.Command{ Name: "command", Aliases: []string{"cmd"}, @@ -52,6 +60,7 @@ Example: Flags: []cli.Flag{ internal.DebugFlag, localCmdFlag, + remoteUserFlag, }, BashComplete: autocomplete.AppNameComplete, Before: internal.SubCommandBefore, @@ -200,6 +209,11 @@ func runCmdRemote(app config.App, abraSh, serviceName, cmdName, cmdArgs string) Tty: true, } + if remoteUser != "" { + logrus.Debugf("running command with user %s", remoteUser) + execCreateOpts.User = remoteUser + } + // FIXME: avoid instantiating a new CLI dcli, err := command.NewDockerCli() if err != nil { -- 2.49.0 From 0e23ec53d7a4300786780e1d16a679a0aa1e0ca1 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Wed, 30 Mar 2022 11:30:51 +0200 Subject: [PATCH 2/3] refactor!: simple validation only --- cli/app/cmd.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cli/app/cmd.go b/cli/app/cmd.go index 32fc0545..7f57dcb8 100644 --- a/cli/app/cmd.go +++ b/cli/app/cmd.go @@ -67,12 +67,8 @@ Example: Action: func(c *cli.Context) error { app := internal.ValidateApp(c) - if len(c.Args()) <= 2 && !localCmd { - internal.ShowSubcommandHelpAndError(c, errors.New("missing /? did you mean to pass --local?")) - } - - if len(c.Args()) > 2 && localCmd { - internal.ShowSubcommandHelpAndError(c, errors.New("cannot specify and --local together")) + if localCmd && remoteUser != "" { + internal.ShowSubcommandHelpAndError(c, errors.New("cannot use --local & together")) } abraSh := path.Join(config.RECIPES_DIR, app.Recipe, "abra.sh") -- 2.49.0 From e8e41850b50ff2c4840b8e0ce15ec5f820a18dd6 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Wed, 30 Mar 2022 11:31:16 +0200 Subject: [PATCH 3/3] fix: pass args to local function invocations too --- cli/app/cmd.go | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/cli/app/cmd.go b/cli/app/cmd.go index 7f57dcb8..36cbf1da 100644 --- a/cli/app/cmd.go +++ b/cli/app/cmd.go @@ -79,6 +79,20 @@ Example: logrus.Fatal(err) } + var parsedCmdArgs string + var cmdArgsIdx int + var hasCmdArgs bool + for idx, arg := range c.Args() { + if arg == "--" { + cmdArgsIdx = idx + hasCmdArgs = true + } + + if hasCmdArgs && idx > cmdArgsIdx { + parsedCmdArgs += fmt.Sprintf("%s ", c.Args().Get(idx)) + } + } + if localCmd { cmdName := c.Args().Get(1) if err := ensureCommand(abraSh, app.Recipe, cmdName); err != nil { @@ -87,8 +101,17 @@ Example: logrus.Debugf("--local detected, running %s on local work station", cmdName) - sourceAndExec := fmt.Sprintf("TARGET=local; APP_NAME=%s; . %s; %s", app.StackName(), abraSh, cmdName) + var sourceAndExec string + if hasCmdArgs { + logrus.Debugf("parsed following command arguments: %s", parsedCmdArgs) + sourceAndExec = fmt.Sprintf("TARGET=local; APP_NAME=%s; . %s; %s %s", app.StackName(), abraSh, cmdName, parsedCmdArgs) + } else { + logrus.Debug("did not detect any command arguments") + sourceAndExec = fmt.Sprintf("TARGET=local; APP_NAME=%s; . %s; %s", app.StackName(), abraSh, cmdName) + } + cmd := exec.Command("/bin/sh", "-c", sourceAndExec) + if err := internal.RunCmd(cmd); err != nil { logrus.Fatal(err) } @@ -118,20 +141,6 @@ Example: logrus.Debugf("running command %s within the context of %s_%s", cmdName, app.StackName(), targetServiceName) - var parsedCmdArgs string - var cmdArgsIdx int - var hasCmdArgs bool - for idx, arg := range c.Args() { - if arg == "--" { - cmdArgsIdx = idx - hasCmdArgs = true - } - - if hasCmdArgs && idx > cmdArgsIdx { - parsedCmdArgs += fmt.Sprintf("%s ", c.Args().Get(idx)) - } - } - if hasCmdArgs { logrus.Debugf("parsed following command arguments: %s", parsedCmdArgs) } else { -- 2.49.0