github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/vm-control/replaceVmCredentials.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"net"
     7  
     8  	"github.com/Cloud-Foundations/Dominator/lib/errors"
     9  	"github.com/Cloud-Foundations/Dominator/lib/log"
    10  	proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor"
    11  )
    12  
    13  func replaceVmCredentialsSubcommand(args []string,
    14  	logger log.DebugLogger) error {
    15  	if err := replaceVmCredentials(args[0], logger); err != nil {
    16  		return fmt.Errorf("error replacing VM credentials: %s", err)
    17  	}
    18  	return nil
    19  }
    20  
    21  func replaceVmCredentials(vmHostname string, logger log.DebugLogger) error {
    22  	if vmIP, hypervisor, err := lookupVmAndHypervisor(vmHostname); err != nil {
    23  		return err
    24  	} else {
    25  		return replaceVmCredentialsOnHypervisor(hypervisor, vmIP, logger)
    26  	}
    27  }
    28  
    29  func replaceVmCredentialsOnHypervisor(hypervisor string, ipAddr net.IP,
    30  	logger log.DebugLogger) error {
    31  	identityCert, err := ioutil.ReadFile(*identityCertFile)
    32  	if err != nil {
    33  		return err
    34  	}
    35  	identityKey, err := ioutil.ReadFile(*identityKeyFile)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	request := proto.ReplaceVmCredentialsRequest{
    40  		IdentityCertificate: identityCert,
    41  		IdentityKey:         identityKey,
    42  		IpAddress:           ipAddr,
    43  	}
    44  	client, err := dialHypervisor(hypervisor)
    45  	if err != nil {
    46  		return err
    47  	}
    48  	defer client.Close()
    49  	var response proto.ReplaceVmCredentialsResponse
    50  	err = client.RequestReply("Hypervisor.ReplaceVmCredentials", request,
    51  		&response)
    52  	if err != nil {
    53  		return err
    54  	}
    55  	return errors.New(response.Error)
    56  }