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 }