github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/addAddress.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 addAddressSubcommand(args []string, logger log.DebugLogger) error { 14 var ipAddr string 15 if len(args) > 1 { 16 ipAddr = args[1] 17 } 18 err := addAddress(args[0], ipAddr, logger) 19 if err != nil { 20 return fmt.Errorf("Error adding address: %s", err) 21 } 22 return nil 23 } 24 25 func addAddress(macAddr, ipAddr string, logger log.DebugLogger) error { 26 address := proto.Address{MacAddress: macAddr} 27 if ipAddr != "" { 28 address.IpAddress = net.ParseIP(ipAddr) 29 address.Shrink() 30 if address.MacAddress == "" { 31 address.MacAddress = fmt.Sprintf("52:54:%02x:%02x:%02x:%02x", 32 address.IpAddress[0], address.IpAddress[1], 33 address.IpAddress[2], address.IpAddress[3]) 34 } 35 } 36 request := proto.ChangeAddressPoolRequest{ 37 AddressesToAdd: []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 }