56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"git.andrewnw.xyz/CyberShell/backy/pkg/backy"
|
|
"git.andrewnw.xyz/CyberShell/backy/pkg/logging"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
hostsExecCommand = &cobra.Command{
|
|
Use: "hosts [--command=command1 --command=command2 ... | -c command1 -c command2 ...]",
|
|
Short: "Runs command defined in config file on the hosts in order specified.",
|
|
Long: "Hosts executes specified commands on all the hosts defined in config file.\nUse the --commands or -c flag to choose the commands.",
|
|
Run: Hosts,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
|
|
hostsExecCommand.Flags().StringArrayVarP(&cmdList, "command", "c", nil, "Accepts space-separated names of commands. Specify multiple times for multiple commands.")
|
|
parseS3Config()
|
|
|
|
}
|
|
|
|
// cli input should be hosts and commands. Hosts are defined in config files.
|
|
// commands can be passed by the following mutually exclusive options:
|
|
// 1. as a list of commands defined in the config file
|
|
// 2. stdin (on command line) (TODO)
|
|
|
|
func Hosts(cmd *cobra.Command, args []string) {
|
|
backyConfOpts := backy.NewConfigOptions(configFile,
|
|
backy.SetLogFile(logFile),
|
|
backy.EnableCommandStdOut(cmdStdOut),
|
|
backy.SetHostsConfigFile(hostsConfigFile))
|
|
backyConfOpts.InitConfig()
|
|
|
|
backyConfOpts.ParseConfigurationFile()
|
|
|
|
for _, h := range backyConfOpts.Hosts {
|
|
|
|
hostsList = append(hostsList, h.Host)
|
|
}
|
|
|
|
if cmdList == nil {
|
|
logging.ExitWithMSG("error: commands must be specified", 1, &backyConfOpts.Logger)
|
|
}
|
|
for _, c := range cmdList {
|
|
_, cmdFound := backyConfOpts.Cmds[c]
|
|
if !cmdFound {
|
|
logging.ExitWithMSG("cmd "+c+" not found", 1, &backyConfOpts.Logger)
|
|
}
|
|
}
|
|
|
|
backyConfOpts.ExecCmdsOnHosts(cmdList, hostsList)
|
|
}
|