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  }