Skip to content
Snippets Groups Projects
Select Git revision
  • 7ae5eed0ed1509cbd54ae8c603c56faf4836b439
  • live_exam_os_ubuntu default protected
2 results

vmStop.go

Blame
  • vmStop.go 1.21 KiB
    package cmdVM
    
    import (
    	u "nexus-client/utils"
    	g "nexus-client/globals"
    )
    
    type Stop struct {
        Name string
    }
    
    func (cmd *Stop)GetName() string {
    	return cmd.Name
    }
     
    func (cmd *Stop)GetDesc() []string {
    	return []string{
    		"Stops by force one or more VMs (regex).",
    		"Requires VM_STOP VM access capability or VM_STOP_ANY user capability."}
    }
    
    func (cmd *Stop)PrintUsage() {
    	printRegexUsage(cmd)
    	printRegexUsageDetails()
    }
    
    func (cmd *Stop)Run(args []string) int {
    	client := g.GetInstance().Client
    	host := g.GetInstance().Host
    
    	argc := len(args)
    	if argc < 1 {
    		cmd.PrintUsage()
    		return 1
    	}
    
    	vms, err := getFilteredVMs("/vms/stop", args)
    	if err != nil {
    		u.PrintlnErr(err.Error())
    		return 1
    	}
    
    	if len(vms) == 0 {
    		u.PrintlnErr("No match.")
    		return 1
    	}
    
    	statusCode := 0
    
    	for _, vm := range(vms) {
    		uuid := vm.ID.String()
    		resp, err := client.R().Put(host+"/vms/"+uuid+"/stop")
    		if err != nil {
    			u.PrintlnErr("Failed stopping VM \""+vm.Name+"\": "+err.Error())
    			statusCode = 1
    		} else {
    			if resp.IsSuccess() {
    				u.Println("Stopped VM \""+vm.Name+"\"")
    			} else {
    				u.PrintlnErr("Failed stopping VM \""+vm.Name+"\": "+resp.Status()+": "+resp.String())
    				statusCode = 1
    			}
    		}
    
    	}
    
    	return statusCode
    }