github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/addSubnet.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 addSubnetSubcommand(args []string, logger log.DebugLogger) error { 14 err := addSubnet(args[0], args[1], args[2], args[3:], logger) 15 if err != nil { 16 return fmt.Errorf("Error adding subnet: %s", err) 17 } 18 return nil 19 } 20 21 func addSubnet(subnetId, ipGateway, ipMask string, nameservers []string, 22 logger log.DebugLogger) error { 23 nsIPs := make([]net.IP, 0, len(nameservers)) 24 for _, nameserver := range nameservers { 25 nsIPs = append(nsIPs, net.ParseIP(nameserver)) 26 } 27 subnet := proto.Subnet{ 28 Id: subnetId, 29 IpGateway: net.ParseIP(ipGateway), 30 IpMask: net.ParseIP(ipMask), 31 DomainNameServers: nsIPs, 32 } 33 subnet.Shrink() 34 request := proto.UpdateSubnetsRequest{Add: []proto.Subnet{subnet}} 35 var reply proto.UpdateSubnetsResponse 36 clientName := fmt.Sprintf("%s:%d", *hypervisorHostname, *hypervisorPortNum) 37 client, err := srpc.DialHTTP("tcp", clientName, 0) 38 if err != nil { 39 return err 40 } 41 defer client.Close() 42 err = client.RequestReply("Hypervisor.UpdateSubnets", request, &reply) 43 if err != nil { 44 return err 45 } 46 return errors.New(reply.Error) 47 }