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  }