basaltic-sdk-python 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. basaltic/__init__.py +26 -0
  2. basaltic/_client.py +136 -0
  3. basaltic/_common.py +284 -0
  4. basaltic/_transport.py +196 -0
  5. basaltic/_version.py +3 -0
  6. basaltic/auth.py +231 -0
  7. basaltic/client.py +144 -0
  8. basaltic/config.py +151 -0
  9. basaltic/errors.py +73 -0
  10. basaltic/models/__init__.py +17 -0
  11. basaltic/models/audit.py +85 -0
  12. basaltic/models/billing.py +284 -0
  13. basaltic/models/catalog.py +35 -0
  14. basaltic/models/certificate.py +127 -0
  15. basaltic/models/compute.py +905 -0
  16. basaltic/models/dns.py +256 -0
  17. basaltic/models/iam.py +736 -0
  18. basaltic/models/kms.py +157 -0
  19. basaltic/models/loadbalancer.py +574 -0
  20. basaltic/models/network.py +985 -0
  21. basaltic/models/quota.py +30 -0
  22. basaltic/models/secrets.py +136 -0
  23. basaltic/models/storage.py +789 -0
  24. basaltic/models/telemetry.py +393 -0
  25. basaltic/models/workspace.py +734 -0
  26. basaltic/py.typed +0 -0
  27. basaltic/response.py +152 -0
  28. basaltic/services/__init__.py +1 -0
  29. basaltic/services/audit.py +211 -0
  30. basaltic/services/billing.py +777 -0
  31. basaltic/services/catalog.py +172 -0
  32. basaltic/services/certificate.py +395 -0
  33. basaltic/services/compute.py +2395 -0
  34. basaltic/services/dns.py +1079 -0
  35. basaltic/services/iam.py +3405 -0
  36. basaltic/services/kms.py +742 -0
  37. basaltic/services/loadbalancer.py +1727 -0
  38. basaltic/services/network.py +4691 -0
  39. basaltic/services/quota.py +75 -0
  40. basaltic/services/secrets.py +550 -0
  41. basaltic/services/storage.py +3059 -0
  42. basaltic/services/telemetry.py +1316 -0
  43. basaltic/services/workspace.py +3899 -0
  44. basaltic_sdk_python-0.1.1.dist-info/METADATA +211 -0
  45. basaltic_sdk_python-0.1.1.dist-info/RECORD +47 -0
  46. basaltic_sdk_python-0.1.1.dist-info/WHEEL +4 -0
  47. basaltic_sdk_python-0.1.1.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,1727 @@
