stackit-loadbalancer 0.8.0__tar.gz → 0.9.0__tar.gz

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 (50) hide show
  1. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/PKG-INFO +1 -1
  2. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/pyproject.toml +1 -1
  3. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/__init__.py +6 -0
  4. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/__init__.py +2 -0
  5. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/active_health_check.py +18 -1
  6. stackit_loadbalancer-0.9.0/src/stackit/loadbalancer/models/http_health_checks.py +96 -0
  7. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/target_pool.py +2 -2
  8. stackit_loadbalancer-0.9.0/src/stackit/loadbalancer/models/tls_config.py +106 -0
  9. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/update_target_pool_payload.py +2 -2
  10. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/LICENSE.md +0 -0
  11. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/NOTICE.txt +0 -0
  12. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/README.md +0 -0
  13. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/api/__init__.py +0 -0
  14. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/api/default_api.py +0 -0
  15. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/api_client.py +0 -0
  16. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/api_response.py +0 -0
  17. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/configuration.py +0 -0
  18. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/exceptions.py +0 -0
  19. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/create_credentials_payload.py +0 -0
  20. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/create_credentials_response.py +0 -0
  21. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/create_load_balancer_payload.py +0 -0
  22. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/credentials_response.py +0 -0
  23. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/get_credentials_response.py +0 -0
  24. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/get_quota_response.py +0 -0
  25. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/google_protobuf_any.py +0 -0
  26. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/list_credentials_response.py +0 -0
  27. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/list_load_balancers_response.py +0 -0
  28. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/list_plans_response.py +0 -0
  29. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/listener.py +0 -0
  30. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/load_balancer.py +0 -0
  31. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/load_balancer_error.py +0 -0
  32. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/load_balancer_options.py +0 -0
  33. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/loadbalancer_option_access_control.py +0 -0
  34. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/loadbalancer_option_logs.py +0 -0
  35. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/loadbalancer_option_metrics.py +0 -0
  36. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/loadbalancer_option_observability.py +0 -0
  37. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/network.py +0 -0
  38. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/options_tcp.py +0 -0
  39. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/options_udp.py +0 -0
  40. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/plan_details.py +0 -0
  41. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/security_group.py +0 -0
  42. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/server_name_indicator.py +0 -0
  43. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/session_persistence.py +0 -0
  44. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/status.py +0 -0
  45. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/target.py +0 -0
  46. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/update_credentials_payload.py +0 -0
  47. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/update_credentials_response.py +0 -0
  48. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/models/update_load_balancer_payload.py +0 -0
  49. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/py.typed +0 -0
  50. {stackit_loadbalancer-0.8.0 → stackit_loadbalancer-0.9.0}/src/stackit/loadbalancer/rest.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackit-loadbalancer
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: Load Balancer API
5
5
  License-File: LICENSE.md
6
6
  License-File: NOTICE.txt
@@ -3,7 +3,7 @@ name = "stackit-loadbalancer"
3
3
 
4
4
  [tool.poetry]
5
5
  name = "stackit-loadbalancer"
6
- version = "v0.8.0"
6
+ version = "v0.9.0"
7
7
  authors = [
8
8
  "STACKIT Developer Tools <developer-tools@stackit.cloud>",
9
9
  ]
