Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
182 changes: 146 additions & 36 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,78 @@
## Release (2026-MM-DD)
- `cost`: [v0.1.0](services/cost/CHANGELOG.md#v010)
- **New**: STACKIT cost service
- `auditlog`:
- [v0.2.0](services/auditlog/CHANGELOG.md#v020)
- **Feature:** regenerate with openapi-generator v7.22.0
- `authorization`:
- [v0.8.0](services/authorization/CHANGELOG.md#080)
- **Feature:** regenerate with openapi-generator v7.22.0
- `cost`:
- [v0.2.0](services/cost/CHANGELOG.md#v020)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.1.0](services/cost/CHANGELOG.md#v010)
- **New**: STACKIT cost service
- `dns`:
- [v0.6.0](services/dns/CHANGELOG.md#v060)
- **Feature:** regenerate with openapi-generator v7.22.0
- `edge`:
- [v0.4.0](services/edge/CHANGELOG.md#v040)
- **Feature:** regenerate with openapi-generator v7.22.0
- `git`:
- [v0.9.0](services/git/CHANGELOG.md#v090)
- **Feature:** regenerate with openapi-generator v7.22.0
- `intake`:
- [v0.6.0](services/intake/CHANGELOG.md#v060)
- **Feature:** regenerate with openapi-generator v7.22.0
- `logme`:
- [v0.5.0](services/logme/CHANGELOG.md#v050)
- **Feature:** regenerate with openapi-generator v7.22.0
- `logs`:
- [v0.3.0](services/logs/CHANGELOG.md#v030)
- **Feature:** regenerate with openapi-generator v7.22.0
- `mariadb`:
- [v0.4.0](services/mariadb/CHANGELOG.md#v040)
- **Feature:** regenerate with openapi-generator v7.22.0
- `modelserving`:
- [v0.3.0](services/modelserving/CHANGELOG.md#v030)
- **Feature:** regenerate with openapi-generator v7.22.0
- `mongodbflex`:
- [v1.3.0](services/mongodbflex/CHANGELOG.md#v130)
- **Feature:** regenerate with openapi-generator v7.22.0
- `opensearch`:
- [v0.5.0](services/opensearch/CHANGELOG.md#v050)
- **Feature:** regenerate with openapi-generator v7.22.0
- `postgresflex`:
- [v1.3.0](services/postgresflex/CHANGELOG.md#v130)
- **Feature:** regenerate with openapi-generator v7.22.0
- `rabbitmq`:
- [v0.5.0](services/rabbitmq/CHANGELOG.md#v050)
- **Feature:** regenerate with openapi-generator v7.22.0
- `redis`:
- [v0.4.0](services/redis/CHANGELOG.md#v040)
- **Feature:** regenerate with openapi-generator v7.22.0
- `resourcemanager`:
- [v0.8.0](services/resourcemanager/CHANGELOG.md#v080)
- **Feature:** regenerate with openapi-generator v7.22.0
- `runcommand`:
- [v1.2.0](services/runcommand/CHANGELOG.md#v120)
- **Feature:** regenerate with openapi-generator v7.22.0
- `scf`:
- [v0.5.0](services/scf/CHANGELOG.md#v050)
- **Feature:** regenerate with openapi-generator v7.22.0
- `secretsmanager`:
- [v0.5.0](services/secretsmanager/CHANGELOG.md#v050)
- **Feature:** regenerate with openapi-generator v7.22.0
- `serverbackup`:
- [v1.2.0](services/serverbackup/CHANGELOG.md#v120)
- **Feature:** regenerate with openapi-generator v7.22.0
- `serverupdate`:
- [v1.2.0](services/serverupdate/CHANGELOG.md#v120)
- **Feature:** regenerate with openapi-generator v7.22.0
- `serviceenablement`:
- [v1.2.0](services/serviceenablement/CHANGELOG.md#v120)
- **Feature:** regenerate with openapi-generator v7.22.0
- `sfs`:
- [v0.6.0](services/sfs/CHANGELOG.md#v060)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.5.0](services/sfs/CHANGELOG.md#v050)
- **Deprecation:** deprecated field `schedules` in model `SnapshotPolicy`
- **Feature:** new field `snapshotSchedules` in model `SnapshotPolicy`
Expand All @@ -16,45 +87,84 @@
- **Feature:** model `UpdateResourcePoolPayload` now has an additional field `snapshotPolicyId`
- **Feature:** new models: `DisableLockResponse`, `EnableLockResponse`, `GetLockResponse`, `GetScheduleResponse`, `GetSnapshotPolicyResponse`, `ListSchedulesResponse`, `ListSnapshotPoliciesResponse`, `ResourcePoolSnapshotPolicy`, `Schedule`, `SnapshotPolicy`, `SnapshotPolicySchedule`, `UpdateResourcePoolSnapshotPayload`, `UpdateResourcePoolSnapshotResponse`
- **Feature:** new operations: `UpdateResourcePoolSnapshot`, `ListSchedules`, `GetSchedule`, `ListSnapshotPolicies`, `GetSnapshotPolicy`, `DisableLock`, `GetLock`, `EnableLock`,
- `ske`: [v1.8.0](services/ske/CHANGELOG.md#v180)
- **Breaking Change:** Change status codes: remove 200, change response type of 202 and add 400 in some API calls
- **Breaking Change:** Aligned CRI name validation with the API side validation (removed docker)
- **Feature:** New models `ExpirationStatus`, `ExpirationStatusKubernetes` and `ExpirationStatusNodepool`
- **Feature:** Add attribute `expiration` of type `ExpirationStatus` to model `ClusterStatus`
- **Improvement:** Update description of `AccessScope`
- `iaas`: [v1.3.0](services/iaas/CHANGELOG.md#v130)
- **Feature:** Add optional `cascade` parameter to `delete_volume` API call
- **Feature:** Add `config_drive` attribute to ModelClass `Server` and `CreateServerPayload`
- `alb`: [v0.9.3](services/alb/CHANGELOG.md#v093)
- Add HTTP 429 status code to some API client methods
- `cdn`: [v2.5.0](services/cdn/CHANGELOG.md#v250)
- **Feature:** New model classes `TlsConfigPatch` and `TlsConfig`
- **Feature:** add attributes `forwardHostHeader`, `stripResponseCookies` and `tls` to the model classes:
- `Config`
- `ConfigPatch`
- `CreateDistributionPayload`
- `certificates`: [v1.3.1](services/certificates/CHANGELOG.md#v131)
- Add HTTP 429 status code to some API client methods
- `loadbalancer`: [v0.9.3](services/loadbalancer/CHANGELOG.md#v093)
- Add HTTP 429 status code to some API client methods
- `iaas`: [v1.2.2](services/iaas/CHANGELOG.md#v122)
- **Docs:** Extend description of `PortRange` class
- `kms`: [v0.9.0](services/kms/CHANGELOG.md#v090)
- Set field `public_key` optional in `WrappingKey` model
- `objectstorage`: [v1.3.0](services/objectstorage/CHANGELOG.md#v130)
- **Feature:** New models: `SetDefaultRetentionPayload`, `GetCredentialsGroupResponse`, `DeleteDefaultRetentionResponse`, `DefaultRetentionResponse`, `CredentialsGroupExtended`, `ComplianceLockResponse`
- **Feature:** New enum type `RetentionMode`
- **Feature:** New field `object_lock_enabled` in `Bucket` model struct
- **Feature:** New API client methods: `create_compliance_lock`, `delete_compliance_lock`, `delete_default_retention`, `get_compliance_lock`, `get_credentials_group`, `get_default_retention`, `set_default_retention`
- `ske`:
- [v1.9.0](services/ske/CHANGELOG.md#v190)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v1.8.0](services/ske/CHANGELOG.md#v180)
- **Breaking Change:** Change status codes: remove 200, change response type of 202 and add 400 in some API calls
- **Breaking Change:** Aligned CRI name validation with the API side validation (removed docker)
- **Feature:** New models `ExpirationStatus`, `ExpirationStatusKubernetes` and `ExpirationStatusNodepool`
- **Feature:** Add attribute `expiration` of type `ExpirationStatus` to model `ClusterStatus`
- **Improvement:** Update description of `AccessScope`
- `sqlserverflex`:
- [v1.2.0](services/sqlserverflex/CHANGELOG.md#v120)
- **Feature:** regenerate with openapi-generator v7.22.0
- `telemetryrouter`:
- [v0.2.0](services/telemetryrouter/CHANGELOG.md#v020)
- **Feature:** regenerate with openapi-generator v7.22.0
- `iaas`:
- [v1.4.0](services/iaas/CHANGELOG.md#v140)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v1.3.0](services/iaas/CHANGELOG.md#v130)
- **Feature:** Add optional `cascade` parameter to `delete_volume` API call
- **Feature:** Add `config_drive` attribute to ModelClass `Server` and `CreateServerPayload`
- `alb`:
- [v0.10.0](services/alb/CHANGELOG.md#v0100)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.9.3](services/alb/CHANGELOG.md#v093)
- Add HTTP 429 status code to some API client methods
- `cdn`:
- [v2.6.0](services/cdn/CHANGELOG.md#v260)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v2.5.0](services/cdn/CHANGELOG.md#v250)
- **Feature:** New model classes `TlsConfigPatch` and `TlsConfig`
- **Feature:** add attributes `forwardHostHeader`, `stripResponseCookies` and `tls` to the model classes:
- `Config`
- `ConfigPatch`
- `CreateDistributionPayload`
- `certificates`:
- [v1.4.0](services/certificates/CHANGELOG.md#v140)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v1.3.1](services/certificates/CHANGELOG.md#v131)
- Add HTTP 429 status code to some API client methods
- `loadbalancer`:
- [v0.10.0](services/loadbalancer/CHANGELOG.md#v0100)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.9.3](services/loadbalancer/CHANGELOG.md#v093)
- Add HTTP 429 status code to some API client methods
- `iaas`:
- [v1.2.2](services/iaas/CHANGELOG.md#v122)
- **Docs:** Extend description of `PortRange` class
- `kms`:
- [v0.10.0](services/kms/CHANGELOG.md#v0100)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.9.0](services/kms/CHANGELOG.md#v090)
- Set field `public_key` optional in `WrappingKey` model
- `objectstorage`:
- [v1.4.0](services/objectstorage/CHANGELOG.md#v140)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v1.3.0](services/objectstorage/CHANGELOG.md#v130)
- **Feature:** New models: `SetDefaultRetentionPayload`, `GetCredentialsGroupResponse`, `DeleteDefaultRetentionResponse`, `DefaultRetentionResponse`, `CredentialsGroupExtended`, `ComplianceLockResponse`
- **Feature:** New enum type `RetentionMode`
- **Feature:** New field `object_lock_enabled` in `Bucket` model struct
- **Feature:** New API client methods: `create_compliance_lock`, `delete_compliance_lock`, `delete_default_retention`, `get_compliance_lock`, `get_credentials_group`, `get_default_retention`, `set_default_retention`
- `serviceaccount`:
- [v0.8.0](services/serviceaccount/CHANGELOG.md#v080)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.7.0](services/serviceaccount/CHANGELOG.md#v070)
- **Feature:** Add `token_endpoint` attribute to `CreateServiceAccountKeyResponseCredentials` model class
- [v0.8.0](services/serviceaccount/CHANGELOG.md#v080)
- **Feature:** New API client method `get_federated_identity_provider`
- `observability`: [v0.14.0](services/observability/CHANGELOG.md#v0140)
- **Feature:** Add attribute `otlp_http_logs_url` to `InstanceSensitiveData` model class
- `vpn`: [v0.1.0](services/vpn/CHANGELOG.md#v010)
- Initial publication of STACKIT Python SDK module for STACKIT VPN service
- `observability`:
- [v0.15.0](services/observability/CHANGELOG.md#v0150)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.14.0](services/observability/CHANGELOG.md#v0140)
- **Feature:** Add attribute `otlp_http_logs_url` to `InstanceSensitiveData` model class
- `vpn`:
- [v0.2.0](services/vpn/CHANGELOG.md#v020)
- **Feature:** regenerate with openapi-generator v7.22.0
- [v0.1.0](services/vpn/CHANGELOG.md#v010)
- Initial publication of STACKIT Python SDK module for STACKIT VPN service


## Release (2026-03-27)
Expand Down
3 changes: 3 additions & 0 deletions services/alb/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## v0.10.0
- **Feature:** regenerate with openapi-generator v7.22.0

## v0.9.3
- Add HTTP 429 status code to some API client methods

Expand Down
2 changes: 1 addition & 1 deletion services/alb/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "stackit-alb"
version = "v0.9.3"
version = "v0.10.0"
description = "Application Load Balancer API"
authors = [{ name = "STACKIT Developer Tools", email = "developer-tools@stackit.cloud" }]
requires-python = ">=3.9,<4.0"
Expand Down
32 changes: 15 additions & 17 deletions services/alb/src/stackit/alb/api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class ApiClient:
"date": datetime.date,
"datetime": datetime.datetime,
"decimal": decimal.Decimal,
"UUID": uuid.UUID,
"object": object,
}
_pool = None
Expand Down Expand Up @@ -265,7 +266,7 @@ def response_deserialize(
response_text = None
return_data = None
try:
if response_type == "bytearray":
if response_type in ("bytearray", "bytes"):
return_data = response_data.data
elif response_type == "file":
return_data = self.__deserialize_file(response_data)
Expand Down Expand Up @@ -326,25 +327,20 @@ def sanitize_for_serialization(self, obj):
return obj.isoformat()
elif isinstance(obj, decimal.Decimal):
return str(obj)

elif isinstance(obj, dict):
obj_dict = obj
return {key: self.sanitize_for_serialization(val) for key, val in obj.items()}

# Convert model obj to dict except
# attributes `openapi_types`, `attribute_map`
# and attributes which value is not None.
# Convert attribute name to json key in
# model definition for request.
if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009
obj_dict = obj.to_dict()
else:
# Convert model obj to dict except
# attributes `openapi_types`, `attribute_map`
# and attributes which value is not None.
# Convert attribute name to json key in
# model definition for request.
if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009
obj_dict = obj.to_dict()
else:
obj_dict = obj.__dict__

if isinstance(obj_dict, list):
# here we handle instances that can either be a list or something else, and only became a real list by calling to_dict() # noqa: E501
return self.sanitize_for_serialization(obj_dict)
obj_dict = obj.__dict__

return {key: self.sanitize_for_serialization(val) for key, val in obj_dict.items()}
return self.sanitize_for_serialization(obj_dict)

def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]):
"""Deserializes response into an object.
Expand Down Expand Up @@ -417,6 +413,8 @@ def __deserialize(self, data, klass):
return self.__deserialize_datetime(data)
elif klass is decimal.Decimal:
return decimal.Decimal(data)
elif klass is uuid.UUID:
return uuid.UUID(data)
elif issubclass(klass, Enum):
return self.__deserialize_enum(data, klass)
else:
Expand Down
16 changes: 13 additions & 3 deletions services/alb/src/stackit/alb/models/active_health_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from typing import Any, ClassVar, Dict, List, Optional, Set

from pydantic import BaseModel, ConfigDict, Field, StrictInt, field_validator
from pydantic_core import to_jsonable_python
from typing_extensions import Annotated, Self

from stackit.alb.models.http_health_checks import HttpHealthChecks
Expand Down Expand Up @@ -66,6 +67,9 @@ def interval_validate_regular_expression(cls, value):
if value is None:
return value

if not isinstance(value, str):
value = str(value)

if not re.match(r"^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$", value):
raise ValueError(r"must validate the regular expression /^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$/")
return value
Expand All @@ -76,6 +80,9 @@ def interval_jitter_validate_regular_expression(cls, value):
if value is None:
return value

if not isinstance(value, str):
value = str(value)

if not re.match(r"^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$", value):
raise ValueError(r"must validate the regular expression /^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$/")
return value
Expand All @@ -86,12 +93,16 @@ def timeout_validate_regular_expression(cls, value):
if value is None:
return value

if not isinstance(value, str):
value = str(value)

if not re.match(r"^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$", value):
raise ValueError(r"must validate the regular expression /^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$/")
return value

model_config = ConfigDict(
populate_by_name=True,
validate_by_name=True,
validate_by_alias=True,
validate_assignment=True,
protected_namespaces=(),
)
Expand All @@ -102,8 +113,7 @@ def to_str(self) -> str:

def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
return json.dumps(to_jsonable_python(self.to_dict()))

@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
Expand Down
7 changes: 4 additions & 3 deletions services/alb/src/stackit/alb/models/certificate_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from typing import Any, ClassVar, Dict, List, Optional, Set

from pydantic import BaseModel, ConfigDict, Field, StrictStr
from pydantic_core import to_jsonable_python
from typing_extensions import Self


Expand All @@ -32,7 +33,8 @@ class CertificateConfig(BaseModel):
__properties: ClassVar[List[str]] = ["certificateIds"]

model_config = ConfigDict(
populate_by_name=True,
validate_by_name=True,
validate_by_alias=True,
validate_assignment=True,
protected_namespaces=(),
)
Expand All @@ -43,8 +45,7 @@ def to_str(self) -> str:

def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
return json.dumps(to_jsonable_python(self.to_dict()))

@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
Expand Down
10 changes: 7 additions & 3 deletions services/alb/src/stackit/alb/models/cookie_persistence.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from typing import Any, ClassVar, Dict, List, Optional, Set

from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
from pydantic_core import to_jsonable_python
from typing_extensions import Annotated, Self


Expand All @@ -40,12 +41,16 @@ def ttl_validate_regular_expression(cls, value):
if value is None:
return value

if not isinstance(value, str):
value = str(value)

if not re.match(r"^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$", value):
raise ValueError(r"must validate the regular expression /^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$/")
return value

model_config = ConfigDict(
populate_by_name=True,
validate_by_name=True,
validate_by_alias=True,
validate_assignment=True,
protected_namespaces=(),
)
Expand All @@ -56,8 +61,7 @@ def to_str(self) -> str:

def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
return json.dumps(to_jsonable_python(self.to_dict()))

@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
Expand Down
Loading
Loading