/* 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 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`, 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 != 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) }