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  }