github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/client/subnets/subnets.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package subnets
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/names/v5"
     9  
    10  	"github.com/juju/juju/api/base"
    11  	"github.com/juju/juju/rpc/params"
    12  )
    13  
    14  const subnetsFacade = "Subnets"
    15  
    16  // API provides access to the Subnets API facade.
    17  type API struct {
    18  	base.ClientFacade
    19  	facade base.FacadeCaller
    20  }
    21  
    22  // NewAPI creates a new client-side Subnets facade.
    23  func NewAPI(caller base.APICallCloser) *API {
    24  	if caller == nil {
    25  		panic("caller is nil")
    26  	}
    27  	clientFacade, facadeCaller := base.NewClientFacade(caller, subnetsFacade)
    28  	return &API{
    29  		ClientFacade: clientFacade,
    30  		facade:       facadeCaller,
    31  	}
    32  }
    33  
    34  // ListSubnets fetches all the subnets known by the model.
    35  func (api *API) ListSubnets(spaceTag *names.SpaceTag, zone string) ([]params.Subnet, error) {
    36  	var response params.ListSubnetsResults
    37  	var space string
    38  	if spaceTag != nil {
    39  		space = spaceTag.String()
    40  	}
    41  	args := params.SubnetsFilters{
    42  		SpaceTag: space,
    43  		Zone:     zone,
    44  	}
    45  	err := api.facade.FacadeCall("ListSubnets", args, &response)
    46  	if err != nil {
    47  		return nil, errors.Trace(err)
    48  	}
    49  	return response.Results, nil
    50  }
    51  
    52  // SubnetsByCIDR returns the collection of subnets matching each CIDR in the
    53  // input.
    54  func (api *API) SubnetsByCIDR(cidrs []string) ([]params.SubnetsResult, error) {
    55  	args := params.CIDRParams{CIDRS: cidrs}
    56  
    57  	var result params.SubnetsResults
    58  	if err := api.facade.FacadeCall("SubnetsByCIDR", args, &result); err != nil {
    59  		if params.IsCodeNotSupported(err) {
    60  			return nil, errors.NewNotSupported(nil, err.Error())
    61  		}
    62  		return nil, errors.Trace(err)
    63  	}
    64  
    65  	for _, result := range result.Results {
    66  		if result.Error != nil {
    67  			return nil, errors.Trace(result.Error)
    68  		}
    69  	}
    70  
    71  	return result.Results, nil
    72  }