--user/-u for abra app cmd; pass function arguments for --local #172
@ -32,6 +32,14 @@ var localCmdFlag = &cli.BoolFlag{
|
|||||||
Destination: &localCmd,
|
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{
|
var appCmdCommand = cli.Command{
|
||||||
Name: "command",
|
Name: "command",
|
||||||
Aliases: []string{"cmd"},
|
Aliases: []string{"cmd"},
|
||||||
@ -52,18 +60,15 @@ Example:
|
|||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
internal.DebugFlag,
|
internal.DebugFlag,
|
||||||
localCmdFlag,
|
localCmdFlag,
|
||||||
|
remoteUserFlag,
|
||||||
},
|
},
|
||||||
BashComplete: autocomplete.AppNameComplete,
|
BashComplete: autocomplete.AppNameComplete,
|
||||||
Before: internal.SubCommandBefore,
|
Before: internal.SubCommandBefore,
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
app := internal.ValidateApp(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if len(c.Args()) <= 2 && !localCmd {
|
if localCmd && remoteUser != "" {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("missing <service>/<command>? did you mean to pass --local?"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use --local & <user> together"))
|
||||||
}
|
|
||||||
|
|
||||||
if len(c.Args()) > 2 && localCmd {
|
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("cannot specify <service> and --local together"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abraSh := path.Join(config.RECIPES_DIR, app.Recipe, "abra.sh")
|
abraSh := path.Join(config.RECIPES_DIR, app.Recipe, "abra.sh")
|
||||||
@ -74,6 +79,20 @@ Example:
|
|||||||
logrus.Fatal(err)
|
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 {
|
if localCmd {
|
||||||
cmdName := c.Args().Get(1)
|
cmdName := c.Args().Get(1)
|
||||||
if err := ensureCommand(abraSh, app.Recipe, cmdName); err != nil {
|
if err := ensureCommand(abraSh, app.Recipe, cmdName); err != nil {
|
||||||
@ -82,8 +101,17 @@ Example:
|
|||||||
|
|
||||||
logrus.Debugf("--local detected, running %s on local work station", cmdName)
|
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)
|
cmd := exec.Command("/bin/sh", "-c", sourceAndExec)
|
||||||
|
|
||||||
if err := internal.RunCmd(cmd); err != nil {
|
if err := internal.RunCmd(cmd); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -113,20 +141,6 @@ Example:
|
|||||||
|
|
||||||
logrus.Debugf("running command %s within the context of %s_%s", cmdName, app.StackName(), targetServiceName)
|
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 {
|
if hasCmdArgs {
|
||||||
logrus.Debugf("parsed following command arguments: %s", parsedCmdArgs)
|
logrus.Debugf("parsed following command arguments: %s", parsedCmdArgs)
|
||||||
} else {
|
} else {
|
||||||
@ -200,6 +214,11 @@ func runCmdRemote(app config.App, abraSh, serviceName, cmdName, cmdArgs string)
|
|||||||
Tty: true,
|
Tty: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if remoteUser != "" {
|
||||||
|
logrus.Debugf("running command with user %s", remoteUser)
|
||||||
|
execCreateOpts.User = remoteUser
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: avoid instantiating a new CLI
|
// FIXME: avoid instantiating a new CLI
|
||||||
dcli, err := command.NewDockerCli()
|
dcli, err := command.NewDockerCli()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user