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 }