github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/moveIpAddress.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net" 6 7 "github.com/Cloud-Foundations/Dominator/lib/errors" 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 "github.com/Cloud-Foundations/Dominator/lib/srpc" 10 proto "github.com/Cloud-Foundations/Dominator/proto/fleetmanager" 11 ) 12 13 func moveIpAddressSubcommand(args []string, logger log.DebugLogger) error { 14 if err := moveIpAddress(args[0], logger); err != nil { 15 return fmt.Errorf("Error moving IP address: %s", err) 16 } 17 return nil 18 } 19 20 func moveIpAddress(addr string, logger log.DebugLogger) error { 21 ipAddr := net.ParseIP(addr) 22 if len(ipAddr) < 4 { 23 return fmt.Errorf("invalid IP address: %s", addr) 24 } 25 request := proto.MoveIpAddressesRequest{ 26 HypervisorHostname: *hypervisorHostname, 27 IpAddresses: []net.IP{ipAddr}, 28 } 29 var reply proto.MoveIpAddressesResponse 30 clientName := fmt.Sprintf("%s:%d", 31 *fleetManagerHostname, *fleetManagerPortNum) 32 client, err := srpc.DialHTTPWithDialer("tcp", clientName, rrDialer) 33 if err != nil { 34 return err 35 } 36 defer client.Close() 37 err = client.RequestReply("FleetManager.MoveIpAddresses", request, &reply) 38 if err != nil { 39 return err 40 } 41 return errors.New(reply.Error) 42 }