1
+ """Generated typed API methods; do not edit."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import AsyncIterator, Iterator
6
+ from typing import cast
7
+
8
+ from .._common import UNSET, Operation
9
+ from .._transport import AsyncTransport, SyncTransport
10
+ from ..config import RequestOptions
11
+ from ..models import loadbalancer as m
12
+ from ..response import (
13
+ ApiResponse,
14
+ Page,
15
+ aiterate_pages,
16
+ aresolve_reference,
17
+ iterate_pages,
18
+ reference_scope,
19
+ resolve_reference,
20
+ )
21
+
22
+ _OPS = {
23
+ "attachListenerCertificate": Operation(
24
+ id="attachListenerCertificate",
25
+ method="POST",
26
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/certificates",
27
+ authenticated=True,
28
+ requiredQuery=[],
29
+ requiredHeaders=[],
30
+ queryEncoding={},
31
+ bodyRequired=True,
32
+ contentType="application/json",
33
+ accept="application/json",
34
+ ),
35
+ "attachTarget": Operation(
36
+ id="attachTarget",
37
+ method="POST",
38
+ path="/v1/target-groups/{id}/targets",
39
+ authenticated=True,
40
+ requiredQuery=[],
41
+ requiredHeaders=[],
42
+ queryEncoding={},
43
+ bodyRequired=True,
44
+ contentType="application/json",
45
+ accept="application/json",
46
+ ),
47
+ "createListener": Operation(
48
+ id="createListener",
49
+ method="POST",
50
+ path="/v1/load-balancers/{id}/listeners",
51
+ authenticated=True,
52
+ requiredQuery=[],
53
+ requiredHeaders=[],
54
+ queryEncoding={},
55
+ bodyRequired=True,
56
+ contentType="application/json",
57
+ accept="application/json",
58
+ ),
59
+ "createLoadBalancer": Operation(
60
+ id="createLoadBalancer",
61
+ method="POST",
62
+ path="/v1/load-balancers",
63
+ authenticated=True,
64
+ requiredQuery=[],
65
+ requiredHeaders=[],
66
+ queryEncoding={},
67
+ bodyRequired=True,
68
+ contentType="application/json",
69
+ accept="application/json",
70
+ ),
71
+ "createRule": Operation(
72
+ id="createRule",
73
+ method="POST",
74
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/rules",
75
+ authenticated=True,
76
+ requiredQuery=[],
77
+ requiredHeaders=[],
78
+ queryEncoding={},
79
+ bodyRequired=True,
80
+ contentType="application/json",
81
+ accept="application/json",
82
+ ),
83
+ "createTargetGroup": Operation(
84
+ id="createTargetGroup",
85
+ method="POST",
86
+ path="/v1/target-groups",
87
+ authenticated=True,
88
+ requiredQuery=[],
89
+ requiredHeaders=[],
90
+ queryEncoding={},
91
+ bodyRequired=True,
92
+ contentType="application/json",
93
+ accept="application/json",
94
+ ),
95
+ "deleteListener": Operation(
96
+ id="deleteListener",
97
+ method="DELETE",
98
+ path="/v1/load-balancers/{id}/listeners/{listener_id}",
99
+ authenticated=True,
100
+ requiredQuery=[],
101
+ requiredHeaders=[],
102
+ queryEncoding={},
103
+ bodyRequired=False,
104
+ contentType="",
105
+ accept="application/json",
106
+ ),
107
+ "deleteLoadBalancer": Operation(
108
+ id="deleteLoadBalancer",
109
+ method="DELETE",
110
+ path="/v1/load-balancers/{id}",
111
+ authenticated=True,
112
+ requiredQuery=[],
113
+ requiredHeaders=[],
114
+ queryEncoding={},
115
+ bodyRequired=False,
116
+ contentType="",
117
+ accept="application/json",
118
+ ),
119
+ "deleteRuleInListener": Operation(
120
+ id="deleteRuleInListener",
121
+ method="DELETE",
122
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/rules/{rule_id}",
123
+ authenticated=True,
124
+ requiredQuery=[],
125
+ requiredHeaders=[],
126
+ queryEncoding={},
127
+ bodyRequired=False,
128
+ contentType="",
129
+ accept="application/json",
130
+ ),
131
+ "deleteTargetGroup": Operation(
132
+ id="deleteTargetGroup",
133
+ method="DELETE",
134
+ path="/v1/target-groups/{id}",
135
+ authenticated=True,
136
+ requiredQuery=[],
137
+ requiredHeaders=[],
138
+ queryEncoding={},
139
+ bodyRequired=False,
140
+ contentType="",
141
+ accept="application/json",
142
+ ),
143
+ "detachListenerCertificate": Operation(
144
+ id="detachListenerCertificate",
145
+ method="DELETE",
146
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/certificates/{certificate_id}",
147
+ authenticated=True,
148
+ requiredQuery=[],
149
+ requiredHeaders=[],
150
+ queryEncoding={},
151
+ bodyRequired=False,
152
+ contentType="",
153
+ accept="application/json",
154
+ ),
155
+ "detachTarget": Operation(
156
+ id="detachTarget",
157
+ method="DELETE",
158
+ path="/v1/target-groups/{id}/targets/{target_id}",
159
+ authenticated=True,
160
+ requiredQuery=[],
161
+ requiredHeaders=[],
162
+ queryEncoding={},
163
+ bodyRequired=False,
164
+ contentType="",
165
+ accept="application/json",
166
+ ),
167
+ "getListener": Operation(
168
+ id="getListener",
169
+ method="GET",
170
+ path="/v1/load-balancers/{id}/listeners/{listener_id}",
171
+ authenticated=True,
172
+ requiredQuery=[],
173
+ requiredHeaders=[],
174
+ queryEncoding={},
175
+ bodyRequired=False,
176
+ contentType="",
177
+ accept="application/json",
178
+ ),
179
+ "getLoadBalancer": Operation(
180
+ id="getLoadBalancer",
181
+ method="GET",
182
+ path="/v1/load-balancers/{id}",
183
+ authenticated=True,
184
+ requiredQuery=[],
185
+ requiredHeaders=[],
186
+ queryEncoding={},
187
+ bodyRequired=False,
188
+ contentType="",
189
+ accept="application/json",
190
+ ),
191
+ "getRule": Operation(
192
+ id="getRule",
193
+ method="GET",
194
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/rules/{rule_id}",
195
+ authenticated=True,
196
+ requiredQuery=[],
197
+ requiredHeaders=[],
198
+ queryEncoding={},
199
+ bodyRequired=False,
200
+ contentType="",
201
+ accept="application/json",
202
+ ),
203
+ "getTarget": Operation(
204
+ id="getTarget",
205
+ method="GET",
206
+ path="/v1/target-groups/{id}/targets/{target_id}",
207
+ authenticated=True,
208
+ requiredQuery=[],
209
+ requiredHeaders=[],
210
+ queryEncoding={},
211
+ bodyRequired=False,
212
+ contentType="",
213
+ accept="application/json",
214
+ ),
215
+ "getTargetGroup": Operation(
216
+ id="getTargetGroup",
217
+ method="GET",
218
+ path="/v1/target-groups/{id}",
219
+ authenticated=True,
220
+ requiredQuery=[],
221
+ requiredHeaders=[],
222
+ queryEncoding={},
223
+ bodyRequired=False,
224
+ contentType="",
225
+ accept="application/json",
226
+ ),
227
+ "listListeners": Operation(
228
+ id="listListeners",
229
+ method="GET",
230
+ path="/v1/load-balancers/{id}/listeners",
231
+ authenticated=True,
232
+ requiredQuery=[],
233
+ requiredHeaders=[],
234
+ queryEncoding={
235
+ "name": {"style": "form", "explode": True},
236
+ "crn": {"style": "form", "explode": True},
237
+ },
238
+ bodyRequired=False,
239
+ contentType="",
240
+ accept="application/json",
241
+ itemsKey="listeners",
242
+ ),
243
+ "listLoadBalancerReplicas": Operation(
244
+ id="listLoadBalancerReplicas",
245
+ method="GET",
246
+ path="/v1/load-balancers/{id}/replicas",
247
+ authenticated=True,
248
+ requiredQuery=[],
249
+ requiredHeaders=[],
250
+ queryEncoding={
251
+ "name": {"style": "form", "explode": True},
252
+ "crn": {"style": "form", "explode": True},
253
+ },
254
+ bodyRequired=False,
255
+ contentType="",
256
+ accept="application/json",
257
+ itemsKey="replicas",
258
+ ),
259
+ "listLoadBalancers": Operation(
260
+ id="listLoadBalancers",
261
+ method="GET",
262
+ path="/v1/load-balancers",
263
+ authenticated=True,
264
+ requiredQuery=[],
265
+ requiredHeaders=[],
266
+ queryEncoding={
267
+ "name": {"style": "form", "explode": True},
268
+ "crn": {"style": "form", "explode": True},
269
+ "status": {"style": "form", "explode": True},
270
+ "limit": {"style": "form", "explode": True},
271
+ "marker": {"style": "form", "explode": True},
272
+ },
273
+ bodyRequired=False,
274
+ contentType="",
275
+ accept="application/json",
276
+ itemsKey="load_balancers",
277
+ ),
278
+ "listRules": Operation(
279
+ id="listRules",
280
+ method="GET",
281
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/rules",
282
+ authenticated=True,
283
+ requiredQuery=[],
284
+ requiredHeaders=[],
285
+ queryEncoding={
286
+ "name": {"style": "form", "explode": True},
287
+ "crn": {"style": "form", "explode": True},
288
+ },
289
+ bodyRequired=False,
290
+ contentType="",
291
+ accept="application/json",
292
+ itemsKey="rules",
293
+ ),
294
+ "listTargetGroups": Operation(
295
+ id="listTargetGroups",
296
+ method="GET",
297
+ path="/v1/target-groups",
298
+ authenticated=True,
299
+ requiredQuery=[],
300
+ requiredHeaders=[],
301
+ queryEncoding={
302
+ "name": {"style": "form", "explode": True},
303
+ "crn": {"style": "form", "explode": True},
304
+ "protocol": {"style": "form", "explode": True},
305
+ "limit": {"style": "form", "explode": True},
306
+ "marker": {"style": "form", "explode": True},
307
+ },
308
+ bodyRequired=False,
309
+ contentType="",
310
+ accept="application/json",
311
+ itemsKey="target_groups",
312
+ ),
313
+ "listTargets": Operation(
314
+ id="listTargets",
315
+ method="GET",
316
+ path="/v1/target-groups/{id}/targets",
317
+ authenticated=True,
318
+ requiredQuery=[],
319
+ requiredHeaders=[],
320
+ queryEncoding={
321
+ "name": {"style": "form", "explode": True},
322
+ "crn": {"style": "form", "explode": True},
323
+ },
324
+ bodyRequired=False,
325
+ contentType="",
326
+ accept="application/json",
327
+ itemsKey="targets",
328
+ ),
329
+ "updateListener": Operation(
330
+ id="updateListener",
331
+ method="PATCH",
332
+ path="/v1/load-balancers/{id}/listeners/{listener_id}",
333
+ authenticated=True,
334
+ requiredQuery=[],
335
+ requiredHeaders=[],
336
+ queryEncoding={},
337
+ bodyRequired=True,
338
+ contentType="application/json",
339
+ accept="application/json",
340
+ ),
341
+ "updateLoadBalancer": Operation(
342
+ id="updateLoadBalancer",
343
+ method="PATCH",
344
+ path="/v1/load-balancers/{id}",
345
+ authenticated=True,
346
+ requiredQuery=[],
347
+ requiredHeaders=[],
348
+ queryEncoding={},
349
+ bodyRequired=True,
350
+ contentType="application/json",
351
+ accept="application/json",
352
+ ),
353
+ "updateRule": Operation(
354
+ id="updateRule",
355
+ method="PATCH",
356
+ path="/v1/load-balancers/{id}/listeners/{listener_id}/rules/{rule_id}",
357
+ authenticated=True,
358
+ requiredQuery=[],
359
+ requiredHeaders=[],
360
+ queryEncoding={},
361
+ bodyRequired=True,
362
+ contentType="application/json",
363
+ accept="application/json",
364
+ ),
365
+ "updateTargetGroup": Operation(
366
+ id="updateTargetGroup",
367
+ method="PATCH",
368
+ path="/v1/target-groups/{id}",
369
+ authenticated=True,
370
+ requiredQuery=[],
371
+ requiredHeaders=[],
372
+ queryEncoding={},
373
+ bodyRequired=True,
374
+ contentType="application/json",
375
+ accept="application/json",
376
+ ),
377
+ }
378
+
379
+
380
+ class LoadbalancerService:
381
+ def __init__(self, transport: SyncTransport) -> None:
382
+ self._transport = transport
383
+
384
+ def attach_listener_certificate(
385
+ self,
386
+ id: str,
387
+ listener_id: str,
388
+ body: m.AttachListenerCertificateBody,
389
+ *,
390
+ options: RequestOptions | None = None,
391
+ ) -> ApiResponse[m.AttachListenerCertificateResponse]:
392
+ "Attach an additional certificate to an HTTPS listener"
393
+ return cast(
394
+ ApiResponse[m.AttachListenerCertificateResponse],
395
+ self._transport.request(
396
+ "loadbalancer",
397
+ "https://loadbalancer.{region}.basaltic.sh",
398
+ _OPS["attachListenerCertificate"],
399
+ "json",
400
+ {"id": id, "listener_id": listener_id},
401
+ body,
402
+ None,
403
+ options,
404
+ ),
405
+ )
406
+
407
+ def attach_target(
408
+ self, id: str, body: m.AttachTargetBody, *, options: RequestOptions | None = None
409
+ ) -> ApiResponse[m.AttachTargetResponse]:
410
+ "Attach a target to this group"
411
+ return cast(
412
+ ApiResponse[m.AttachTargetResponse],
413
+ self._transport.request(
414
+ "loadbalancer",
415
+ "https://loadbalancer.{region}.basaltic.sh",
416
+ _OPS["attachTarget"],
417
+ "json",
418
+ {"id": id},
419
+ body,
420
+ None,
421
+ options,
422
+ ),
423
+ )
424
+
425
+ def create_listener(
426
+ self, id: str, body: m.CreateListenerBody, *, options: RequestOptions | None = None
427
+ ) -> ApiResponse[m.CreateListenerResponse]:
428
+ "Create a listener on this load balancer"
429
+ return cast(
430
+ ApiResponse[m.CreateListenerResponse],
431
+ self._transport.request(
432
+ "loadbalancer",
433
+ "https://loadbalancer.{region}.basaltic.sh",
434
+ _OPS["createListener"],
435
+ "json",
436
+ {"id": id},
437
+ body,
438
+ None,
439
+ options,
440
+ ),
441
+ )
442
+
443
+ def create_load_balancer(
444
+ self, body: m.CreateLoadBalancerBody, *, options: RequestOptions | None = None
445
+ ) -> ApiResponse[m.CreateLoadBalancerResponse]:
446
+ "Create a load balancer"
447
+ return cast(
448
+ ApiResponse[m.CreateLoadBalancerResponse],
449
+ self._transport.request(
450
+ "loadbalancer",
451
+ "https://loadbalancer.{region}.basaltic.sh",
452
+ _OPS["createLoadBalancer"],
453
+ "json",
454
+ {},
455
+ body,
456
+ None,
457
+ options,
458
+ ),
459
+ )
460
+
461
+ def create_rule(
462
+ self,
463
+ id: str,
464
+ listener_id: str,
465
+ body: m.CreateRuleBody,
466
+ *,
467
+ options: RequestOptions | None = None,
468
+ ) -> ApiResponse[m.CreateRuleResponse]:
469
+ "Create a routing rule on this listener (HTTP/HTTPS only)"
470
+ return cast(
471
+ ApiResponse[m.CreateRuleResponse],
472
+ self._transport.request(
473
+ "loadbalancer",
474
+ "https://loadbalancer.{region}.basaltic.sh",
475
+ _OPS["createRule"],
476
+ "json",
477
+ {"id": id, "listener_id": listener_id},
478
+ body,
479
+ None,
480
+ options,
481
+ ),
482
+ )
483
+
484
+ def create_target_group(
485
+ self, body: m.CreateTargetGroupBody, *, options: RequestOptions | None = None
486
+ ) -> ApiResponse[m.CreateTargetGroupResponse]:
487
+ "Create a target group"
488
+ return cast(
489
+ ApiResponse[m.CreateTargetGroupResponse],
490
+ self._transport.request(
491
+ "loadbalancer",
492
+ "https://loadbalancer.{region}.basaltic.sh",
493
+ _OPS["createTargetGroup"],
494
+ "json",
495
+ {},
496
+ body,
497
+ None,
498
+ options,
499
+ ),
500
+ )
501
+
502
+ def delete_listener(
503
+ self, id: str, listener_id: str, *, options: RequestOptions | None = None
504
+ ) -> None:
505
+ "Delete a listener"
506
+ return cast(
507
+ None,
508
+ self._transport.request(
509
+ "loadbalancer",
510
+ "https://loadbalancer.{region}.basaltic.sh",
511
+ _OPS["deleteListener"],
512
+ "discard",
513
+ {"id": id, "listener_id": listener_id},
514
+ UNSET,
515
+ None,
516
+ options,
517
+ ),
518
+ )
519
+
520
+ def delete_load_balancer(self, id: str, *, options: RequestOptions | None = None) -> None:
521
+ "Delete a load balancer"
522
+ return cast(
523
+ None,
524
+ self._transport.request(
525
+ "loadbalancer",
526
+ "https://loadbalancer.{region}.basaltic.sh",
527
+ _OPS["deleteLoadBalancer"],
528
+ "discard",
529
+ {"id": id},
530
+ UNSET,
531
+ None,
532
+ options,
533
+ ),
534
+ )
535
+
536
+ def delete_rule_in_listener(
537
+ self, id: str, listener_id: str, rule_id: str, *, options: RequestOptions | None = None
538
+ ) -> None:
539
+ "Delete a routing rule"
540
+ return cast(
541
+ None,
542
+ self._transport.request(
543
+ "loadbalancer",
544
+ "https://loadbalancer.{region}.basaltic.sh",
545
+ _OPS["deleteRuleInListener"],
546
+ "discard",
547
+ {"id": id, "listener_id": listener_id, "rule_id": rule_id},
548
+ UNSET,
549
+ None,
550
+ options,
551
+ ),
552
+ )
553
+
554
+ def delete_target_group(self, id: str, *, options: RequestOptions | None = None) -> None:
555
+ "Delete a target group"
556
+ return cast(
557
+ None,
558
+ self._transport.request(
559
+ "loadbalancer",
560
+ "https://loadbalancer.{region}.basaltic.sh",
561
+ _OPS["deleteTargetGroup"],
562
+ "discard",
563
+ {"id": id},
564
+ UNSET,
565
+ None,
566
+ options,
567
+ ),
568
+ )
569
+
570
+ def detach_listener_certificate(
571
+ self,
572
+ id: str,
573
+ listener_id: str,
574
+ certificate_id: str,
575
+ *,
576
+ options: RequestOptions | None = None,
577
+ ) -> None:
578
+ "Detach a certificate from an HTTPS listener"
579
+ return cast(
580
+ None,
581
+ self._transport.request(
582
+ "loadbalancer",
583
+ "https://loadbalancer.{region}.basaltic.sh",
584
+ _OPS["detachListenerCertificate"],
585
+ "discard",
586
+ {"id": id, "listener_id": listener_id, "certificate_id": certificate_id},
587
+ UNSET,
588
+ None,
589
+ options,
590
+ ),
591
+ )
592
+
593
+ def detach_target(
594
+ self, id: str, target_id: str, *, options: RequestOptions | None = None
595
+ ) -> None:
596
+ "Detach a target"
597
+ return cast(
598
+ None,
599
+ self._transport.request(
600
+ "loadbalancer",
601
+ "https://loadbalancer.{region}.basaltic.sh",
602
+ _OPS["detachTarget"],
603
+ "discard",
604
+ {"id": id, "target_id": target_id},
605
+ UNSET,
606
+ None,
607
+ options,
608
+ ),
609
+ )
610
+
611
+ def get_listener(
612
+ self, id: str, listener_id: str, *, options: RequestOptions | None = None
613
+ ) -> ApiResponse[m.GetListenerResponse]:
614
+ "Get a listener"
615
+ return cast(
616
+ ApiResponse[m.GetListenerResponse],
617
+ self._transport.request(
618
+ "loadbalancer",
619
+ "https://loadbalancer.{region}.basaltic.sh",
620
+ _OPS["getListener"],
621
+ "json",
622
+ {"id": id, "listener_id": listener_id},
623
+ UNSET,
624
+ None,
625
+ options,
626
+ ),
627
+ )
628
+
629
+ def get_listener_by_reference(
630
+ self,
631
+ id: str,
632
+ reference: str,
633
+ *,
634
+ scope: m.GetListenerScope | None = None,
635
+ options: RequestOptions | None = None,
636
+ ) -> ApiResponse[m.GetListenerResource]:
637
+ return cast(
638
+ ApiResponse[m.GetListenerResource],
639
+ resolve_reference(
640
+ reference,
641
+ lambda id: self.get_listener(id, id, options=options),
642
+ lambda match: self.list_listeners(
643
+ id,
644
+ query=cast(m.ListListenersQuery, {**reference_scope(scope), **match}),
645
+ options=options,
646
+ ),
647
+ True,
648
+ "listener",
649
+ ),
650
+ )
651
+
652
+ def get_load_balancer(
653
+ self, id: str, *, options: RequestOptions | None = None
654
+ ) -> ApiResponse[m.GetLoadBalancerResponse]:
655
+ "Get a load balancer"
656
+ return cast(
657
+ ApiResponse[m.GetLoadBalancerResponse],
658
+ self._transport.request(
659
+ "loadbalancer",
660
+ "https://loadbalancer.{region}.basaltic.sh",
661
+ _OPS["getLoadBalancer"],
662
+ "json",
663
+ {"id": id},
664
+ UNSET,
665
+ None,
666
+ options,
667
+ ),
668
+ )
669
+
670
+ def get_load_balancer_by_reference(
671
+ self,
672
+ reference: str,
673
+ *,
674
+ scope: m.GetLoadBalancerScope | None = None,
675
+ options: RequestOptions | None = None,
676
+ ) -> ApiResponse[m.GetLoadBalancerResource]:
677
+ return cast(
678
+ ApiResponse[m.GetLoadBalancerResource],
679
+ resolve_reference(
680
+ reference,
681
+ lambda id: self.get_load_balancer(id, options=options),
682
+ lambda match: self.list_load_balancers(
683
+ query=cast(
684
+ m.ListLoadBalancersQuery, {**reference_scope(scope), **match, "limit": 2}
685
+ ),
686
+ options=options,
687
+ ),
688
+ True,
689
+ "load_balancer",
690
+ ),
691
+ )
692
+
693
+ def get_rule(
694
+ self, id: str, listener_id: str, rule_id: str, *, options: RequestOptions | None = None
695
+ ) -> ApiResponse[m.GetRuleResponse]:
696
+ "Get a routing rule"
697
+ return cast(
698
+ ApiResponse[m.GetRuleResponse],
699
+ self._transport.request(
700
+ "loadbalancer",
701
+ "https://loadbalancer.{region}.basaltic.sh",
702
+ _OPS["getRule"],
703
+ "json",
704
+ {"id": id, "listener_id": listener_id, "rule_id": rule_id},
705
+ UNSET,
706
+ None,
707
+ options,
708
+ ),
709
+ )
710
+
711
+ def get_rule_by_reference(
712
+ self,
713
+ id: str,
714
+ listener_id: str,
715
+ reference: str,
716
+ *,
717
+ scope: m.GetRuleScope | None = None,
718
+ options: RequestOptions | None = None,
719
+ ) -> ApiResponse[m.GetRuleResource]:
720
+ return cast(
721
+ ApiResponse[m.GetRuleResource],
722
+ resolve_reference(
723
+ reference,
724
+ lambda id: self.get_rule(id, listener_id, id, options=options),
725
+ lambda match: self.list_rules(
726
+ id,
727
+ listener_id,
728
+ query=cast(m.ListRulesQuery, {**reference_scope(scope), **match}),
729
+ options=options,
730
+ ),
731
+ True,
732
+ "rule",
733
+ ),
734
+ )
735
+
736
+ def get_target(
737
+ self, id: str, target_id: str, *, options: RequestOptions | None = None
738
+ ) -> ApiResponse[m.GetTargetResponse]:
739
+ "Get a target"
740
+ return cast(
741
+ ApiResponse[m.GetTargetResponse],
742
+ self._transport.request(
743
+ "loadbalancer",
744
+ "https://loadbalancer.{region}.basaltic.sh",
745
+ _OPS["getTarget"],
746
+ "json",
747
+ {"id": id, "target_id": target_id},
748
+ UNSET,
749
+ None,
750
+ options,
751
+ ),
752
+ )
753
+
754
+ def get_target_by_reference(
755
+ self,
756
+ id: str,
757
+ reference: str,
758
+ *,
759
+ scope: m.GetTargetScope | None = None,
760
+ options: RequestOptions | None = None,
761
+ ) -> ApiResponse[m.GetTargetResource]:
762
+ return cast(
763
+ ApiResponse[m.GetTargetResource],
764
+ resolve_reference(
765
+ reference,
766
+ lambda id: self.get_target(id, id, options=options),
767
+ lambda match: self.list_targets(
768
+ id,
769
+ query=cast(m.ListTargetsQuery, {**reference_scope(scope), **match}),
770
+ options=options,
771
+ ),
772
+ True,
773
+ "target",
774
+ ),
775
+ )
776
+
777
+ def get_target_group(
778
+ self, id: str, *, options: RequestOptions | None = None
779
+ ) -> ApiResponse[m.GetTargetGroupResponse]:
780
+ "Get a target group"
781
+ return cast(
782
+ ApiResponse[m.GetTargetGroupResponse],
783
+ self._transport.request(
784
+ "loadbalancer",
785
+ "https://loadbalancer.{region}.basaltic.sh",
786
+ _OPS["getTargetGroup"],
787
+ "json",
788
+ {"id": id},
789
+ UNSET,
790
+ None,
791
+ options,
792
+ ),
793
+ )
794
+
795
+ def get_target_group_by_reference(
796
+ self,
797
+ reference: str,
798
+ *,
799
+ scope: m.GetTargetGroupScope | None = None,
800
+ options: RequestOptions | None = None,
801
+ ) -> ApiResponse[m.GetTargetGroupResource]:
802
+ return cast(
803
+ ApiResponse[m.GetTargetGroupResource],
804
+ resolve_reference(
805
+ reference,
806
+ lambda id: self.get_target_group(id, options=options),
807
+ lambda match: self.list_target_groups(
808
+ query=cast(
809
+ m.ListTargetGroupsQuery, {**reference_scope(scope), **match, "limit": 2}
810
+ ),
811
+ options=options,
812
+ ),
813
+ True,
814
+ "target_group",
815
+ ),
816
+ )
817
+
818
+ def list_listeners(
819
+ self,
820
+ id: str,
821
+ *,
822
+ query: m.ListListenersQuery | None = None,
823
+ options: RequestOptions | None = None,
824
+ ) -> Page[m.ListListenersResponse, m.ListListenersItem]:
825
+ "List this load balancer's listeners"
826
+ return cast(
827
+ Page[m.ListListenersResponse, m.ListListenersItem],
828
+ self._transport.request(
829
+ "loadbalancer",
830
+ "https://loadbalancer.{region}.basaltic.sh",
831
+ _OPS["listListeners"],
832
+ "page",
833
+ {"id": id},
834
+ UNSET,
835
+ query,
836
+ options,
837
+ ),
838
+ )
839
+
840
+ def list_load_balancer_replicas(
841
+ self,
842
+ id: str,
843
+ *,
844
+ query: m.ListLoadBalancerReplicasQuery | None = None,
845
+ options: RequestOptions | None = None,
846
+ ) -> Page[m.ListLoadBalancerReplicasResponse, m.ListLoadBalancerReplicasItem]:
847
+ "List the LB's instance replicas with live health"
848
+ return cast(
849
+ Page[m.ListLoadBalancerReplicasResponse, m.ListLoadBalancerReplicasItem],
850
+ self._transport.request(
851
+ "loadbalancer",
852
+ "https://loadbalancer.{region}.basaltic.sh",
853
+ _OPS["listLoadBalancerReplicas"],
854
+ "page",
855
+ {"id": id},
856
+ UNSET,
857
+ query,
858
+ options,
859
+ ),
860
+ )
861
+
862
+ def list_load_balancers(
863
+ self,
864
+ *,
865
+ query: m.ListLoadBalancersQuery | None = None,
866
+ options: RequestOptions | None = None,
867
+ ) -> Page[m.ListLoadBalancersResponse, m.ListLoadBalancersItem]:
868
+ "List load balancers"
869
+ return cast(
870
+ Page[m.ListLoadBalancersResponse, m.ListLoadBalancersItem],
871
+ self._transport.request(
872
+ "loadbalancer",
873
+ "https://loadbalancer.{region}.basaltic.sh",
874
+ _OPS["listLoadBalancers"],
875
+ "page",
876
+ {},
877
+ UNSET,
878
+ query,
879
+ options,
880
+ ),
881
+ )
882
+
883
+ def list_load_balancers_all(
884
+ self,
885
+ *,
886
+ query: m.ListLoadBalancersQuery | None = None,
887
+ options: RequestOptions | None = None,
888
+ ) -> Iterator[m.ListLoadBalancersItem]:
889
+ return iterate_pages(
890
+ lambda marker: self.list_load_balancers(
891
+ query=cast(m.ListLoadBalancersQuery, {**(query or {}), "marker": marker}),
892
+ options=options,
893
+ ),
894
+ (query or {}).get("marker", ""),
895
+ )
896
+
897
+ def list_rules(
898
+ self,
899
+ id: str,
900
+ listener_id: str,
901
+ *,
902
+ query: m.ListRulesQuery | None = None,
903
+ options: RequestOptions | None = None,
904
+ ) -> Page[m.ListRulesResponse, m.ListRulesItem]:
905
+ "List this listener's rules"
906
+ return cast(
907
+ Page[m.ListRulesResponse, m.ListRulesItem],
908
+ self._transport.request(
909
+ "loadbalancer",
910
+ "https://loadbalancer.{region}.basaltic.sh",
911
+ _OPS["listRules"],
912
+ "page",
913
+ {"id": id, "listener_id": listener_id},
914
+ UNSET,
915
+ query,
916
+ options,
917
+ ),
918
+ )
919
+
920
+ def list_target_groups(
921
+ self, *, query: m.ListTargetGroupsQuery | None = None, options: RequestOptions | None = None
922
+ ) -> Page[m.ListTargetGroupsResponse, m.ListTargetGroupsItem]:
923
+ "List target groups"
924
+ return cast(
925
+ Page[m.ListTargetGroupsResponse, m.ListTargetGroupsItem],
926
+ self._transport.request(
927
+ "loadbalancer",
928
+ "https://loadbalancer.{region}.basaltic.sh",
929
+ _OPS["listTargetGroups"],
930
+ "page",
931
+ {},
932
+ UNSET,
933
+ query,
934
+ options,
935
+ ),
936
+ )
937
+
938
+ def list_target_groups_all(
939
+ self, *, query: m.ListTargetGroupsQuery | None = None, options: RequestOptions | None = None
940
+ ) -> Iterator[m.ListTargetGroupsItem]:
941
+ return iterate_pages(
942
+ lambda marker: self.list_target_groups(
943
+ query=cast(m.ListTargetGroupsQuery, {**(query or {}), "marker": marker}),
944
+ options=options,
945
+ ),
946
+ (query or {}).get("marker", ""),
947
+ )
948
+
949
+ def list_targets(
950
+ self,
951
+ id: str,
952
+ *,
953
+ query: m.ListTargetsQuery | None = None,
954
+ options: RequestOptions | None = None,
955
+ ) -> Page[m.ListTargetsResponse, m.ListTargetsItem]:
956
+ "List targets in this group"
957
+ return cast(
958
+ Page[m.ListTargetsResponse, m.ListTargetsItem],
959
+ self._transport.request(
960
+ "loadbalancer",
961
+ "https://loadbalancer.{region}.basaltic.sh",
962
+ _OPS["listTargets"],
963
+ "page",
964
+ {"id": id},
965
+ UNSET,
966
+ query,
967
+ options,
968
+ ),
969
+ )
970
+
971
+ def update_listener(
972
+ self,
973
+ id: str,
974
+ listener_id: str,
975
+ body: m.UpdateListenerBody,
976
+ *,
977
+ options: RequestOptions | None = None,
978
+ ) -> ApiResponse[m.UpdateListenerResponse]:
979
+ "Patch a listener (rotate cert, change default target group)"
980
+ return cast(
981
+ ApiResponse[m.UpdateListenerResponse],
982
+ self._transport.request(
983
+ "loadbalancer",
984
+ "https://loadbalancer.{region}.basaltic.sh",
985
+ _OPS["updateListener"],
986
+ "json",
987
+ {"id": id, "listener_id": listener_id},
988
+ body,
989
+ None,
990
+ options,
991
+ ),
992
+ )
993
+
994
+ def update_load_balancer(
995
+ self, id: str, body: m.UpdateLoadBalancerBody, *, options: RequestOptions | None = None
996
+ ) -> ApiResponse[m.UpdateLoadBalancerResponse]:
997
+ "Scale or resize a load balancer"
998
+ return cast(
999
+ ApiResponse[m.UpdateLoadBalancerResponse],
1000
+ self._transport.request(
1001
+ "loadbalancer",
1002
+ "https://loadbalancer.{region}.basaltic.sh",
1003
+ _OPS["updateLoadBalancer"],
1004
+ "json",
1005
+ {"id": id},
1006
+ body,
1007
+ None,
1008
+ options,
1009
+ ),
1010
+ )
1011
+
1012
+ def update_rule(
1013
+ self,
1014
+ id: str,
1015
+ listener_id: str,
1016
+ rule_id: str,
1017
+ body: m.UpdateRuleBody,
1018
+ *,
1019
+ options: RequestOptions | None = None,
1020
+ ) -> ApiResponse[m.UpdateRuleResponse]:
1021
+ "Update a routing rule (full replace)"
1022
+ return cast(
1023
+ ApiResponse[m.UpdateRuleResponse],
1024
+ self._transport.request(
1025
+ "loadbalancer",
1026
+ "https://loadbalancer.{region}.basaltic.sh",
1027
+ _OPS["updateRule"],
1028
+ "json",
1029
+ {"id": id, "listener_id": listener_id, "rule_id": rule_id},
1030
+ body,
1031
+ None,
1032
+ options,
1033
+ ),
1034
+ )
1035
+
1036
+ def update_target_group(
1037
+ self, id: str, body: m.UpdateTargetGroupBody, *, options: RequestOptions | None = None
1038
+ ) -> ApiResponse[m.UpdateTargetGroupResponse]:
1039
+ "Update target group health checks, framing, or stickiness"
1040
+ return cast(
1041
+ ApiResponse[m.UpdateTargetGroupResponse],
1042
+ self._transport.request(
1043
+ "loadbalancer",
1044
+ "https://loadbalancer.{region}.basaltic.sh",
1045
+ _OPS["updateTargetGroup"],
1046
+ "json",
1047
+ {"id": id},
1048
+ body,
1049
+ None,
1050
+ options,
1051
+ ),
1052
+ )
1053
+
1054
+
1055
+ class AsyncLoadbalancerService:
1056
+ def __init__(self, transport: AsyncTransport) -> None:
1057
+ self._transport = transport
1058
+
1059
+ async def attach_listener_certificate(
1060
+ self,
1061
+ id: str,
1062
+ listener_id: str,
1063
+ body: m.AttachListenerCertificateBody,
1064
+ *,
1065
+ options: RequestOptions | None = None,
1066
+ ) -> ApiResponse[m.AttachListenerCertificateResponse]:
1067
+ "Attach an additional certificate to an HTTPS listener"
1068
+ return cast(
1069
+ ApiResponse[m.AttachListenerCertificateResponse],
1070
+ await self._transport.request(
1071
+ "loadbalancer",
1072
+ "https://loadbalancer.{region}.basaltic.sh",
1073
+ _OPS["attachListenerCertificate"],
1074
+ "json",
1075
+ {"id": id, "listener_id": listener_id},
1076
+ body,
1077
+ None,
1078
+ options,
1079
+ ),
1080
+ )
1081
+
1082
+ async def attach_target(
1083
+ self, id: str, body: m.AttachTargetBody, *, options: RequestOptions | None = None
1084
+ ) -> ApiResponse[m.AttachTargetResponse]:
1085
+ "Attach a target to this group"
1086
+ return cast(
1087
+ ApiResponse[m.AttachTargetResponse],
1088
+ await self._transport.request(
1089
+ "loadbalancer",
1090
+ "https://loadbalancer.{region}.basaltic.sh",
1091
+ _OPS["attachTarget"],
1092
+ "json",
1093
+ {"id": id},
1094
+ body,
1095
+ None,
1096
+ options,
1097
+ ),
1098
+ )
1099
+
1100
+ async def create_listener(
1101
+ self, id: str, body: m.CreateListenerBody, *, options: RequestOptions | None = None
1102
+ ) -> ApiResponse[m.CreateListenerResponse]:
1103
+ "Create a listener on this load balancer"
1104
+ return cast(
1105
+ ApiResponse[m.CreateListenerResponse],
1106
+ await self._transport.request(
1107
+ "loadbalancer",
1108
+ "https://loadbalancer.{region}.basaltic.sh",
1109
+ _OPS["createListener"],
1110
+ "json",
1111
+ {"id": id},
1112
+ body,
1113
+ None,
1114
+ options,
1115
+ ),
1116
+ )
1117
+
1118
+ async def create_load_balancer(
1119
+ self, body: m.CreateLoadBalancerBody, *, options: RequestOptions | None = None
1120
+ ) -> ApiResponse[m.CreateLoadBalancerResponse]:
1121
+ "Create a load balancer"
1122
+ return cast(
1123
+ ApiResponse[m.CreateLoadBalancerResponse],
1124
+ await self._transport.request(
1125
+ "loadbalancer",
1126
+ "https://loadbalancer.{region}.basaltic.sh",
1127
+ _OPS["createLoadBalancer"],
1128
+ "json",
1129
+ {},
1130
+ body,
1131
+ None,
1132
+ options,
1133
+ ),
1134
+ )
1135
+
1136
+ async def create_rule(
1137
+ self,
1138
+ id: str,
1139
+ listener_id: str,
1140
+ body: m.CreateRuleBody,
1141
+ *,
1142
+ options: RequestOptions | None = None,
1143
+ ) -> ApiResponse[m.CreateRuleResponse]:
1144
+ "Create a routing rule on this listener (HTTP/HTTPS only)"
1145
+ return cast(
1146
+ ApiResponse[m.CreateRuleResponse],
1147
+ await self._transport.request(
1148
+ "loadbalancer",
1149
+ "https://loadbalancer.{region}.basaltic.sh",
1150
+ _OPS["createRule"],
1151
+ "json",
1152
+ {"id": id, "listener_id": listener_id},
1153
+ body,
1154
+ None,
1155
+ options,
1156
+ ),
1157
+ )
1158
+
1159
+ async def create_target_group(
1160
+ self, body: m.CreateTargetGroupBody, *, options: RequestOptions | None = None
1161
+ ) -> ApiResponse[m.CreateTargetGroupResponse]:
1162
+ "Create a target group"
1163
+ return cast(
1164
+ ApiResponse[m.CreateTargetGroupResponse],
1165
+ await self._transport.request(
1166
+ "loadbalancer",
1167
+ "https://loadbalancer.{region}.basaltic.sh",
1168
+ _OPS["createTargetGroup"],
1169
+ "json",
1170
+ {},
1171
+ body,
1172
+ None,
1173
+ options,
1174
+ ),
1175
+ )
1176
+
1177
+ async def delete_listener(
1178
+ self, id: str, listener_id: str, *, options: RequestOptions | None = None
1179
+ ) -> None:
1180
+ "Delete a listener"
1181
+ return cast(
1182
+ None,
1183
+ await self._transport.request(
1184
+ "loadbalancer",
1185
+ "https://loadbalancer.{region}.basaltic.sh",
1186
+ _OPS["deleteListener"],
1187
+ "discard",
1188
+ {"id": id, "listener_id": listener_id},
1189
+ UNSET,
1190
+ None,
1191
+ options,
1192
+ ),
1193
+ )
1194
+
1195
+ async def delete_load_balancer(self, id: str, *, options: RequestOptions | None = None) -> None:
1196
+ "Delete a load balancer"
1197
+ return cast(
1198
+ None,
1199
+ await self._transport.request(
1200
+ "loadbalancer",
1201
+ "https://loadbalancer.{region}.basaltic.sh",
1202
+ _OPS["deleteLoadBalancer"],
1203
+ "discard",
1204
+ {"id": id},
1205
+ UNSET,
1206
+ None,
1207
+ options,
1208
+ ),
1209
+ )
1210
+
1211
+ async def delete_rule_in_listener(
1212
+ self, id: str, listener_id: str, rule_id: str, *, options: RequestOptions | None = None
1213
+ ) -> None:
1214
+ "Delete a routing rule"
1215
+ return cast(
1216
+ None,
1217
+ await self._transport.request(
1218
+ "loadbalancer",
1219
+ "https://loadbalancer.{region}.basaltic.sh",
1220
+ _OPS["deleteRuleInListener"],
1221
+ "discard",
1222
+ {"id": id, "listener_id": listener_id, "rule_id": rule_id},
1223
+ UNSET,
1224
+ None,
1225
+ options,
1226
+ ),
1227
+ )
1228
+
1229
+ async def delete_target_group(self, id: str, *, options: RequestOptions | None = None) -> None:
1230
+ "Delete a target group"
1231
+ return cast(
1232
+ None,
1233
+ await self._transport.request(
1234
+ "loadbalancer",
1235
+ "https://loadbalancer.{region}.basaltic.sh",
1236
+ _OPS["deleteTargetGroup"],
1237
+ "discard",
1238
+ {"id": id},
1239
+ UNSET,
1240
+ None,
1241
+ options,
1242
+ ),
1243
+ )
1244
+
1245
+ async def detach_listener_certificate(
1246
+ self,
1247
+ id: str,
1248
+ listener_id: str,
1249
+ certificate_id: str,
1250
+ *,
1251
+ options: RequestOptions | None = None,
1252
+ ) -> None:
1253
+ "Detach a certificate from an HTTPS listener"
1254
+ return cast(
1255
+ None,
1256
+ await self._transport.request(
1257
+ "loadbalancer",
1258
+ "https://loadbalancer.{region}.basaltic.sh",
1259
+ _OPS["detachListenerCertificate"],
1260
+ "discard",
1261
+ {"id": id, "listener_id": listener_id, "certificate_id": certificate_id},
1262
+ UNSET,
1263
+ None,
1264
+ options,
1265
+ ),
1266
+ )
1267
+
1268
+ async def detach_target(
1269
+ self, id: str, target_id: str, *, options: RequestOptions | None = None
1270
+ ) -> None:
1271
+ "Detach a target"
1272
+ return cast(
1273
+ None,
1274
+ await self._transport.request(
1275
+ "loadbalancer",
1276
+ "https://loadbalancer.{region}.basaltic.sh",
1277
+ _OPS["detachTarget"],
1278
+ "discard",
1279
+ {"id": id, "target_id": target_id},
1280
+ UNSET,
1281
+ None,
1282
+ options,
1283
+ ),
1284
+ )
1285
+
1286
+ async def get_listener(
1287
+ self, id: str, listener_id: str, *, options: RequestOptions | None = None
1288
+ ) -> ApiResponse[m.GetListenerResponse]:
1289
+ "Get a listener"
1290
+ return cast(
1291
+ ApiResponse[m.GetListenerResponse],
1292
+ await self._transport.request(
1293
+ "loadbalancer",
1294
+ "https://loadbalancer.{region}.basaltic.sh",
1295
+ _OPS["getListener"],
1296
+ "json",
1297
+ {"id": id, "listener_id": listener_id},
1298
+ UNSET,
1299
+ None,
1300
+ options,
1301
+ ),
1302
+ )
1303
+
1304
+ async def get_listener_by_reference(
1305
+ self,
1306
+ id: str,
1307
+ reference: str,
1308
+ *,
1309
+ scope: m.GetListenerScope | None = None,
1310
+ options: RequestOptions | None = None,
1311
+ ) -> ApiResponse[m.GetListenerResource]:
1312
+ return cast(
1313
+ ApiResponse[m.GetListenerResource],
1314
+ await aresolve_reference(
1315
+ reference,
1316
+ lambda id: self.get_listener(id, id, options=options),
1317
+ lambda match: self.list_listeners(
1318
+ id,
1319
+ query=cast(m.ListListenersQuery, {**reference_scope(scope), **match}),
1320
+ options=options,
1321
+ ),
1322
+ True,
1323
+ "listener",
1324
+ ),
1325
+ )
1326
+
1327
+ async def get_load_balancer(
1328
+ self, id: str, *, options: RequestOptions | None = None
1329
+ ) -> ApiResponse[m.GetLoadBalancerResponse]:
1330
+ "Get a load balancer"
1331
+ return cast(
1332
+ ApiResponse[m.GetLoadBalancerResponse],
1333
+ await self._transport.request(
1334
+ "loadbalancer",
1335
+ "https://loadbalancer.{region}.basaltic.sh",
1336
+ _OPS["getLoadBalancer"],
1337
+ "json",
1338
+ {"id": id},
1339
+ UNSET,
1340
+ None,
1341
+ options,
1342
+ ),
1343
+ )
1344
+
1345
+ async def get_load_balancer_by_reference(
1346
+ self,
1347
+ reference: str,
1348
+ *,
1349
+ scope: m.GetLoadBalancerScope | None = None,
1350
+ options: RequestOptions | None = None,
1351
+ ) -> ApiResponse[m.GetLoadBalancerResource]:
1352
+ return cast(
1353
+ ApiResponse[m.GetLoadBalancerResource],
1354
+ await aresolve_reference(
1355
+ reference,
1356
+ lambda id: self.get_load_balancer(id, options=options),
1357
+ lambda match: self.list_load_balancers(
1358
+ query=cast(
1359
+ m.ListLoadBalancersQuery, {**reference_scope(scope), **match, "limit": 2}
1360
+ ),
1361
+ options=options,
1362
+ ),
1363
+ True,
1364
+ "load_balancer",
1365
+ ),
1366
+ )
1367
+
1368
+ async def get_rule(
1369
+ self, id: str, listener_id: str, rule_id: str, *, options: RequestOptions | None = None
1370
+ ) -> ApiResponse[m.GetRuleResponse]:
1371
+ "Get a routing rule"
1372
+ return cast(
1373
+ ApiResponse[m.GetRuleResponse],
1374
+ await self._transport.request(
1375
+ "loadbalancer",
1376
+ "https://loadbalancer.{region}.basaltic.sh",
1377
+ _OPS["getRule"],
1378
+ "json",
1379
+ {"id": id, "listener_id": listener_id, "rule_id": rule_id},
1380
+ UNSET,
1381
+ None,
1382
+ options,
1383
+ ),
1384
+ )
1385
+
1386
+ async def get_rule_by_reference(
1387
+ self,
1388
+ id: str,
1389
+ listener_id: str,
1390
+ reference: str,
1391
+ *,
1392
+ scope: m.GetRuleScope | None = None,
1393
+ options: RequestOptions | None = None,
1394
+ ) -> ApiResponse[m.GetRuleResource]:
1395
+ return cast(
1396
+ ApiResponse[m.GetRuleResource],
1397
+ await aresolve_reference(
1398
+ reference,
1399
+ lambda id: self.get_rule(id, listener_id, id, options=options),
1400
+ lambda match: self.list_rules(
1401
+ id,
1402
+ listener_id,
1403
+ query=cast(m.ListRulesQuery, {**reference_scope(scope), **match}),
1404
+ options=options,
1405
+ ),
1406
+ True,
1407
+ "rule",
1408
+ ),
1409
+ )
1410
+
1411
+ async def get_target(
1412
+ self, id: str, target_id: str, *, options: RequestOptions | None = None
1413
+ ) -> ApiResponse[m.GetTargetResponse]:
1414
+ "Get a target"
1415
+ return cast(
1416
+ ApiResponse[m.GetTargetResponse],
1417
+ await self._transport.request(
1418
+ "loadbalancer",
1419
+ "https://loadbalancer.{region}.basaltic.sh",
1420
+ _OPS["getTarget"],
1421
+ "json",
1422
+ {"id": id, "target_id": target_id},
1423
+ UNSET,
1424
+ None,
1425
+ options,
1426
+ ),
1427
+ )
1428
+
1429
+ async def get_target_by_reference(
1430
+ self,
1431
+ id: str,
1432
+ reference: str,
1433
+ *,
1434
+ scope: m.GetTargetScope | None = None,
1435
+ options: RequestOptions | None = None,
1436
+ ) -> ApiResponse[m.GetTargetResource]:
1437
+ return cast(
1438
+ ApiResponse[m.GetTargetResource],
1439
+ await aresolve_reference(
1440
+ reference,
1441
+ lambda id: self.get_target(id, id, options=options),
1442
+ lambda match: self.list_targets(
1443
+ id,
1444
+ query=cast(m.ListTargetsQuery, {**reference_scope(scope), **match}),
1445
+ options=options,
1446
+ ),
1447
+ True,
1448
+ "target",
1449
+ ),
1450
+ )
1451
+
1452
+ async def get_target_group(
1453
+ self, id: str, *, options: RequestOptions | None = None
1454
+ ) -> ApiResponse[m.GetTargetGroupResponse]:
1455
+ "Get a target group"
1456
+ return cast(
1457
+ ApiResponse[m.GetTargetGroupResponse],
1458
+ await self._transport.request(
1459
+ "loadbalancer",
1460
+ "https://loadbalancer.{region}.basaltic.sh",
1461
+ _OPS["getTargetGroup"],
1462
+ "json",
1463
+ {"id": id},
1464
+ UNSET,
1465
+ None,
1466
+ options,
1467
+ ),
1468
+ )
1469
+
1470
+ async def get_target_group_by_reference(
1471
+ self,
1472
+ reference: str,
1473
+ *,
1474
+ scope: m.GetTargetGroupScope | None = None,
1475
+ options: RequestOptions | None = None,
1476
+ ) -> ApiResponse[m.GetTargetGroupResource]:
1477
+ return cast(
1478
+ ApiResponse[m.GetTargetGroupResource],
1479
+ await aresolve_reference(
1480
+ reference,
1481
+ lambda id: self.get_target_group(id, options=options),
1482
+ lambda match: self.list_target_groups(
1483
+ query=cast(
1484
+ m.ListTargetGroupsQuery, {**reference_scope(scope), **match, "limit": 2}
1485
+ ),
1486
+ options=options,
1487
+ ),
1488
+ True,
1489
+ "target_group",
1490
+ ),
1491
+ )
1492
+
1493
+ async def list_listeners(
1494
+ self,
1495
+ id: str,
1496
+ *,
1497
+ query: m.ListListenersQuery | None = None,
1498
+ options: RequestOptions | None = None,
1499
+ ) -> Page[m.ListListenersResponse, m.ListListenersItem]:
1500
+ "List this load balancer's listeners"
1501
+ return cast(
1502
+ Page[m.ListListenersResponse, m.ListListenersItem],
1503
+ await self._transport.request(
1504
+ "loadbalancer",
1505
+ "https://loadbalancer.{region}.basaltic.sh",
1506
+ _OPS["listListeners"],
1507
+ "page",
1508
+ {"id": id},
1509
+ UNSET,
1510
+ query,
1511
+ options,
1512
+ ),
1513
+ )
1514
+
1515
+ async def list_load_balancer_replicas(
1516
+ self,
1517
+ id: str,
1518
+ *,
1519
+ query: m.ListLoadBalancerReplicasQuery | None = None,
1520
+ options: RequestOptions | None = None,
1521
+ ) -> Page[m.ListLoadBalancerReplicasResponse, m.ListLoadBalancerReplicasItem]:
1522
+ "List the LB's instance replicas with live health"
1523
+ return cast(
1524
+ Page[m.ListLoadBalancerReplicasResponse, m.ListLoadBalancerReplicasItem],
1525
+ await self._transport.request(
1526
+ "loadbalancer",
1527
+ "https://loadbalancer.{region}.basaltic.sh",
1528
+ _OPS["listLoadBalancerReplicas"],
1529
+ "page",
1530
+ {"id": id},
1531
+ UNSET,
1532
+ query,
1533
+ options,
1534
+ ),
1535
+ )
1536
+
1537
+ async def list_load_balancers(
1538
+ self,
1539
+ *,
1540
+ query: m.ListLoadBalancersQuery | None = None,
1541
+ options: RequestOptions | None = None,
1542
+ ) -> Page[m.ListLoadBalancersResponse, m.ListLoadBalancersItem]:
1543
+ "List load balancers"
1544
+ return cast(
1545
+ Page[m.ListLoadBalancersResponse, m.ListLoadBalancersItem],
1546
+ await self._transport.request(
1547
+ "loadbalancer",
1548
+ "https://loadbalancer.{region}.basaltic.sh",
1549
+ _OPS["listLoadBalancers"],
1550
+ "page",
1551
+ {},
1552
+ UNSET,
1553
+ query,
1554
+ options,
1555
+ ),
1556
+ )
1557
+
1558
+ def list_load_balancers_all(
1559
+ self,
1560
+ *,
1561
+ query: m.ListLoadBalancersQuery | None = None,
1562
+ options: RequestOptions | None = None,
1563
+ ) -> AsyncIterator[m.ListLoadBalancersItem]:
1564
+ return aiterate_pages(
1565
+ lambda marker: self.list_load_balancers(
1566
+ query=cast(m.ListLoadBalancersQuery, {**(query or {}), "marker": marker}),
1567
+ options=options,
1568
+ ),
1569
+ (query or {}).get("marker", ""),
1570
+ )
1571
+
1572
+ async def list_rules(
1573
+ self,
1574
+ id: str,
1575
+ listener_id: str,
1576
+ *,
1577
+ query: m.ListRulesQuery | None = None,
1578
+ options: RequestOptions | None = None,
1579
+ ) -> Page[m.ListRulesResponse, m.ListRulesItem]:
1580
+ "List this listener's rules"
1581
+ return cast(
1582
+ Page[m.ListRulesResponse, m.ListRulesItem],
1583
+ await self._transport.request(
1584
+ "loadbalancer",
1585
+ "https://loadbalancer.{region}.basaltic.sh",
1586
+ _OPS["listRules"],
1587
+ "page",
1588
+ {"id": id, "listener_id": listener_id},
1589
+ UNSET,
1590
+ query,
1591
+ options,
1592
+ ),
1593
+ )
1594
+
1595
+ async def list_target_groups(
1596
+ self, *, query: m.ListTargetGroupsQuery | None = None, options: RequestOptions | None = None
1597
+ ) -> Page[m.ListTargetGroupsResponse, m.ListTargetGroupsItem]:
1598
+ "List target groups"
1599
+ return cast(
1600
+ Page[m.ListTargetGroupsResponse, m.ListTargetGroupsItem],
1601
+ await self._transport.request(
1602
+ "loadbalancer",
1603
+ "https://loadbalancer.{region}.basaltic.sh",
1604
+ _OPS["listTargetGroups"],
1605
+ "page",
1606
+ {},
1607
+ UNSET,
1608
+ query,
1609
+ options,
1610
+ ),
1611
+ )
1612
+
1613
+ def list_target_groups_all(
1614
+ self, *, query: m.ListTargetGroupsQuery | None = None, options: RequestOptions | None = None
1615
+ ) -> AsyncIterator[m.ListTargetGroupsItem]:
1616
+ return aiterate_pages(
1617
+ lambda marker: self.list_target_groups(
1618
+ query=cast(m.ListTargetGroupsQuery, {**(query or {}), "marker": marker}),
1619
+ options=options,
1620
+ ),
1621
+ (query or {}).get("marker", ""),
1622
+ )
1623
+
1624
+ async def list_targets(
1625
+ self,
1626
+ id: str,
1627
+ *,
1628
+ query: m.ListTargetsQuery | None = None,
1629
+ options: RequestOptions | None = None,
1630
+ ) -> Page[m.ListTargetsResponse, m.ListTargetsItem]:
1631
+ "List targets in this group"
1632
+ return cast(
1633
+ Page[m.ListTargetsResponse, m.ListTargetsItem],
1634
+ await self._transport.request(
1635
+ "loadbalancer",
1636
+ "https://loadbalancer.{region}.basaltic.sh",
1637
+ _OPS["listTargets"],
1638
+ "page",
1639
+ {"id": id},
1640
+ UNSET,
1641
+ query,
1642
+ options,
1643
+ ),
1644
+ )
1645
+
1646
+ async def update_listener(
1647
+ self,
1648
+ id: str,
1649
+ listener_id: str,
1650
+ body: m.UpdateListenerBody,
1651
+ *,
1652
+ options: RequestOptions | None = None,
1653
+ ) -> ApiResponse[m.UpdateListenerResponse]:
1654
+ "Patch a listener (rotate cert, change default target group)"
1655
+ return cast(
1656
+ ApiResponse[m.UpdateListenerResponse],
1657
+ await self._transport.request(
1658
+ "loadbalancer",
1659
+ "https://loadbalancer.{region}.basaltic.sh",
1660
+ _OPS["updateListener"],
1661
+ "json",
1662
+ {"id": id, "listener_id": listener_id},
1663
+ body,
1664
+ None,
1665
+ options,
1666
+ ),
1667
+ )
1668
+
1669
+ async def update_load_balancer(
1670
+ self, id: str, body: m.UpdateLoadBalancerBody, *, options: RequestOptions | None = None
1671
+ ) -> ApiResponse[m.UpdateLoadBalancerResponse]:
1672
+ "Scale or resize a load balancer"
1673
+ return cast(
1674
+ ApiResponse[m.UpdateLoadBalancerResponse],
1675
+ await self._transport.request(
1676
+ "loadbalancer",
1677
+ "https://loadbalancer.{region}.basaltic.sh",
1678
+ _OPS["updateLoadBalancer"],
1679
+ "json",
1680
+ {"id": id},
1681
+ body,
1682
+ None,
1683
+ options,
1684
+ ),
1685
+ )
1686
+
1687
+ async def update_rule(
1688
+ self,
1689
+ id: str,
1690
+ listener_id: str,
1691
+ rule_id: str,
1692
+ body: m.UpdateRuleBody,
1693
+ *,
1694
+ options: RequestOptions | None = None,
1695
+ ) -> ApiResponse[m.UpdateRuleResponse]:
1696
+ "Update a routing rule (full replace)"
1697
+ return cast(
1698
+ ApiResponse[m.UpdateRuleResponse],
1699
+ await self._transport.request(
1700
+ "loadbalancer",
1701
+ "https://loadbalancer.{region}.basaltic.sh",
1702
+ _OPS["updateRule"],
1703
+ "json",
1704
+ {"id": id, "listener_id": listener_id, "rule_id": rule_id},
1705
+ body,
1706
+ None,
1707
+ options,
1708
+ ),
1709
+ )
1710
+
1711
+ async def update_target_group(
1712
+ self, id: str, body: m.UpdateTargetGroupBody, *, options: RequestOptions | None = None
1713
+ ) -> ApiResponse[m.UpdateTargetGroupResponse]:
1714
+ "Update target group health checks, framing, or stickiness"
1715
+ return cast(
1716
+ ApiResponse[m.UpdateTargetGroupResponse],
1717
+ await self._transport.request(
1718
+ "loadbalancer",
1719
+ "https://loadbalancer.{region}.basaltic.sh",
1720
+ _OPS["updateTargetGroup"],
1721
+ "json",
1722
+ {"id": id},
1723
+ body,
1724
+ None,
1725
+ options,
1726
+ ),
1727
+ )