diff --git a/src/client_cli/cmdTemplate/helper.go b/src/client_cli/cmdTemplate/helper.go index 422db600e92e0634e736d36c0565d95b5704dd01..e6e996116ecf218a6b4e8db7194b4e43c733773e 100644 --- a/src/client_cli/cmdTemplate/helper.go +++ b/src/client_cli/cmdTemplate/helper.go @@ -37,9 +37,9 @@ func printUsage(c cmd.Command) { Any number of IDs or regexes can be specified. The regex only matches the templates's name and is case-insensitive. Regex examples: - "" -> matches any templates - "." -> matches any templates - "bla" -> matches any templates containing "bla"` +"" -> matches any templates +"." -> matches any templates +"bla" -> matches any templates containing "bla"` u.PrintlnErr(usage) } diff --git a/src/client_cli/cmdUser/helper.go b/src/client_cli/cmdUser/helper.go index 118b54d638869d0f33d321d54c650df55761a544..001f99bafccdf4052b778569ac28b9f3c79217f7 100644 --- a/src/client_cli/cmdUser/helper.go +++ b/src/client_cli/cmdUser/helper.go @@ -39,9 +39,9 @@ func printUsage(c cmd.Command) { Any number of regexes can be specified. The regex matches the user email, first name and last name and is case-insensitive. Regex examples: - "" -> matches any users - "." -> matches any users - "bla" -> matches any users containing "bla"` +"" -> matches any users +"." -> matches any users +"bla" -> matches any users containing "bla"` u.PrintlnErr(usage) } diff --git a/src/client_cli/cmdVM/helper.go b/src/client_cli/cmdVM/helper.go index 48793cc04c65eda8ea552a8fb0d97487fd67ede7..5e33c496c6c144673cf6a5e9fe71de19474124c4 100644 --- a/src/client_cli/cmdVM/helper.go +++ b/src/client_cli/cmdVM/helper.go @@ -59,9 +59,9 @@ func printUsage(c cmd.Command, action string) { const usage string = `Any number of IDs or regexes can be specified. The regex only matches the VM's name and is case-insensitive. Regex examples: - "" -> matches any VMs - "." -> matches any VMs - "bla" -> matches any VMs containing "bla" in their name` +"" -> matches any VMs +"." -> matches any VMs +"bla" -> matches any VMs containing "bla" in their name` u.PrintlnErr(usage) } diff --git a/src/client_cli/cmdVM/vmAttach.go b/src/client_cli/cmdVM/vmAttach.go index d9c7708a659732ee43d7669df70b566ab77db379..26076a538ed60be7d698a8d8866ef15b4551a8c9 100644 --- a/src/client_cli/cmdVM/vmAttach.go +++ b/src/client_cli/cmdVM/vmAttach.go @@ -43,7 +43,7 @@ func (cmd *Attach)Run(args []string) int { id := args[0] - resp, err := client.R().Get(host+"/vms/"+id+"/list") + resp, err := client.R().Get(host+"/vms/"+id) if err != nil { u.PrintlnErr("Error: "+err.Error()) return 1 diff --git a/src/client_cli/cmdVM/vmEdit.go b/src/client_cli/cmdVM/vmEdit.go index bc5edaf0789934dac9430c03cc5dc5bbdda0be62..aa8ba536be7d86f61551d49fa2465922bfebf799 100644 --- a/src/client_cli/cmdVM/vmEdit.go +++ b/src/client_cli/cmdVM/vmEdit.go @@ -12,7 +12,7 @@ type Edit struct { Name string } -type vmArgsParameters struct { +type vmEditParameters struct { Name string Cpus int Ram int @@ -29,11 +29,19 @@ func (cmd *Edit)GetDesc() string { func (cmd *Edit)PrintUsage() { u.PrintlnErr(cmd.GetDesc()) - u.PrintlnErr("Usage: "+cmd.Name+" vmID [name=\"new name\"] [cpus=n] [ram=n] [nic=none/user]") - u.PrintlnErr("Parameters between [] are optional, but at least one must be defined.") - u.PrintlnErr("cpus must be between 1 and 16") - u.PrintlnErr("ram must be between 512 and 32768") - u.PrintlnErr("nic must be either \"none\" or \"user\"") + u.PrintlnErr("Usage: "+cmd.GetName()+" [ID ...] [regex ...] [name=\"new name\"] [cpus=n] [ram=n] [nic=none/user]") + u.PrintlnErr("Only VMs matching the specified IDs or regexes will be edited.") + const usage string = `Any number of IDs or regexes can be specified. +The regex only matches the VM's name and is case-insensitive. +Regex examples: +"" -> matches any VMs +"." -> matches any VMs +"bla" -> matches any VMs containing "bla" in their name +VM parameters that can be edited are the following: +cpus must be between 1 and 16 +ram must be between 512 and 32768 +nic must be either "none" or "user` + u.PrintlnErr(usage) } func (cmd *Edit)getStringVal(s string, prefix string) string { @@ -44,45 +52,52 @@ func (cmd *Edit)getStringVal(s string, prefix string) string { return "" } -func (cmd *Edit)parseArgs(args []string) (*vmArgsParameters, error) { - vmArgs := &vmArgsParameters {} +func (cmd *Edit)parseArgs(args []string) (*vmEditParameters, []string, error) { + vmParams := &vmEditParameters {} + var regex []string atLeastOneArg := false for _, arg := range args { s := cmd.getStringVal(arg, "name=") if s != "" { - vmArgs.Name = s + vmParams.Name = s atLeastOneArg = true + continue } s = cmd.getStringVal(arg, "cpus=") if s != "" { cpus, err := strconv.Atoi(s) if err != nil { - return nil, errors.New("Invalid number of CPU(s)") + return nil, nil, errors.New("Invalid number of CPU(s)") } - vmArgs.Cpus = cpus + vmParams.Cpus = cpus atLeastOneArg = true + continue } s = cmd.getStringVal(arg, "ram=") if s != "" { ram, err := strconv.Atoi(s) if err != nil { - return nil, errors.New("Invalid amount of RAM") + return nil, nil, errors.New("Invalid amount of RAM") } - vmArgs.Ram = ram + vmParams.Ram = ram atLeastOneArg = true + continue } s = cmd.getStringVal(arg, "nic=") if s != "" { - vmArgs.Nic = s + vmParams.Nic = s atLeastOneArg = true + continue } + + regex = append(regex, arg) } if atLeastOneArg { - return vmArgs, nil + return vmParams, regex, nil } else { - return nil, nil + return nil, nil, nil } } @@ -91,34 +106,46 @@ func (cmd *Edit)Run(args []string) int { host := g.GetInstance().Host argc := len(args) - if argc < 2 || argc > 5 { + if argc < 1 { cmd.PrintUsage() return 1 } - id := args[0] - vmArgs, err := cmd.parseArgs(args[1:]) + vmParams, regex, err := cmd.parseArgs(args) if err != nil { u.PrintlnErr(err.Error()) return 1 } - if vmArgs == nil { + if vmParams == nil { cmd.PrintUsage() return 1 } - resp, err := client.R().SetBody(vmArgs).Put(host+"/vms/"+id) + vms, err := getFilteredVMs("/vms/edit", regex) if err != nil { - u.PrintlnErr("Error: "+err.Error()) + u.PrintlnErr(err.Error()) return 1 } - if resp.IsSuccess() { - u.Println(resp) - return 0 - } else { - u.PrintlnErr("Error: "+resp.Status()+": "+resp.String()) - return 1 + statusCode := 0 + + for _, vm := range(vms) { + uuid := vm.ID.String() + resp, err := client.R().SetBody(vmParams).Put(host+"/vms/"+uuid) + if err != nil { + u.PrintlnErr("Failed editing VM \""+vm.Name+"\" ("+uuid+"): "+err.Error()) + statusCode = 1 + } else { + if resp.IsSuccess() { + u.Println("Edited VM \""+vm.Name+"\" ("+uuid+")") + } else { + u.PrintlnErr("Failed editing VM \""+vm.Name+"\" ("+uuid+"): "+resp.Status()+": "+resp.String()) + statusCode = 1 + } + } + } + + return statusCode }