github.com/gophercloud/gophercloud@v1.11.0/openstack/networking/v2/extensions/bgp/speakers/requests.go (about) 1 package speakers 2 3 import ( 4 "github.com/gophercloud/gophercloud" 5 "github.com/gophercloud/gophercloud/pagination" 6 ) 7 8 // List the bgp speakers 9 func List(c *gophercloud.ServiceClient) pagination.Pager { 10 url := listURL(c) 11 return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 12 return BGPSpeakerPage{pagination.SinglePageBase(r)} 13 }) 14 } 15 16 // Get retrieve the specific bgp speaker by its uuid 17 func Get(c *gophercloud.ServiceClient, id string) (r GetResult) { 18 resp, err := c.Get(getURL(c, id), &r.Body, nil) 19 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 20 return 21 } 22 23 // CreateOpts represents options used to create a BGP Speaker. 24 type CreateOpts struct { 25 Name string `json:"name"` 26 IPVersion int `json:"ip_version"` 27 AdvertiseFloatingIPHostRoutes bool `json:"advertise_floating_ip_host_routes"` 28 AdvertiseTenantNetworks bool `json:"advertise_tenant_networks"` 29 LocalAS string `json:"local_as"` 30 Networks []string `json:"networks,omitempty"` 31 } 32 33 // CreateOptsBuilder declare a function that build CreateOpts into a Create request body. 34 type CreateOptsBuilder interface { 35 ToSpeakerCreateMap() (map[string]interface{}, error) 36 } 37 38 // ToSpeakerCreateMap builds a request body from CreateOpts. 39 func (opts CreateOpts) ToSpeakerCreateMap() (map[string]interface{}, error) { 40 return gophercloud.BuildRequestBody(opts, jroot) 41 } 42 43 // Create accepts a CreateOpts and create a BGP Speaker. 44 func Create(c *gophercloud.ServiceClient, opts CreateOpts) (r CreateResult) { 45 b, err := opts.ToSpeakerCreateMap() 46 if err != nil { 47 r.Err = err 48 return 49 } 50 resp, err := c.Post(createURL(c), b, &r.Body, nil) 51 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 52 return 53 } 54 55 // Delete accepts a unique ID and deletes the bgp speaker associated with it. 56 func Delete(c *gophercloud.ServiceClient, speakerID string) (r DeleteResult) { 57 resp, err := c.Delete(deleteURL(c, speakerID), nil) 58 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 59 return 60 } 61 62 // UpdateOpts represents options used to update a BGP Speaker. 63 type UpdateOpts struct { 64 Name string `json:"name,omitempty"` 65 AdvertiseFloatingIPHostRoutes bool `json:"advertise_floating_ip_host_routes"` 66 AdvertiseTenantNetworks bool `json:"advertise_tenant_networks"` 67 } 68 69 // ToSpeakerUpdateMap build a request body from UpdateOpts 70 func (opts UpdateOpts) ToSpeakerUpdateMap() (map[string]interface{}, error) { 71 return gophercloud.BuildRequestBody(opts, jroot) 72 } 73 74 // UpdateOptsBuilder allow the extensions to add additional parameters to the 75 // Update request. 76 type UpdateOptsBuilder interface { 77 ToSpeakerUpdateMap() (map[string]interface{}, error) 78 } 79 80 // Update accepts a UpdateOpts and update the BGP Speaker. 81 func Update(c *gophercloud.ServiceClient, speakerID string, opts UpdateOptsBuilder) (r UpdateResult) { 82 b, err := opts.ToSpeakerUpdateMap() 83 if err != nil { 84 r.Err = err 85 return 86 } 87 resp, err := c.Put(updateURL(c, speakerID), b, &r.Body, &gophercloud.RequestOpts{ 88 OkCodes: []int{200}, 89 }) 90 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 91 return 92 } 93 94 // AddBGPPeerOpts represents options used to add a BGP Peer to a BGP Speaker 95 type AddBGPPeerOpts struct { 96 BGPPeerID string `json:"bgp_peer_id"` 97 } 98 99 // AddBGPPeerOptsBuilder declare a funtion that encode AddBGPPeerOpts into a request body 100 type AddBGPPeerOptsBuilder interface { 101 ToBGPSpeakerAddBGPPeerMap() (map[string]interface{}, error) 102 } 103 104 // ToBGPSpeakerAddBGPPeerMap build a request body from AddBGPPeerOpts 105 func (opts AddBGPPeerOpts) ToBGPSpeakerAddBGPPeerMap() (map[string]interface{}, error) { 106 return gophercloud.BuildRequestBody(opts, "") 107 } 108 109 // AddBGPPeer add the BGP peer to the speaker a.k.a. PUT /v2.0/bgp-speakers/{bgp-speaker-id}/add_bgp_peer 110 func AddBGPPeer(c *gophercloud.ServiceClient, bgpSpeakerID string, opts AddBGPPeerOptsBuilder) (r AddBGPPeerResult) { 111 b, err := opts.ToBGPSpeakerAddBGPPeerMap() 112 if err != nil { 113 r.Err = err 114 return 115 } 116 resp, err := c.Put(addBGPPeerURL(c, bgpSpeakerID), b, &r.Body, &gophercloud.RequestOpts{ 117 OkCodes: []int{200}, 118 }) 119 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 120 return 121 } 122 123 // RemoveBGPPeerOpts represents options used to remove a BGP Peer to a BGP Speaker 124 type RemoveBGPPeerOpts AddBGPPeerOpts 125 126 // RemoveBGPPeerOptsBuilder declare a funtion that encode RemoveBGPPeerOpts into a request body 127 type RemoveBGPPeerOptsBuilder interface { 128 ToBGPSpeakerRemoveBGPPeerMap() (map[string]interface{}, error) 129 } 130 131 // ToBGPSpeakerRemoveBGPPeerMap build a request body from RemoveBGPPeerOpts 132 func (opts RemoveBGPPeerOpts) ToBGPSpeakerRemoveBGPPeerMap() (map[string]interface{}, error) { 133 return gophercloud.BuildRequestBody(opts, "") 134 } 135 136 // RemoveBGPPeer remove the BGP peer from the speaker, a.k.a. PUT /v2.0/bgp-speakers/{bgp-speaker-id}/add_bgp_peer 137 func RemoveBGPPeer(c *gophercloud.ServiceClient, bgpSpeakerID string, opts RemoveBGPPeerOptsBuilder) (r RemoveBGPPeerResult) { 138 b, err := opts.ToBGPSpeakerRemoveBGPPeerMap() 139 if err != nil { 140 r.Err = err 141 return 142 } 143 resp, err := c.Put(removeBGPPeerURL(c, bgpSpeakerID), b, &r.Body, &gophercloud.RequestOpts{ 144 OkCodes: []int{200}, 145 }) 146 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 147 return 148 } 149 150 // GetAdvertisedRoutes a.k.a. GET /v2.0/bgp-speakers/{bgp-speaker-id}/get_advertised_routes 151 func GetAdvertisedRoutes(c *gophercloud.ServiceClient, bgpSpeakerID string) pagination.Pager { 152 url := getAdvertisedRoutesURL(c, bgpSpeakerID) 153 return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 154 return AdvertisedRoutePage{pagination.SinglePageBase(r)} 155 }) 156 } 157 158 // AddGatewayNetworkOptsBuilder declare a function that build AddGatewayNetworkOpts into a request body. 159 type AddGatewayNetworkOptsBuilder interface { 160 ToBGPSpeakerAddGatewayNetworkMap() (map[string]interface{}, error) 161 } 162 163 // AddGatewayNetworkOpts represents the data that would be PUT to the endpoint 164 type AddGatewayNetworkOpts struct { 165 // The uuid of the network 166 NetworkID string `json:"network_id"` 167 } 168 169 // ToBGPSpeakerAddGatewayNetworkMap implements the function 170 func (opts AddGatewayNetworkOpts) ToBGPSpeakerAddGatewayNetworkMap() (map[string]interface{}, error) { 171 return gophercloud.BuildRequestBody(opts, "") 172 } 173 174 // AddGatewayNetwork a.k.a. PUT /v2.0/bgp-speakers/{bgp-speaker-id}/add_gateway_network 175 func AddGatewayNetwork(c *gophercloud.ServiceClient, bgpSpeakerID string, opts AddGatewayNetworkOptsBuilder) (r AddGatewayNetworkResult) { 176 b, err := opts.ToBGPSpeakerAddGatewayNetworkMap() 177 if err != nil { 178 r.Err = err 179 return 180 } 181 resp, err := c.Put(addGatewayNetworkURL(c, bgpSpeakerID), b, &r.Body, &gophercloud.RequestOpts{ 182 OkCodes: []int{200}, 183 }) 184 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 185 return 186 } 187 188 // RemoveGatewayNetworkOptsBuilder declare a function that build RemoveGatewayNetworkOpts into a request body. 189 type RemoveGatewayNetworkOptsBuilder interface { 190 ToBGPSpeakerRemoveGatewayNetworkMap() (map[string]interface{}, error) 191 } 192 193 // RemoveGatewayNetworkOpts represent the data that would be PUT to the endpoint 194 type RemoveGatewayNetworkOpts AddGatewayNetworkOpts 195 196 // ToBGPSpeakerRemoveGatewayNetworkMap implement the function 197 func (opts RemoveGatewayNetworkOpts) ToBGPSpeakerRemoveGatewayNetworkMap() (map[string]interface{}, error) { 198 return gophercloud.BuildRequestBody(opts, "") 199 } 200 201 // RemoveGatewayNetwork a.k.a. PUT /v2.0/bgp-speakers/{bgp-speaker-id}/remove_gateway_network 202 func RemoveGatewayNetwork(c *gophercloud.ServiceClient, bgpSpeakerID string, opts RemoveGatewayNetworkOptsBuilder) (r RemoveGatewayNetworkResult) { 203 b, err := opts.ToBGPSpeakerRemoveGatewayNetworkMap() 204 if err != nil { 205 r.Err = err 206 return 207 } 208 resp, err := c.Put(removeGatewayNetworkURL(c, bgpSpeakerID), b, &r.Body, &gophercloud.RequestOpts{ 209 OkCodes: []int{200}, 210 }) 211 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 212 return 213 }