github.com/gophercloud/gophercloud@v1.11.0/openstack/networking/v2/extensions/layer3/extraroutes/requests.go (about) 1 package extraroutes 2 3 import ( 4 "github.com/gophercloud/gophercloud" 5 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers" 6 ) 7 8 // OptsBuilder allows extensions to add additional parameters to the Add or 9 // Remove requests. 10 type OptsBuilder interface { 11 ToExtraRoutesUpdateMap() (map[string]interface{}, error) 12 } 13 14 // Opts contains the values needed to add or remove a list og routes on a 15 // router. 16 type Opts struct { 17 Routes *[]routers.Route `json:"routes,omitempty"` 18 } 19 20 // ToExtraRoutesUpdateMap builds a body based on Opts. 21 func (opts Opts) ToExtraRoutesUpdateMap() (map[string]interface{}, error) { 22 return gophercloud.BuildRequestBody(opts, "router") 23 } 24 25 // Add allows routers to be updated with a list of routes to be added. 26 func Add(c *gophercloud.ServiceClient, id string, opts OptsBuilder) (r AddResult) { 27 b, err := opts.ToExtraRoutesUpdateMap() 28 if err != nil { 29 r.Err = err 30 return 31 } 32 resp, err := c.Put(addExtraRoutesURL(c, id), b, &r.Body, &gophercloud.RequestOpts{ 33 OkCodes: []int{200}, 34 }) 35 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 36 return 37 } 38 39 // Remove allows routers to be updated with a list of routes to be removed. 40 func Remove(c *gophercloud.ServiceClient, id string, opts OptsBuilder) (r RemoveResult) { 41 b, err := opts.ToExtraRoutesUpdateMap() 42 if err != nil { 43 r.Err = err 44 return 45 } 46 resp, err := c.Put(removeExtraRoutesURL(c, id), b, &r.Body, &gophercloud.RequestOpts{ 47 OkCodes: []int{200}, 48 }) 49 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 50 return 51 }