Skip to content
Merged
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
- `automation`:
- [v0.1.0](services/automation/CHANGELOG.md#v010)
- Initial onboarding of STACKIT Python SDK for Automation service
- `dns`:
- [v0.10.0](services/dns/CHANGELOG.md#v0100)
- **Feature:** New `labels_map` field (`Dict[str, str]`) on `CreateZonePayload`, `PartialUpdateZonePayload`, and `Zone` to manage zone labels as a map (max 64 items)
- **Deprecation:** `create_label`, `delete_label`, `list_labels` operations are now deprecated and scheduled for sunset on 2027-10-01; use the `labels_map` field on the `Zone` resource instead
- **Improvement:** `list_record_sets`/`list_zones` docs clarify that records/zones in the `DELETE_SUCCEEDED` state are excluded by default; pass `state[eq]=DELETE_SUCCEEDED` to retrieve them
- **Improvement:** `Label.key`/`CreateLabelPayload.key` now accepts up to 314 characters (previously 63), supporting prefixed label keys (e.g. `example.com/environment`)
- **Breaking Change:** `PartialUpdateZonePayload.extensions` type changed from `ZoneExtensions` to `DomainExtensions`, now also exposing `observability_extension.state`
- `objectstorage`:
- [v1.6.0](services/objectstorage/CHANGELOG.md#v160)
- **Feature:** New model class `RateLimitError`
Expand Down
7 changes: 7 additions & 0 deletions services/dns/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
## v0.10.0
- **Feature:** New `labels_map` field (`Dict[str, str]`) on `CreateZonePayload`, `PartialUpdateZonePayload`, and `Zone` to manage zone labels as a map (max 64 items)
- **Deprecation:** `create_label`, `delete_label`, `list_labels` operations are now deprecated and scheduled for sunset on 2027-10-01; use the `labels_map` field on the `Zone` resource instead
- **Improvement:** `list_record_sets`/`list_zones` docs clarify that records/zones in the `DELETE_SUCCEEDED` state are excluded by default; pass `state[eq]=DELETE_SUCCEEDED` to retrieve them
- **Improvement:** `Label.key`/`CreateLabelPayload.key` now accepts up to 314 characters (previously 63), supporting prefixed label keys (e.g. `example.com/environment`)
- **Breaking Change:** `PartialUpdateZonePayload.extensions` type changed from `ZoneExtensions` to `DomainExtensions`, now also exposing `observability_extension.state`

## v0.9.0
- **Feature:** `create_move_code` operation now accepts an optional `CreateMoveCodePayload` request body (field `ttl`) to configure the move code's validity duration
- **Breaking Change:** `DomainObservabilityExtension.state` now validates against a fixed set of values (`CREATING`, `CREATE_SUCCEEDED`, `ERROR`); previously any string was accepted
Expand Down
2 changes: 1 addition & 1 deletion services/dns/oas_commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1fdef398bea59d49731a7d9ac39394ba5b6bb72c
7db6460b25eee93a646427ec41a08f06d75615d3
2 changes: 1 addition & 1 deletion services/dns/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "stackit-dns"
version = "v0.9.0"
version = "v0.10.0"
description = "STACKIT DNS API"
authors = [{ name = "STACKIT Developer Tools", email = "developer-tools@stackit.cloud" }]
requires-python = ">=3.10,<4.0"
Expand Down
94 changes: 58 additions & 36 deletions services/dns/src/stackit/dns/api/default_api.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class CreateLabelPayload(BaseModel):
CreateLabelPayload
""" # noqa: E501

key: Annotated[str, Field(min_length=1, strict=True, max_length=63)]
key: Annotated[str, Field(min_length=1, strict=True, max_length=314)]
value: Optional[Annotated[str, Field(strict=True, max_length=63)]] = None
__properties: ClassVar[List[str]] = ["key", "value"]

Expand Down
7 changes: 7 additions & 0 deletions services/dns/src/stackit/dns/models/create_zone_payload.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ class CreateZonePayload(BaseModel):
is_reverse_zone: Optional[StrictBool] = Field(
default=False, description="if the zone is a reverse zone or not", alias="isReverseZone"
)
labels_map: Optional[Dict[str, StrictStr]] = Field(
default=None,
description="labels for the zone - max 64 items. Keys: 1-314 chars (up to 250 prefix, 1 for slash, 1-63 the actual key). Values: 0-63 chars.",
alias="labelsMap",
)
name: Annotated[str, Field(min_length=1, strict=True, max_length=63)] = Field(description="user given name")
negative_cache: Optional[Annotated[int, Field(strict=True, ge=60)]] = Field(
default=None, description="negative caching", alias="negativeCache"
Expand All @@ -81,6 +86,7 @@ class CreateZonePayload(BaseModel):
"expireTime",
"extensions",
"isReverseZone",
"labelsMap",
"name",
"negativeCache",
"primaries",
Expand Down Expand Up @@ -164,6 +170,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
ZoneExtensions.from_dict(obj["extensions"]) if obj.get("extensions") is not None else None
),
"isReverseZone": obj.get("isReverseZone") if obj.get("isReverseZone") is not None else False,
"labelsMap": obj.get("labelsMap"),
"name": obj.get("name"),
"negativeCache": obj.get("negativeCache"),
"primaries": obj.get("primaries"),
Expand Down
2 changes: 1 addition & 1 deletion services/dns/src/stackit/dns/models/label.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Label(BaseModel):
Label
""" # noqa: E501

key: Annotated[str, Field(min_length=1, strict=True, max_length=63)]
key: Annotated[str, Field(min_length=1, strict=True, max_length=314)]
value: Optional[Annotated[str, Field(strict=True, max_length=63)]] = None
__properties: ClassVar[List[str]] = ["key", "value"]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from pydantic_core import to_jsonable_python
from typing_extensions import Annotated, Self

from stackit.dns.models.zone_extensions import ZoneExtensions
from stackit.dns.models.domain_extensions import DomainExtensions


class PartialUpdateZonePayload(BaseModel):
Expand All @@ -46,7 +46,12 @@ class PartialUpdateZonePayload(BaseModel):
expire_time: Optional[Annotated[int, Field(strict=True, ge=60)]] = Field(
default=1209600, description="expire time", alias="expireTime"
)
extensions: Optional[ZoneExtensions] = Field(default=None, description="optional extensions")
extensions: Optional[DomainExtensions] = Field(default=None, description="optional extensions")
labels_map: Optional[Dict[str, StrictStr]] = Field(
default=None,
description="labels for the zone - max 64 items. Keys: 1-314 chars (up to 250 prefix, 1 for slash, 1-63 the actual key). Values: 0-63 chars.",
alias="labelsMap",
)
name: Optional[Annotated[str, Field(min_length=1, strict=True, max_length=63)]] = Field(
default=None, description="user given name"
)
Expand All @@ -67,6 +72,7 @@ class PartialUpdateZonePayload(BaseModel):
"description",
"expireTime",
"extensions",
"labelsMap",
"name",
"negativeCache",
"primaries",
Expand Down Expand Up @@ -135,8 +141,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"description": obj.get("description"),
"expireTime": obj.get("expireTime") if obj.get("expireTime") is not None else 1209600,
"extensions": (
ZoneExtensions.from_dict(obj["extensions"]) if obj.get("extensions") is not None else None
DomainExtensions.from_dict(obj["extensions"]) if obj.get("extensions") is not None else None
),
"labelsMap": obj.get("labelsMap"),
"name": obj.get("name"),
"negativeCache": obj.get("negativeCache"),
"primaries": obj.get("primaries"),
Expand Down
5 changes: 5 additions & 0 deletions services/dns/src/stackit/dns/models/zone.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ class Zone(BaseModel):
default=None, description="if the zone is a reverse zone or not", alias="isReverseZone"
)
labels: Optional[List[Label]] = None
labels_map: Optional[Dict[str, StrictStr]] = Field(
default=None, description="labels for the zone", alias="labelsMap"
)
name: Annotated[str, Field(min_length=1, strict=True, max_length=63)] = Field(description="user given name")
negative_cache: Annotated[int, Field(le=99999999, strict=True, ge=60)] = Field(
description="negative caching", alias="negativeCache"
Expand Down Expand Up @@ -105,6 +108,7 @@ class Zone(BaseModel):
"id",
"isReverseZone",
"labels",
"labelsMap",
"name",
"negativeCache",
"primaries",
Expand Down Expand Up @@ -233,6 +237,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"labels": (
[Label.from_dict(_item) for _item in obj["labels"]] if obj.get("labels") is not None else None
),
"labelsMap": obj.get("labelsMap"),
"name": obj.get("name"),
"negativeCache": obj.get("negativeCache"),
"primaries": obj.get("primaries"),
Expand Down
2 changes: 1 addition & 1 deletion services/dns/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading