nodebalancer_configs.go raw
1 package linodego
2
3 import (
4 "context"
5 )
6
7 // NodeBalancerConfig objects allow a NodeBalancer to accept traffic on a new port
8 type NodeBalancerConfig struct {
9 ID int `json:"id"`
10 Port int `json:"port"`
11 Protocol ConfigProtocol `json:"protocol"`
12 ProxyProtocol ConfigProxyProtocol `json:"proxy_protocol"`
13 Algorithm ConfigAlgorithm `json:"algorithm"`
14 Stickiness ConfigStickiness `json:"stickiness"`
15 Check ConfigCheck `json:"check"`
16 CheckInterval int `json:"check_interval"`
17 CheckAttempts int `json:"check_attempts"`
18 CheckPath string `json:"check_path"`
19 CheckBody string `json:"check_body"`
20 CheckPassive bool `json:"check_passive"`
21 CheckTimeout int `json:"check_timeout"`
22
23 // NOTE: UDPCheckPort may not currently be available to all users.
24 UDPCheckPort int `json:"udp_check_port"`
25
26 // NOTE: UDPSessionTimeout may not currently be available to all users.
27 UDPSessionTimeout int `json:"udp_session_timeout"`
28
29 CipherSuite ConfigCipher `json:"cipher_suite"`
30 NodeBalancerID int `json:"nodebalancer_id"`
31 SSLCommonName string `json:"ssl_commonname"`
32 SSLFingerprint string `json:"ssl_fingerprint"`
33 SSLCert string `json:"ssl_cert"`
34 SSLKey string `json:"ssl_key"`
35 NodesStatus *NodeBalancerNodeStatus `json:"nodes_status"`
36 }
37
38 // ConfigAlgorithm constants start with Algorithm and include Linode API NodeBalancer Config Algorithms
39 type ConfigAlgorithm string
40
41 // ConfigAlgorithm constants reflect the NodeBalancer Config Algorithm
42 const (
43 AlgorithmRoundRobin ConfigAlgorithm = "roundrobin"
44 AlgorithmLeastConn ConfigAlgorithm = "leastconn"
45 AlgorithmSource ConfigAlgorithm = "source"
46 AlgorithmRingHash ConfigAlgorithm = "ring_hash"
47 )
48
49 // ConfigStickiness constants start with Stickiness and include Linode API NodeBalancer Config Stickiness
50 type ConfigStickiness string
51
52 // ConfigStickiness constants reflect the node stickiness method for a NodeBalancer Config
53 const (
54 StickinessNone ConfigStickiness = "none"
55 StickinessSession ConfigStickiness = "session"
56 StickinessTable ConfigStickiness = "table"
57 StickinessHTTPCookie ConfigStickiness = "http_cookie"
58 StickinessSourceIP ConfigStickiness = "source_ip"
59 )
60
61 // ConfigCheck constants start with Check and include Linode API NodeBalancer Config Check methods
62 type ConfigCheck string
63
64 // ConfigCheck constants reflect the node health status checking method for a NodeBalancer Config
65 const (
66 CheckNone ConfigCheck = "none"
67 CheckConnection ConfigCheck = "connection"
68 CheckHTTP ConfigCheck = "http"
69 CheckHTTPBody ConfigCheck = "http_body"
70 )
71
72 // ConfigProtocol constants start with Protocol and include Linode API Nodebalancer Config protocols
73 type ConfigProtocol string
74
75 // ConfigProtocol constants reflect the protocol used by a NodeBalancer Config
76 const (
77 ProtocolHTTP ConfigProtocol = "http"
78 ProtocolHTTPS ConfigProtocol = "https"
79 ProtocolTCP ConfigProtocol = "tcp"
80 ProtocolUDP ConfigProtocol = "udp"
81 )
82
83 // ConfigProxyProtocol constants start with ProxyProtocol and include Linode API NodeBalancer Config proxy protocol versions
84 type ConfigProxyProtocol string
85
86 // ConfigProxyProtocol constants reflect the proxy protocol version used by a NodeBalancer Config
87 const (
88 ProxyProtocolNone ConfigProxyProtocol = "none"
89 ProxyProtocolV1 ConfigProxyProtocol = "v1"
90 ProxyProtocolV2 ConfigProxyProtocol = "v2"
91 )
92
93 // ConfigCipher constants start with Cipher and include Linode API NodeBalancer Config Cipher values
94 type ConfigCipher string
95
96 // ConfigCipher constants reflect the preferred cipher set for a NodeBalancer Config
97 const (
98 CipherRecommended ConfigCipher = "recommended"
99 CipherLegacy ConfigCipher = "legacy"
100 )
101
102 // NodeBalancerNodeStatus represents the total number of nodes whose status is Up or Down
103 type NodeBalancerNodeStatus struct {
104 Up int `json:"up"`
105 Down int `json:"down"`
106 }
107
108 // NodeBalancerConfigCreateOptions are permitted by CreateNodeBalancerConfig
109 type NodeBalancerConfigCreateOptions struct {
110 Port int `json:"port"`
111 Protocol ConfigProtocol `json:"protocol,omitempty"`
112 ProxyProtocol ConfigProxyProtocol `json:"proxy_protocol,omitempty"`
113 Algorithm ConfigAlgorithm `json:"algorithm,omitempty"`
114 Stickiness ConfigStickiness `json:"stickiness,omitempty"`
115 Check ConfigCheck `json:"check,omitempty"`
116 CheckInterval int `json:"check_interval,omitempty"`
117 CheckAttempts int `json:"check_attempts,omitempty"`
118 CheckPath string `json:"check_path,omitempty"`
119 CheckBody string `json:"check_body,omitempty"`
120 CheckPassive *bool `json:"check_passive,omitempty"`
121 CheckTimeout int `json:"check_timeout,omitempty"`
122
123 // NOTE: UDPCheckPort may not currently be available to all users.
124 UDPCheckPort *int `json:"udp_check_port,omitempty"`
125
126 CipherSuite ConfigCipher `json:"cipher_suite,omitempty"`
127 SSLCert string `json:"ssl_cert,omitempty"`
128 SSLKey string `json:"ssl_key,omitempty"`
129 Nodes []NodeBalancerNodeCreateOptions `json:"nodes,omitempty"`
130 }
131
132 // NodeBalancerConfigRebuildOptions used by RebuildNodeBalancerConfig
133 type NodeBalancerConfigRebuildOptions struct {
134 Port int `json:"port"`
135 Protocol ConfigProtocol `json:"protocol,omitempty"`
136 ProxyProtocol ConfigProxyProtocol `json:"proxy_protocol,omitempty"`
137 Algorithm ConfigAlgorithm `json:"algorithm,omitempty"`
138 Stickiness ConfigStickiness `json:"stickiness,omitempty"`
139 Check ConfigCheck `json:"check,omitempty"`
140 CheckInterval int `json:"check_interval,omitempty"`
141 CheckAttempts int `json:"check_attempts,omitempty"`
142 CheckPath string `json:"check_path,omitempty"`
143 CheckBody string `json:"check_body,omitempty"`
144 CheckPassive *bool `json:"check_passive,omitempty"`
145 CheckTimeout int `json:"check_timeout,omitempty"`
146
147 // NOTE: UDPCheckPort may not currently be available to all users.
148 UDPCheckPort *int `json:"udp_check_port,omitempty"`
149
150 CipherSuite ConfigCipher `json:"cipher_suite,omitempty"`
151 SSLCert string `json:"ssl_cert,omitempty"`
152 SSLKey string `json:"ssl_key,omitempty"`
153 Nodes []NodeBalancerConfigRebuildNodeOptions `json:"nodes"`
154 }
155
156 // NodeBalancerConfigRebuildNodeOptions represents a node defined when rebuilding a
157 // NodeBalancer config.
158 type NodeBalancerConfigRebuildNodeOptions struct {
159 NodeBalancerNodeCreateOptions
160
161 ID int `json:"id,omitempty"`
162 }
163
164 // NodeBalancerConfigUpdateOptions are permitted by UpdateNodeBalancerConfig
165 type NodeBalancerConfigUpdateOptions NodeBalancerConfigCreateOptions
166
167 // GetCreateOptions converts a NodeBalancerConfig to NodeBalancerConfigCreateOptions for use in CreateNodeBalancerConfig
168 func (i NodeBalancerConfig) GetCreateOptions() NodeBalancerConfigCreateOptions {
169 var udpCheckPort *int
170 if i.UDPCheckPort != 0 {
171 udpCheckPort = &i.UDPCheckPort
172 }
173
174 return NodeBalancerConfigCreateOptions{
175 Port: i.Port,
176 Protocol: i.Protocol,
177 ProxyProtocol: i.ProxyProtocol,
178 Algorithm: i.Algorithm,
179 Stickiness: i.Stickiness,
180 Check: i.Check,
181 CheckInterval: i.CheckInterval,
182 CheckAttempts: i.CheckAttempts,
183 CheckTimeout: i.CheckTimeout,
184 CheckPath: i.CheckPath,
185 CheckBody: i.CheckBody,
186 CheckPassive: copyBool(&i.CheckPassive),
187 UDPCheckPort: udpCheckPort,
188 CipherSuite: i.CipherSuite,
189 SSLCert: i.SSLCert,
190 SSLKey: i.SSLKey,
191 }
192 }
193
194 // GetUpdateOptions converts a NodeBalancerConfig to NodeBalancerConfigUpdateOptions for use in UpdateNodeBalancerConfig
195 func (i NodeBalancerConfig) GetUpdateOptions() NodeBalancerConfigUpdateOptions {
196 var udpCheckPort *int
197 if i.UDPCheckPort != 0 {
198 udpCheckPort = &i.UDPCheckPort
199 }
200
201 return NodeBalancerConfigUpdateOptions{
202 Port: i.Port,
203 Protocol: i.Protocol,
204 ProxyProtocol: i.ProxyProtocol,
205 Algorithm: i.Algorithm,
206 Stickiness: i.Stickiness,
207 Check: i.Check,
208 CheckInterval: i.CheckInterval,
209 CheckAttempts: i.CheckAttempts,
210 CheckPath: i.CheckPath,
211 CheckBody: i.CheckBody,
212 CheckPassive: copyBool(&i.CheckPassive),
213 CheckTimeout: i.CheckTimeout,
214 UDPCheckPort: udpCheckPort,
215 CipherSuite: i.CipherSuite,
216 SSLCert: i.SSLCert,
217 SSLKey: i.SSLKey,
218 }
219 }
220
221 // GetRebuildOptions converts a NodeBalancerConfig to NodeBalancerConfigRebuildOptions for use in RebuildNodeBalancerConfig
222 func (i NodeBalancerConfig) GetRebuildOptions() NodeBalancerConfigRebuildOptions {
223 var udpCheckPort *int
224 if i.UDPCheckPort != 0 {
225 udpCheckPort = &i.UDPCheckPort
226 }
227
228 return NodeBalancerConfigRebuildOptions{
229 Port: i.Port,
230 Protocol: i.Protocol,
231 ProxyProtocol: i.ProxyProtocol,
232 Algorithm: i.Algorithm,
233 Stickiness: i.Stickiness,
234 Check: i.Check,
235 CheckInterval: i.CheckInterval,
236 CheckAttempts: i.CheckAttempts,
237 CheckTimeout: i.CheckTimeout,
238 CheckPath: i.CheckPath,
239 CheckBody: i.CheckBody,
240 CheckPassive: copyBool(&i.CheckPassive),
241 UDPCheckPort: udpCheckPort,
242 CipherSuite: i.CipherSuite,
243 SSLCert: i.SSLCert,
244 SSLKey: i.SSLKey,
245 Nodes: make([]NodeBalancerConfigRebuildNodeOptions, 0),
246 }
247 }
248
249 // ListNodeBalancerConfigs lists NodeBalancerConfigs
250 func (c *Client) ListNodeBalancerConfigs(ctx context.Context, nodebalancerID int, opts *ListOptions) ([]NodeBalancerConfig, error) {
251 return getPaginatedResults[NodeBalancerConfig](ctx, c, formatAPIPath("nodebalancers/%d/configs", nodebalancerID), opts)
252 }
253
254 // GetNodeBalancerConfig gets the template with the provided ID
255 func (c *Client) GetNodeBalancerConfig(ctx context.Context, nodebalancerID int, configID int) (*NodeBalancerConfig, error) {
256 e := formatAPIPath("nodebalancers/%d/configs/%d", nodebalancerID, configID)
257 return doGETRequest[NodeBalancerConfig](ctx, c, e)
258 }
259
260 // CreateNodeBalancerConfig creates a NodeBalancerConfig
261 func (c *Client) CreateNodeBalancerConfig(ctx context.Context, nodebalancerID int, opts NodeBalancerConfigCreateOptions) (*NodeBalancerConfig, error) {
262 e := formatAPIPath("nodebalancers/%d/configs", nodebalancerID)
263 return doPOSTRequest[NodeBalancerConfig](ctx, c, e, opts)
264 }
265
266 // UpdateNodeBalancerConfig updates the NodeBalancerConfig with the specified id
267 func (c *Client) UpdateNodeBalancerConfig(
268 ctx context.Context,
269 nodebalancerID int,
270 configID int,
271 opts NodeBalancerConfigUpdateOptions,
272 ) (*NodeBalancerConfig, error) {
273 e := formatAPIPath("nodebalancers/%d/configs/%d", nodebalancerID, configID)
274 return doPUTRequest[NodeBalancerConfig](ctx, c, e, opts)
275 }
276
277 // DeleteNodeBalancerConfig deletes the NodeBalancerConfig with the specified id
278 func (c *Client) DeleteNodeBalancerConfig(ctx context.Context, nodebalancerID int, configID int) error {
279 e := formatAPIPath("nodebalancers/%d/configs/%d", nodebalancerID, configID)
280 return doDELETERequest(ctx, c, e)
281 }
282
283 // RebuildNodeBalancerConfig updates the NodeBalancer with the specified id
284 func (c *Client) RebuildNodeBalancerConfig(
285 ctx context.Context,
286 nodeBalancerID int,
287 configID int,
288 opts NodeBalancerConfigRebuildOptions,
289 ) (*NodeBalancerConfig, error) {
290 e := formatAPIPath("nodebalancers/%d/configs/%d/rebuild", nodeBalancerID, configID)
291 return doPOSTRequest[NodeBalancerConfig](ctx, c, e, opts)
292 }
293