nodebalancer_config_nodes.go raw

   1  package linodego
   2  
   3  import (
   4  	"context"
   5  )
   6  
   7  // NodeBalancerNode objects represent a backend that can accept traffic for a NodeBalancer Config
   8  type NodeBalancerNode struct {
   9  	ID             int      `json:"id"`
  10  	Address        string   `json:"address"`
  11  	Label          string   `json:"label"`
  12  	Status         string   `json:"status"`
  13  	Weight         int      `json:"weight"`
  14  	Mode           NodeMode `json:"mode"`
  15  	ConfigID       int      `json:"config_id"`
  16  	NodeBalancerID int      `json:"nodebalancer_id"`
  17  	VPCConfigID    int      `json:"vpc_config_id"`
  18  }
  19  
  20  // NodeMode is the mode a NodeBalancer should use when sending traffic to a NodeBalancer Node
  21  type NodeMode string
  22  
  23  var (
  24  	// ModeAccept is the NodeMode indicating a NodeBalancer Node is accepting traffic
  25  	ModeAccept NodeMode = "accept"
  26  
  27  	// ModeReject is the NodeMode indicating a NodeBalancer Node is not receiving traffic
  28  	ModeReject NodeMode = "reject"
  29  
  30  	// ModeDrain is the NodeMode indicating a NodeBalancer Node is not receiving new traffic, but may continue receiving traffic from pinned connections
  31  	ModeDrain NodeMode = "drain"
  32  
  33  	// ModeBackup is the NodeMode indicating a NodeBalancer Node will only receive traffic if all "accept" Nodes are down
  34  	ModeBackup NodeMode = "backup"
  35  )
  36  
  37  // NodeBalancerNodeCreateOptions fields are those accepted by CreateNodeBalancerNode
  38  type NodeBalancerNodeCreateOptions struct {
  39  	Address  string   `json:"address"`
  40  	Label    string   `json:"label"`
  41  	Weight   int      `json:"weight,omitempty"`
  42  	Mode     NodeMode `json:"mode,omitempty"`
  43  	SubnetID int      `json:"subnet_id,omitempty"`
  44  }
  45  
  46  // NodeBalancerNodeUpdateOptions fields are those accepted by UpdateNodeBalancerNode
  47  type NodeBalancerNodeUpdateOptions struct {
  48  	Address  string   `json:"address,omitempty"`
  49  	Label    string   `json:"label,omitempty"`
  50  	Weight   int      `json:"weight,omitempty"`
  51  	Mode     NodeMode `json:"mode,omitempty"`
  52  	SubnetID int      `json:"subnet_id,omitempty"`
  53  }
  54  
  55  // GetCreateOptions converts a NodeBalancerNode to NodeBalancerNodeCreateOptions for use in CreateNodeBalancerNode
  56  func (i NodeBalancerNode) GetCreateOptions() NodeBalancerNodeCreateOptions {
  57  	return NodeBalancerNodeCreateOptions{
  58  		Address: i.Address,
  59  		Label:   i.Label,
  60  		Weight:  i.Weight,
  61  		Mode:    i.Mode,
  62  	}
  63  }
  64  
  65  // GetUpdateOptions converts a NodeBalancerNode to NodeBalancerNodeUpdateOptions for use in UpdateNodeBalancerNode
  66  func (i NodeBalancerNode) GetUpdateOptions() NodeBalancerNodeUpdateOptions {
  67  	return NodeBalancerNodeUpdateOptions{
  68  		Address: i.Address,
  69  		Label:   i.Label,
  70  		Weight:  i.Weight,
  71  		Mode:    i.Mode,
  72  	}
  73  }
  74  
  75  // ListNodeBalancerNodes lists NodeBalancerNodes
  76  func (c *Client) ListNodeBalancerNodes(ctx context.Context, nodebalancerID int, configID int, opts *ListOptions) ([]NodeBalancerNode, error) {
  77  	return getPaginatedResults[NodeBalancerNode](ctx, c, formatAPIPath("nodebalancers/%d/configs/%d/nodes", nodebalancerID, configID), opts)
  78  }
  79  
  80  // GetNodeBalancerNode gets the template with the provided ID
  81  func (c *Client) GetNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, nodeID int) (*NodeBalancerNode, error) {
  82  	e := formatAPIPath("nodebalancers/%d/configs/%d/nodes/%d", nodebalancerID, configID, nodeID)
  83  	return doGETRequest[NodeBalancerNode](ctx, c, e)
  84  }
  85  
  86  // CreateNodeBalancerNode creates a NodeBalancerNode
  87  func (c *Client) CreateNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, opts NodeBalancerNodeCreateOptions) (*NodeBalancerNode, error) {
  88  	e := formatAPIPath("nodebalancers/%d/configs/%d/nodes", nodebalancerID, configID)
  89  	return doPOSTRequest[NodeBalancerNode](ctx, c, e, opts)
  90  }
  91  
  92  // UpdateNodeBalancerNode updates the NodeBalancerNode with the specified id
  93  func (c *Client) UpdateNodeBalancerNode(
  94  	ctx context.Context,
  95  	nodebalancerID int,
  96  	configID int,
  97  	nodeID int,
  98  	opts NodeBalancerNodeUpdateOptions,
  99  ) (*NodeBalancerNode, error) {
 100  	e := formatAPIPath("nodebalancers/%d/configs/%d/nodes/%d", nodebalancerID, configID, nodeID)
 101  	return doPUTRequest[NodeBalancerNode](ctx, c, e, opts)
 102  }
 103  
 104  // DeleteNodeBalancerNode deletes the NodeBalancerNode with the specified id
 105  func (c *Client) DeleteNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, nodeID int) error {
 106  	e := formatAPIPath("nodebalancers/%d/configs/%d/nodes/%d", nodebalancerID, configID, nodeID)
 107  	return doDELETERequest(ctx, c, e)
 108  }
 109