github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/vm-control/changeVmSize.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net" 6 7 hyperclient "github.com/Cloud-Foundations/Dominator/hypervisor/client" 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 10 ) 11 12 func changeVmCPUsSubcommand(args []string, logger log.DebugLogger) error { 13 req := proto.ChangeVmSizeRequest{MilliCPUs: *milliCPUs} 14 if err := changeVmSize(args[0], req, logger); err != nil { 15 return fmt.Errorf("error changing VM CPUs: %s", err) 16 } 17 return nil 18 } 19 20 func changeVmMemorySubcommand(args []string, logger log.DebugLogger) error { 21 req := proto.ChangeVmSizeRequest{MemoryInMiB: uint64(memory >> 20)} 22 if err := changeVmSize(args[0], req, logger); err != nil { 23 return fmt.Errorf("error changing VM memory: %s", err) 24 } 25 return nil 26 } 27 28 func changeVmVirtualCPUsSubcommand(args []string, 29 logger log.DebugLogger) error { 30 req := proto.ChangeVmSizeRequest{VirtualCPUs: *virtualCPUs} 31 if err := changeVmSize(args[0], req, logger); err != nil { 32 return fmt.Errorf("error changing VM memory: %s", err) 33 } 34 return nil 35 } 36 37 func changeVmSize(vmHostname string, req proto.ChangeVmSizeRequest, 38 logger log.DebugLogger) error { 39 if vmIP, hypervisor, err := lookupVmAndHypervisor(vmHostname); err != nil { 40 return err 41 } else { 42 return changeVmSizeOnHypervisor(hypervisor, vmIP, req, logger) 43 } 44 } 45 46 func changeVmSizeOnHypervisor(hypervisor string, ipAddr net.IP, 47 req proto.ChangeVmSizeRequest, logger log.DebugLogger) error { 48 client, err := dialHypervisor(hypervisor) 49 if err != nil { 50 return err 51 } 52 defer client.Close() 53 req.IpAddress = ipAddr 54 return hyperclient.ChangeVmSize(client, req) 55 }