github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/removeAddress.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/hypervisor" 11 ) 12 13 func removeIpAddressSubcommand(args []string, logger log.DebugLogger) error { 14 ipAddr := net.ParseIP(args[0]) 15 if len(ipAddr) < 4 { 16 return fmt.Errorf("Invalid IP address: %s", args[0]) 17 } 18 err := removeAddress(proto.Address{IpAddress: ipAddr}, logger) 19 if err != nil { 20 return fmt.Errorf("Error removing IP address: %s", err) 21 } 22 return nil 23 } 24 25 func removeMacAddressSubcommand(args []string, logger log.DebugLogger) error { 26 address := proto.Address{MacAddress: args[0]} 27 err := removeAddress(address, logger) 28 if err != nil { 29 return fmt.Errorf("Error removing MAC address: %s", err) 30 } 31 return nil 32 } 33 34 func removeAddress(address proto.Address, logger log.DebugLogger) error { 35 address.Shrink() 36 request := proto.ChangeAddressPoolRequest{ 37 AddressesToRemove: []proto.Address{address}} 38 var reply proto.ChangeAddressPoolResponse 39 clientName := fmt.Sprintf("%s:%d", *hypervisorHostname, *hypervisorPortNum) 40 client, err := srpc.DialHTTP("tcp", clientName, 0) 41 if err != nil { 42 return err 43 } 44 defer client.Close() 45 err = client.RequestReply("Hypervisor.ChangeAddressPool", request, &reply) 46 if err != nil { 47 return err 48 } 49 return errors.New(reply.Error) 50 }