From e58e08b792915b1fbf8a6a877f6c2d8e12d02d4f Mon Sep 17 00:00:00 2001 From: SDK Generator Bot Date: Wed, 24 Sep 2025 15:07:02 +0000 Subject: [PATCH 1/2] Generate loadbalancer --- .../loadbalancer/models/create_load_balancer_payload.py | 6 ++++++ .../src/stackit/loadbalancer/models/load_balancer.py | 6 ++++++ .../loadbalancer/models/update_load_balancer_payload.py | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py b/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py index 102f75b7d..83efe3612 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py @@ -54,6 +54,10 @@ class CreateLoadBalancerPayload(BaseModel): description="External load balancer IP address where this load balancer is exposed. Not changeable after creation.", alias="externalAddress", ) + labels: Optional[Dict[str, StrictStr]] = Field( + default=None, + description="Labels represent user-defined metadata as key-value pairs. Label count should not exceed 64 per LB. **Key Formatting Rules:** Length: 1-63 characters. Characters: Must begin and end with [a-zA-Z0-9]. May contain dashes (-), underscores (_), dots (.), and alphanumerics in between. Keys starting with 'stackit-' are system-reserved; users MUST NOT manage them. **Value Formatting Rules:** Length: 0-63 characters (empty string explicitly allowed). Characters (for non-empty values): Must begin and end with [a-zA-Z0-9]. May contain dashes (-), underscores (_), dots (.), and alphanumerics in between. ", + ) listeners: Optional[List[Listener]] = Field( default=None, description="There is a maximum listener count of 20. Port and protocol limitations: - UDP listeners cannot have the same port. - TCP-derived listeners cannot have the same port. A TCP-derived listener is any listener that listens on a TCP port. As of now those are: TCP, TCP_PROXY, and PROTOCOL_TLS_PASSTHROUGH. The only exception is, if all listeners for the same port are PROTOCOL_TLS_PASSTHROUGH. - PROTOCOL_TLS_PASSTHROUGH listeners cannot have the same port and at least one common domain name. - PROTOCOL_TLS_PASSTHROUGH listeners can have the same domain name and different ports though (e.g. ports 443 and 8443 for domain example.com). - PROTOCOL_TLS_PASSTHROUGH listeners without a domain name serve as a default listener and you can have only one default listener. ", @@ -101,6 +105,7 @@ class CreateLoadBalancerPayload(BaseModel): "disableTargetSecurityGroupAssignment", "errors", "externalAddress", + "labels", "listeners", "loadBalancerSecurityGroup", "name", @@ -248,6 +253,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: else None ), "externalAddress": obj.get("externalAddress"), + "labels": obj.get("labels"), "listeners": ( [Listener.from_dict(_item) for _item in obj["listeners"]] if obj.get("listeners") is not None diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py b/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py index b206b4404..73b52451a 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py @@ -54,6 +54,10 @@ class LoadBalancer(BaseModel): description="External load balancer IP address where this load balancer is exposed. Not changeable after creation.", alias="externalAddress", ) + labels: Optional[Dict[str, StrictStr]] = Field( + default=None, + description="Labels represent user-defined metadata as key-value pairs. Label count should not exceed 64 per LB. **Key Formatting Rules:** Length: 1-63 characters. Characters: Must begin and end with [a-zA-Z0-9]. May contain dashes (-), underscores (_), dots (.), and alphanumerics in between. Keys starting with 'stackit-' are system-reserved; users MUST NOT manage them. **Value Formatting Rules:** Length: 0-63 characters (empty string explicitly allowed). Characters (for non-empty values): Must begin and end with [a-zA-Z0-9]. May contain dashes (-), underscores (_), dots (.), and alphanumerics in between. ", + ) listeners: Optional[List[Listener]] = Field( default=None, description="There is a maximum listener count of 20. Port and protocol limitations: - UDP listeners cannot have the same port. - TCP-derived listeners cannot have the same port. A TCP-derived listener is any listener that listens on a TCP port. As of now those are: TCP, TCP_PROXY, and PROTOCOL_TLS_PASSTHROUGH. The only exception is, if all listeners for the same port are PROTOCOL_TLS_PASSTHROUGH. - PROTOCOL_TLS_PASSTHROUGH listeners cannot have the same port and at least one common domain name. - PROTOCOL_TLS_PASSTHROUGH listeners can have the same domain name and different ports though (e.g. ports 443 and 8443 for domain example.com). - PROTOCOL_TLS_PASSTHROUGH listeners without a domain name serve as a default listener and you can have only one default listener. ", @@ -101,6 +105,7 @@ class LoadBalancer(BaseModel): "disableTargetSecurityGroupAssignment", "errors", "externalAddress", + "labels", "listeners", "loadBalancerSecurityGroup", "name", @@ -248,6 +253,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: else None ), "externalAddress": obj.get("externalAddress"), + "labels": obj.get("labels"), "listeners": ( [Listener.from_dict(_item) for _item in obj["listeners"]] if obj.get("listeners") is not None diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py b/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py index e7b95b7b4..44996fd07 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py @@ -54,6 +54,10 @@ class UpdateLoadBalancerPayload(BaseModel): description="External load balancer IP address where this load balancer is exposed. Not changeable after creation.", alias="externalAddress", ) + labels: Optional[Dict[str, StrictStr]] = Field( + default=None, + description="Labels represent user-defined metadata as key-value pairs. Label count should not exceed 64 per LB. **Key Formatting Rules:** Length: 1-63 characters. Characters: Must begin and end with [a-zA-Z0-9]. May contain dashes (-), underscores (_), dots (.), and alphanumerics in between. Keys starting with 'stackit-' are system-reserved; users MUST NOT manage them. **Value Formatting Rules:** Length: 0-63 characters (empty string explicitly allowed). Characters (for non-empty values): Must begin and end with [a-zA-Z0-9]. May contain dashes (-), underscores (_), dots (.), and alphanumerics in between. ", + ) listeners: Optional[List[Listener]] = Field( default=None, description="There is a maximum listener count of 20. Port and protocol limitations: - UDP listeners cannot have the same port. - TCP-derived listeners cannot have the same port. A TCP-derived listener is any listener that listens on a TCP port. As of now those are: TCP, TCP_PROXY, and PROTOCOL_TLS_PASSTHROUGH. The only exception is, if all listeners for the same port are PROTOCOL_TLS_PASSTHROUGH. - PROTOCOL_TLS_PASSTHROUGH listeners cannot have the same port and at least one common domain name. - PROTOCOL_TLS_PASSTHROUGH listeners can have the same domain name and different ports though (e.g. ports 443 and 8443 for domain example.com). - PROTOCOL_TLS_PASSTHROUGH listeners without a domain name serve as a default listener and you can have only one default listener. ", @@ -101,6 +105,7 @@ class UpdateLoadBalancerPayload(BaseModel): "disableTargetSecurityGroupAssignment", "errors", "externalAddress", + "labels", "listeners", "loadBalancerSecurityGroup", "name", @@ -248,6 +253,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: else None ), "externalAddress": obj.get("externalAddress"), + "labels": obj.get("labels"), "listeners": ( [Listener.from_dict(_item) for _item in obj["listeners"]] if obj.get("listeners") is not None From 3b1ad224c29f26de24c510df7f42294790f5e2b4 Mon Sep 17 00:00:00 2001 From: Ruben Hoenle Date: Wed, 24 Sep 2025 18:00:26 +0200 Subject: [PATCH 2/2] add changelog entries --- CHANGELOG.md | 2 ++ services/loadbalancer/CHANGELOG.md | 3 +++ services/loadbalancer/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c63bda31..8f9772cdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ - **Feature:** Add new field `DemoUrl` to `CatalogProductDetail` model - [v1.10.0](services/stackitmarketplace/CHANGELOG.md#v1100) - **Feature:** Added `PlanId` to `CatalogProductPricingOption` and `SubscriptionProduct` +- `loadbalancer`: [v0.7.0](services/loadbalancer/CHANGELOG.md#v070) + - **Feature**: Add new attribute `labels` to `LoadBalancer`, `CreateLoadBalancerPayload`, `UpdateLoadBalancerPayload` model classes ## Release (2025-09-11) - `cdn`: [v1.6.0](services/cdn/CHANGELOG.md#v160) diff --git a/services/loadbalancer/CHANGELOG.md b/services/loadbalancer/CHANGELOG.md index 5c800c168..27ceb8ca3 100644 --- a/services/loadbalancer/CHANGELOG.md +++ b/services/loadbalancer/CHANGELOG.md @@ -1,3 +1,6 @@ +## v0.7.0 +- **Feature**: Add new attribute `labels` to `LoadBalancer`, `CreateLoadBalancerPayload`, `UpdateLoadBalancerPayload` model classes + ## v0.6.0 - **Version**: Minimal version is now python 3.9 diff --git a/services/loadbalancer/pyproject.toml b/services/loadbalancer/pyproject.toml index c72c326f0..ba2dd2796 100644 --- a/services/loadbalancer/pyproject.toml +++ b/services/loadbalancer/pyproject.toml @@ -3,7 +3,7 @@ name = "stackit-loadbalancer" [tool.poetry] name = "stackit-loadbalancer" -version = "v0.6.0" +version = "v0.7.0" authors = [ "STACKIT Developer Tools ", ]