81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
/*
|
|
Copyright © 2025 Jake jake.young.dev@gmail.com
|
|
*/
|
|
package command
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"code.jakeyoungdev.com/jake/mctl/client"
|
|
"code.jakeyoungdev.com/jake/mctl/database"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
cfgserver string
|
|
)
|
|
|
|
var runCmd = &cobra.Command{
|
|
Use: "run",
|
|
Example: "mctl command run -s <server> <command> args...",
|
|
Short: "Runs a saved command on a server",
|
|
Long: `Runs the named command with the provided args on the default/active server unless -s is specified`,
|
|
SilenceUsage: true,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
cname := args[0]
|
|
|
|
db, err := database.New()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer db.Close()
|
|
|
|
crun, err := db.GetCmd(cname)
|
|
if err.Error() == ErrInit {
|
|
fmt.Println(ErrInitRsp)
|
|
return nil
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
count := strings.Count(crun, "%s")
|
|
l := len(args)
|
|
if l-1 != count {
|
|
return fmt.Errorf("not enough arguments to fill all command placeholders, required: %d - have: %d", count, l)
|
|
}
|
|
|
|
cli, err := client.New(cfgserver)
|
|
cobra.CheckErr(err)
|
|
defer cli.Close()
|
|
|
|
var fargs []any
|
|
for _, x := range args[1:] {
|
|
fargs = append(fargs, x)
|
|
}
|
|
|
|
res, err := cli.Command(fmt.Sprintf(crun, fargs...))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println(res)
|
|
|
|
return nil
|
|
},
|
|
PreRunE: func(cmd *cobra.Command, args []string) error {
|
|
if len(args) == 0 {
|
|
return errors.New("name parameter required")
|
|
}
|
|
|
|
return nil
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
runCmd.Flags().StringVarP(&cfgserver, "server", "s", "", "server name")
|
|
CommandCmd.AddCommand(runCmd)
|
|
}
|