mirror of https://github.com/shunfei/cronsun
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/shunfei/cronsun"
|
|
)
|
|
|
|
var (
|
|
nodeCmd string
|
|
nodeInclude string
|
|
nodeExclude string
|
|
|
|
spliter = ","
|
|
)
|
|
|
|
func init() {
|
|
NodeCmd.Flags().StringVar(&nodeCmd, "cmd", "", "the command send to node")
|
|
NodeCmd.Flags().StringVar(&nodeInclude, "include", "", "the node ids that needs to execute the command, split by ',', e.g: '--include=aa,bb,cc', empty means all nodes")
|
|
NodeCmd.Flags().StringVar(&nodeExclude, "exclude", "", "the node ids that doesn't need to execute the command, split by ',', e.g: '--exclude=aa,bb,cc', empty means none")
|
|
}
|
|
|
|
var NodeCmd = &cobra.Command{
|
|
Use: "node",
|
|
Short: "Send some commands to nodes",
|
|
Long: `Send a command to nodes and execute it.
|
|
|
|
Available Commands:
|
|
rmold: remove old version(< 0.3.0) node info from mongodb and etcd
|
|
sync: sync node info to mongodb
|
|
`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
ea := NewExitAction()
|
|
ea.After = func() {
|
|
fmt.Println()
|
|
cmd.Help()
|
|
}
|
|
nc, err := cronsun.ToNodeCmd(nodeCmd)
|
|
if err != nil {
|
|
ea.Exit(err.Error() + ": " + nodeCmd)
|
|
}
|
|
|
|
var include, exclude []string
|
|
if len(nodeInclude) > 0 {
|
|
include = strings.Split(nodeInclude, spliter)
|
|
}
|
|
if len(nodeExclude) > 0 {
|
|
exclude = strings.Split(nodeExclude, spliter)
|
|
}
|
|
|
|
err = cronsun.PutCsctl(&cronsun.CsctlCmd{
|
|
Cmd: nc,
|
|
Include: include,
|
|
Exclude: exclude,
|
|
})
|
|
if err != nil {
|
|
ea.ExitOnErr(err)
|
|
}
|
|
|
|
fmt.Printf("command[%s] send success\n", nodeCmd)
|
|
},
|
|
}
|