github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/removeExcessAddresses.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "strconv" 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 removeExcessAddressesSubcommand(args []string, 14 logger log.DebugLogger) error { 15 err := removeExcessAddresses(args[0], logger) 16 if err != nil { 17 return fmt.Errorf("Error removing excess addresses: %s", err) 18 } 19 return nil 20 } 21 22 func removeExcessAddresses(maxAddr string, logger log.DebugLogger) error { 23 maxAddresses, err := strconv.ParseUint(maxAddr, 10, 16) 24 if err != nil { 25 return err 26 } 27 request := proto.ChangeAddressPoolRequest{ 28 MaximumFreeAddresses: map[string]uint{"": uint(maxAddresses)}} 29 var reply proto.ChangeAddressPoolResponse 30 clientName := fmt.Sprintf("%s:%d", *hypervisorHostname, *hypervisorPortNum) 31 client, err := srpc.DialHTTP("tcp", clientName, 0) 32 if err != nil { 33 return err 34 } 35 defer client.Close() 36 err = client.RequestReply("Hypervisor.ChangeAddressPool", 37 request, &reply) 38 if err != nil { 39 return err 40 } 41 return errors.New(reply.Error) 42 }