github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/extensions/bgp/peers/requests.go (about)

     1  package peers
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/vnpaycloud-console/gophercloud/v2"
     7  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
     8  )
     9  
    10  // List the bgp peers
    11  func List(c *gophercloud.ServiceClient) pagination.Pager {
    12  	url := listURL(c)
    13  	return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
    14  		return BGPPeerPage{pagination.SinglePageBase(r)}
    15  	})
    16  }
    17  
    18  // Get retrieve the specific bgp peer by its uuid
    19  func Get(ctx context.Context, c *gophercloud.ServiceClient, id string) (r GetResult) {
    20  	resp, err := c.Get(ctx, getURL(c, id), &r.Body, nil)
    21  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    22  	return
    23  }
    24  
    25  // CreateOptsBuilder allows extensions to add additional parameters to the
    26  // Create request.
    27  type CreateOptsBuilder interface {
    28  	ToPeerCreateMap() (map[string]any, error)
    29  }
    30  
    31  // CreateOpts represents options used to create a BGP Peer.
    32  type CreateOpts struct {
    33  	AuthType string `json:"auth_type"`
    34  	RemoteAS int    `json:"remote_as"`
    35  	Name     string `json:"name"`
    36  	Password string `json:"password,omitempty"`
    37  	PeerIP   string `json:"peer_ip"`
    38  }
    39  
    40  // ToPeerCreateMap builds a request body from CreateOpts.
    41  func (opts CreateOpts) ToPeerCreateMap() (map[string]any, error) {
    42  	return gophercloud.BuildRequestBody(opts, jroot)
    43  }
    44  
    45  // Create a BGP Peer
    46  func Create(ctx context.Context, c *gophercloud.ServiceClient, opts CreateOpts) (r CreateResult) {
    47  	b, err := opts.ToPeerCreateMap()
    48  	if err != nil {
    49  		r.Err = err
    50  		return
    51  	}
    52  	resp, err := c.Post(ctx, createURL(c), b, &r.Body, nil)
    53  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    54  	return
    55  }
    56  
    57  // Delete accepts a unique ID and deletes the bgp Peer associated with it.
    58  func Delete(ctx context.Context, c *gophercloud.ServiceClient, bgpPeerID string) (r DeleteResult) {
    59  	resp, err := c.Delete(ctx, deleteURL(c, bgpPeerID), nil)
    60  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    61  	return
    62  }
    63  
    64  // UpdateOptsBuilder allows extensions to add additional parameters to the
    65  // Update request.
    66  type UpdateOptsBuilder interface {
    67  	ToPeerUpdateMap() (map[string]any, error)
    68  }
    69  
    70  // UpdateOpts represents options used to update a BGP Peer.
    71  type UpdateOpts struct {
    72  	Name     string `json:"name,omitempty"`
    73  	Password string `json:"password,omitempty"`
    74  }
    75  
    76  // ToPeerUpdateMap builds a request body from UpdateOpts.
    77  func (opts UpdateOpts) ToPeerUpdateMap() (map[string]any, error) {
    78  	return gophercloud.BuildRequestBody(opts, jroot)
    79  }
    80  
    81  // Update accept a BGP Peer ID and an UpdateOpts and update the BGP Peer
    82  func Update(ctx context.Context, c *gophercloud.ServiceClient, bgpPeerID string, opts UpdateOpts) (r UpdateResult) {
    83  	b, err := opts.ToPeerUpdateMap()
    84  	if err != nil {
    85  		r.Err = err
    86  		return
    87  	}
    88  	resp, err := c.Put(ctx, updateURL(c, bgpPeerID), b, &r.Body, &gophercloud.RequestOpts{
    89  		OkCodes: []int{200},
    90  	})
    91  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    92  	return
    93  }