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