@@ -36,6 +36,7 @@ __all__ = [
36
36
  "GetCredentialsResponse",
37
37
  "GetQuotaResponse",
38
38
  "GoogleProtobufAny",
39
+ "HttpHealthChecks",
39
40
  "ListCredentialsResponse",
40
41
  "ListLoadBalancersResponse",
41
42
  "ListPlansResponse",
@@ -57,6 +58,7 @@ __all__ = [
57
58
  "Status",
58
59
  "Target",
59
60
  "TargetPool",
61
+ "TlsConfig",
60
62
  "UpdateCredentialsPayload",
61
63
  "UpdateCredentialsResponse",
62
64
  "UpdateLoadBalancerPayload",
@@ -102,6 +104,9 @@ from stackit.loadbalancer.models.get_quota_response import (
102
104
  from stackit.loadbalancer.models.google_protobuf_any import (
103
105
  GoogleProtobufAny as GoogleProtobufAny,
104
106
  )
107
+ from stackit.loadbalancer.models.http_health_checks import (
108
+ HttpHealthChecks as HttpHealthChecks,
109
+ )
105
110
  from stackit.loadbalancer.models.list_credentials_response import (
106
111
  ListCredentialsResponse as ListCredentialsResponse,
107
112
  )
@@ -145,6 +150,7 @@ from stackit.loadbalancer.models.session_persistence import (
145
150
  from stackit.loadbalancer.models.status import Status as Status
146
151
  from stackit.loadbalancer.models.target import Target as Target
147
152
  from stackit.loadbalancer.models.target_pool import TargetPool as TargetPool
153
+ from stackit.loadbalancer.models.tls_config import TlsConfig as TlsConfig
148
154
  from stackit.loadbalancer.models.update_credentials_payload import (
149
155
  UpdateCredentialsPayload as UpdateCredentialsPayload,
150
156
  )
@@ -28,6 +28,7 @@ from stackit.loadbalancer.models.credentials_response import CredentialsResponse
28
28
  from stackit.loadbalancer.models.get_credentials_response import GetCredentialsResponse
29
29
  from stackit.loadbalancer.models.get_quota_response import GetQuotaResponse
30
30
  from stackit.loadbalancer.models.google_protobuf_any import GoogleProtobufAny
31
+ from stackit.loadbalancer.models.http_health_checks import HttpHealthChecks
31
32
  from stackit.loadbalancer.models.list_credentials_response import (
32
33
  ListCredentialsResponse,
33
34
  )
@@ -59,6 +60,7 @@ from stackit.loadbalancer.models.session_persistence import SessionPersistence
59
60
  from stackit.loadbalancer.models.status import Status
60
61
  from stackit.loadbalancer.models.target import Target
61
62
  from stackit.loadbalancer.models.target_pool import TargetPool
63
+ from stackit.loadbalancer.models.tls_config import TlsConfig
62
64
  from stackit.loadbalancer.models.update_credentials_payload import (
63
65
  UpdateCredentialsPayload,
64
66
  )
@@ -18,18 +18,24 @@ import pprint
18
18
  import re # noqa: F401
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
- from pydantic import BaseModel, ConfigDict, Field, field_validator
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictInt, field_validator
22
22
  from typing_extensions import Annotated, Self
23
23
 
24
+ from stackit.loadbalancer.models.http_health_checks import HttpHealthChecks
25
+
24
26
 
25
27
  class ActiveHealthCheck(BaseModel):
26
28
  """
27
29
  ActiveHealthCheck
28
30
  """ # noqa: E501
29
31
 
32
+ alt_port: Optional[StrictInt] = Field(
33
+ default=None, description="Overrides the default port used for health check probes.", alias="altPort"
34
+ )
30
35
  healthy_threshold: Optional[Annotated[int, Field(le=1000000, strict=True, ge=1)]] = Field(
31
36
  default=None, description="Healthy threshold of the health checking", alias="healthyThreshold"
32
37
  )
38
+ http_health_checks: Optional[HttpHealthChecks] = Field(default=None, alias="httpHealthChecks")
33
39
  interval: Optional[Annotated[str, Field(strict=True)]] = Field(
34
40
  default=None, description="Interval duration of health checking in seconds"
35
41
  )
@@ -45,7 +51,9 @@ class ActiveHealthCheck(BaseModel):
45
51
  default=None, description="Unhealthy threshold of the health checking", alias="unhealthyThreshold"
46
52
  )
47
53
  __properties: ClassVar[List[str]] = [
54
+ "altPort",
48
55
  "healthyThreshold",
56
+ "httpHealthChecks",
49
57
  "interval",
50
58
  "intervalJitter",
51
59
  "timeout",
@@ -119,6 +127,9 @@ class ActiveHealthCheck(BaseModel):
119
127
  exclude=excluded_fields,
120
128
  exclude_none=True,
121
129
  )
130
+ # override the default output from pydantic by calling `to_dict()` of http_health_checks
131
+ if self.http_health_checks:
132
+ _dict["httpHealthChecks"] = self.http_health_checks.to_dict()
122
133
  return _dict
123
134
 
124
135
  @classmethod
@@ -132,7 +143,13 @@ class ActiveHealthCheck(BaseModel):
132
143
 
133
144
  _obj = cls.model_validate(
134
145
  {
146
+ "altPort": obj.get("altPort"),
135
147
  "healthyThreshold": obj.get("healthyThreshold"),
148
+ "httpHealthChecks": (
149
+ HttpHealthChecks.from_dict(obj["httpHealthChecks"])
150
+ if obj.get("httpHealthChecks") is not None
151
+ else None
152
+ ),
136
153
  "interval": obj.get("interval"),
137
154
  "intervalJitter": obj.get("intervalJitter"),
138
155
  "timeout": obj.get("timeout"),
@@ -0,0 +1,96 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ STACKIT Network Load Balancer API
5
+
6
+ This API offers an interface to provision and manage load balancing servers in your STACKIT project. It also has the possibility of pooling target servers for load balancing purposes. For each load balancer provided, two VMs are deployed in your OpenStack project subject to a fee.
7
+
8
+ The version of the OpenAPI document: 2.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ from __future__ import annotations
15
+
16
+ import json
17
+ import pprint
18
+ from typing import Any, ClassVar, Dict, List, Optional, Set
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
+ from typing_extensions import Self
22
+
23
+ from stackit.loadbalancer.models.tls_config import TlsConfig
24
+
25
+
26
+ class HttpHealthChecks(BaseModel):
27
+ """
28
+ Options for the HTTP health checking.
29
+ """ # noqa: E501
30
+
31
+ ok_statuses: Optional[List[StrictStr]] = Field(
32
+ default=None, description="List of HTTP status codes that indicate a healthy response", alias="okStatuses"
33
+ )
34
+ path: Optional[StrictStr] = Field(default=None, description="Path to send the health check request to")
35
+ tls: Optional[TlsConfig] = None
36
+ __properties: ClassVar[List[str]] = ["okStatuses", "path", "tls"]
37
+
38
+ model_config = ConfigDict(
39
+ populate_by_name=True,
40
+ validate_assignment=True,
41
+ protected_namespaces=(),
42
+ )
43
+
44
+ def to_str(self) -> str:
45
+ """Returns the string representation of the model using alias"""
46
+ return pprint.pformat(self.model_dump(by_alias=True))
47
+
48
+ def to_json(self) -> str:
49
+ """Returns the JSON representation of the model using alias"""
50
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
51
+ return json.dumps(self.to_dict())
52
+
53
+ @classmethod
54
+ def from_json(cls, json_str: str) -> Optional[Self]:
55
+ """Create an instance of HttpHealthChecks from a JSON string"""
56
+ return cls.from_dict(json.loads(json_str))
57
+
58
+ def to_dict(self) -> Dict[str, Any]:
59
+ """Return the dictionary representation of the model using alias.
60
+
61
+ This has the following differences from calling pydantic's
62
+ `self.model_dump(by_alias=True)`:
63
+
64
+ * `None` is only added to the output dict for nullable fields that
65
+ were set at model initialization. Other fields with value `None`
66
+ are ignored.
67
+ """
68
+ excluded_fields: Set[str] = set([])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ # override the default output from pydantic by calling `to_dict()` of tls
76
+ if self.tls:
77
+ _dict["tls"] = self.tls.to_dict()
78
+ return _dict
79
+
80
+ @classmethod
81
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
82
+ """Create an instance of HttpHealthChecks from a dict"""
83
+ if obj is None:
84
+ return None
85
+
86
+ if not isinstance(obj, dict):
87
+ return cls.model_validate(obj)
88
+
89
+ _obj = cls.model_validate(
90
+ {
91
+ "okStatuses": obj.get("okStatuses"),
92
+ "path": obj.get("path"),
93
+ "tls": TlsConfig.from_dict(obj["tls"]) if obj.get("tls") is not None else None,
94
+ }
95
+ )
96
+ return _obj
@@ -50,8 +50,8 @@ class TargetPool(BaseModel):
50
50
  if value is None:
51
51
  return value
52
52
 
53
- if not re.match(r"^[0-9a-z](?:(?:[0-9a-z]|-){0,18}[0-9a-z])?$", value):
54
- raise ValueError(r"must validate the regular expression /^[0-9a-z](?:(?:[0-9a-z]|-){0,18}[0-9a-z])?$/")
53
+ if not re.match(r"^[0-9a-z](?:(?:[0-9a-z]|-){0,61}[0-9a-z])?$", value):
54
+ raise ValueError(r"must validate the regular expression /^[0-9a-z](?:(?:[0-9a-z]|-){0,61}[0-9a-z])?$/")
55
55
  return value
56
56
 
57
57
  model_config = ConfigDict(
@@ -0,0 +1,106 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ STACKIT Network Load Balancer API
5
+
6
+ This API offers an interface to provision and manage load balancing servers in your STACKIT project. It also has the possibility of pooling target servers for load balancing purposes. For each load balancer provided, two VMs are deployed in your OpenStack project subject to a fee.
7
+
8
+ The version of the OpenAPI document: 2.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ from __future__ import annotations
15
+
16
+ import json
17
+ import pprint
18
+ from typing import Any, ClassVar, Dict, List, Optional, Set
19
+
20
+ from pydantic import (
21
+ BaseModel,
22
+ ConfigDict,
23
+ Field,
24
+ StrictBool,
25
+ StrictStr,
26
+ )
27
+ from typing_extensions import Self
28
+
29
+
30
+ class TlsConfig(BaseModel):
31
+ """
32
+ Set this to configure TLS settings.
33
+ """ # noqa: E501
34
+
35
+ custom_ca: Optional[StrictStr] = Field(
36
+ default=None,
37
+ description="Specifies a custom Certificate Authority (CA). When provided, the target pool will trust certificates signed by this CA, in addition to any system-trusted CAs. This is useful for scenarios where the target pool needs to communicate with servers using self-signed or internally-issued certificates. Enabled needs to be set to true and skip validation to false for this option.",
38
+ alias="customCa",
39
+ )
40
+ enabled: Optional[StrictBool] = Field(
41
+ default=None,
42
+ description="Enable TLS (Transport Layer Security) bridging for the connection between Application Load Balancer and targets in this pool. When enabled, public CAs are trusted. Can be used in tandem with the options either custom CA or skip validation or alone.",
43
+ )
44
+ skip_certificate_validation: Optional[StrictBool] = Field(
45
+ default=None,
46
+ description="Bypass certificate validation for TLS bridging in this target pool. This option is insecure and can only be used with public CAs by setting enabled true. Meant to be used for testing purposes only!",
47
+ alias="skipCertificateValidation",
48
+ )
49
+ __properties: ClassVar[List[str]] = ["customCa", "enabled", "skipCertificateValidation"]
50
+
51
+ model_config = ConfigDict(
52
+ populate_by_name=True,
53
+ validate_assignment=True,
54
+ protected_namespaces=(),
55
+ )
56
+
57
+ def to_str(self) -> str:
58
+ """Returns the string representation of the model using alias"""
59
+ return pprint.pformat(self.model_dump(by_alias=True))
60
+
61
+ def to_json(self) -> str:
62
+ """Returns the JSON representation of the model using alias"""
63
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
64
+ return json.dumps(self.to_dict())
65
+
66
+ @classmethod
67
+ def from_json(cls, json_str: str) -> Optional[Self]:
68
+ """Create an instance of TlsConfig from a JSON string"""
69
+ return cls.from_dict(json.loads(json_str))
70
+
71
+ def to_dict(self) -> Dict[str, Any]:
72
+ """Return the dictionary representation of the model using alias.
73
+
74
+ This has the following differences from calling pydantic's
75
+ `self.model_dump(by_alias=True)`:
76
+
77
+ * `None` is only added to the output dict for nullable fields that
78
+ were set at model initialization. Other fields with value `None`
79
+ are ignored.
80
+ """
81
+ excluded_fields: Set[str] = set([])
82
+
83
+ _dict = self.model_dump(
84
+ by_alias=True,
85
+ exclude=excluded_fields,
86
+ exclude_none=True,
87
+ )
88
+ return _dict
89
+
90
+ @classmethod
91
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
92
+ """Create an instance of TlsConfig from a dict"""
93
+ if obj is None:
94
+ return None
95
+
96
+ if not isinstance(obj, dict):
97
+ return cls.model_validate(obj)
98
+
99
+ _obj = cls.model_validate(
100
+ {
101
+ "customCa": obj.get("customCa"),
102
+ "enabled": obj.get("enabled"),
103
+ "skipCertificateValidation": obj.get("skipCertificateValidation"),
104
+ }
105
+ )
106
+ return _obj
@@ -50,8 +50,8 @@ class UpdateTargetPoolPayload(BaseModel):
50
50
  if value is None:
51
51
  return value
52
52
 
53
- if not re.match(r"^[0-9a-z](?:(?:[0-9a-z]|-){0,18}[0-9a-z])?$", value):
54
- raise ValueError(r"must validate the regular expression /^[0-9a-z](?:(?:[0-9a-z]|-){0,18}[0-9a-z])?$/")
53
+ if not re.match(r"^[0-9a-z](?:(?:[0-9a-z]|-){0,61}[0-9a-z])?$", value):
54
+ raise ValueError(r"must validate the regular expression /^[0-9a-z](?:(?:[0-9a-z]|-){0,61}[0-9a-z])?$/")
55
55
  return value
56
56
 
57
57
  model_config = ConfigDict(