diff --git a/src/client_cli/vmEdit.go b/src/client_cli/vmEdit.go new file mode 100644 index 0000000000000000000000000000000000000000..712199e616cb71790ff187b2773762d90cc93c15 --- /dev/null +++ b/src/client_cli/vmEdit.go @@ -0,0 +1,93 @@ +package main + +import ( + "strconv" + "strings" +) + +type CmdVMEdit struct{ + name string +} + +func (cmd *CmdVMEdit)Name() string { + return cmd.name +} + +func (cmd *CmdVMEdit)Desc() string { + return "Create a VM" +} + +func (cmd *CmdVMEdit)PrintUsage() { + printlnErr("Usage: "+cmd.name+" vmID [name=\"new name\"] [cpus=n] [ram=n] [nic=none/user]") + printlnErr("Parameters between [] are optional, but at least one must be defined.") +} + +func getStringVal(s string, prefix string) string { + if strings.HasPrefix(s, prefix) { + parts := strings.Split(s, prefix) + return parts[1] + } + return "" +} + +func (cmd *CmdVMEdit)Run(args []string) int { + argc := len(args) + if argc < 2 || argc > 5 { + cmd.PrintUsage() + return 1 + } + + type VMArgs struct { + Name string + Cpus int + Ram int + Nic string + } + + vmArgs := &VMArgs {} + + id := args[0] + + for _, arg := range args { + s := getStringVal(arg, "name=") + if s != "" { + vmArgs.Name = s + } + s = getStringVal(arg, "cpus=") + if s != "" { + cpus, err := strconv.Atoi(s) + if err != nil { + printlnErr("Invalid number of CPU(s)") + return 1 + } + vmArgs.Cpus = cpus + } + s = getStringVal(arg, "ram=") + if s != "" { + ram, err := strconv.Atoi(s) + if err != nil { + printlnErr("Invalid amount of RAM") + return 1 + } + vmArgs.Ram = ram + } + s = getStringVal(arg, "nic=") + if s != "" { + vmArgs.Nic = s + } + } + + resp, err := client.R().SetBody(vmArgs).Put(host+"/vms/"+id) + if err != nil { + printlnErr("Error: "+err.Error()) + return 1 + } + + if resp.IsSuccess() { + println(resp) + return 0 + } else { + printlnErr("Error: "+resp.Status()+": "+resp.String()) + return 1 + } +}