diff --git a/CHANGELOG.md b/CHANGELOG.md index ac6f77129..b00d5c6e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,17 @@ - new model `OfferType` - new attribute `CatalogProductDetail` for `CatalogProductDetail` model - Attribute `is_product_listing` in `CatalogProductDetail` is now of type `Optional[StrictBool]` (previously `StrictBool`) +- `iaas`: [v0.5.4](services/iaas/CHANGELOG.md#v054) + - **Improvement:** Increase max length of `machine_type` and `volume_performance_class` fields from 63 to 127 characters in API methods + - **Improvement:** Increase max length of `name` fields from 63 to 127 characters for various models: + - `AffinityGroup`, `Backup`, `BootVolume`, `CreateAffinityGroupPayload`, `CreateBackupPayload` + `CreateImagePayload`, `CreateNetworkAreaPayload`, `CreateNetworkPayload`, `CreateNicPayload` + `CreateSecurityGroupPayload`, `CreateServerPayload`, `CreateSnapshotPayload`, `CreateVolumePayload` + `Image`, `MachineType`, `Nic`, `PartialUpdateNetworkAreaPayload`, `PartialUpdateNetworkPayload` + `ResizeServerPayload`, `SecurityGroup`, `Server`, `ServerNetwork`, `Snapshot` + `UpdateBackupPayload`, `UpdateImagePayload`, `UpdateNicPayload`, `UpdateSecurityGroupPayload` + `UpdateServerPayload`, `UpdateSnapshotPayload`, `UpdateVolumePayload`, `Volume`, `VolumePerformanceClass` + - **Improvement:** Update regular expression pattern for name validation to allow more flexible naming conventions ## Release (2025-06-16) - `core`: [v0.2.0](core/CHANGELOG.md#v020-2025-06-12) diff --git a/services/iaas/CHANGELOG.md b/services/iaas/CHANGELOG.md index 257579f3d..1ddad69bc 100644 --- a/services/iaas/CHANGELOG.md +++ b/services/iaas/CHANGELOG.md @@ -1,3 +1,15 @@ +## v0.5.4 +- **Improvement:** Increase max length of `machine_type` and `volume_performance_class` fields from 63 to 127 characters in API methods +- **Improvement:** Increase max length of `name` fields from 63 to 127 characters for various models: + - `AffinityGroup`, `Backup`, `BootVolume`, `CreateAffinityGroupPayload`, `CreateBackupPayload` + `CreateImagePayload`, `CreateNetworkAreaPayload`, `CreateNetworkPayload`, `CreateNicPayload` + `CreateSecurityGroupPayload`, `CreateServerPayload`, `CreateSnapshotPayload`, `CreateVolumePayload` + `Image`, `MachineType`, `Nic`, `PartialUpdateNetworkAreaPayload`, `PartialUpdateNetworkPayload` + `ResizeServerPayload`, `SecurityGroup`, `Server`, `ServerNetwork`, `Snapshot` + `UpdateBackupPayload`, `UpdateImagePayload`, `UpdateNicPayload`, `UpdateSecurityGroupPayload` + `UpdateServerPayload`, `UpdateSnapshotPayload`, `UpdateVolumePayload`, `Volume`, `VolumePerformanceClass` +- **Improvement:** Update regular expression pattern for name validation to allow more flexible naming conventions + ## v0.5.3 (2025-06-12) - Increase max length of description from 127 to 255 for - Security groups: `BaseSecurityGroupRule`, `CreateSecurityGroupPayload`, `CreateSecurityGroupRulePayload`, `SecurityGroup`, `SecurityGroupRule`, `UpdateSecurityGroupPayload` diff --git a/services/iaas/pyproject.toml b/services/iaas/pyproject.toml index d729f39f0..52ade9040 100644 --- a/services/iaas/pyproject.toml +++ b/services/iaas/pyproject.toml @@ -3,7 +3,7 @@ name = "stackit-iaas" [tool.poetry] name = "stackit-iaas" -version = "v0.5.3" +version = "v0.5.4" authors = [ "STACKIT Developer Tools ", ] diff --git a/services/iaas/src/stackit/iaas/api/default_api.py b/services/iaas/src/stackit/iaas/api/default_api.py index 779265299..aa0bab792 100644 --- a/services/iaas/src/stackit/iaas/api/default_api.py +++ b/services/iaas/src/stackit/iaas/api/default_api.py @@ -13378,7 +13378,7 @@ def get_machine_type( str, Field(min_length=36, strict=True, max_length=36, description="The identifier (ID) of a STACKIT Project."), ], - machine_type: Annotated[str, Field(strict=True, max_length=63, description="STACKIT machine type Name.")], + machine_type: Annotated[str, Field(strict=True, max_length=127, description="STACKIT machine type Name.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13450,7 +13450,7 @@ def get_machine_type_with_http_info( str, Field(min_length=36, strict=True, max_length=36, description="The identifier (ID) of a STACKIT Project."), ], - machine_type: Annotated[str, Field(strict=True, max_length=63, description="STACKIT machine type Name.")], + machine_type: Annotated[str, Field(strict=True, max_length=127, description="STACKIT machine type Name.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13522,7 +13522,7 @@ def get_machine_type_without_preload_content( str, Field(min_length=36, strict=True, max_length=36, description="The identifier (ID) of a STACKIT Project."), ], - machine_type: Annotated[str, Field(strict=True, max_length=63, description="STACKIT machine type Name.")], + machine_type: Annotated[str, Field(strict=True, max_length=127, description="STACKIT machine type Name.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18260,7 +18260,7 @@ def get_volume_performance_class( Field(min_length=36, strict=True, max_length=36, description="The identifier (ID) of a STACKIT Project."), ], volume_performance_class: Annotated[ - str, Field(strict=True, max_length=63, description="The name of a STACKIT Volume performance class.") + str, Field(strict=True, max_length=127, description="The name of a STACKIT Volume performance class.") ], _request_timeout: Union[ None, @@ -18334,7 +18334,7 @@ def get_volume_performance_class_with_http_info( Field(min_length=36, strict=True, max_length=36, description="The identifier (ID) of a STACKIT Project."), ], volume_performance_class: Annotated[ - str, Field(strict=True, max_length=63, description="The name of a STACKIT Volume performance class.") + str, Field(strict=True, max_length=127, description="The name of a STACKIT Volume performance class.") ], _request_timeout: Union[ None, @@ -18408,7 +18408,7 @@ def get_volume_performance_class_without_preload_content( Field(min_length=36, strict=True, max_length=36, description="The identifier (ID) of a STACKIT Project."), ], volume_performance_class: Annotated[ - str, Field(strict=True, max_length=63, description="The name of a STACKIT Volume performance class.") + str, Field(strict=True, max_length=127, description="The name of a STACKIT Volume performance class.") ], _request_timeout: Union[ None, diff --git a/services/iaas/src/stackit/iaas/models/affinity_group.py b/services/iaas/src/stackit/iaas/models/affinity_group.py index f04526c6e..629a186a0 100644 --- a/services/iaas/src/stackit/iaas/models/affinity_group.py +++ b/services/iaas/src/stackit/iaas/models/affinity_group.py @@ -34,7 +34,7 @@ class AffinityGroup(BaseModel): members: Optional[List[Annotated[str, Field(min_length=36, strict=True, max_length=36)]]] = Field( default=None, description="The servers that are part of the affinity group." ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) policy: StrictStr = Field( @@ -57,8 +57,8 @@ def id_validate_regular_expression(cls, value): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/backup.py b/services/iaas/src/stackit/iaas/models/backup.py index aef60df43..47ab0e51c 100644 --- a/services/iaas/src/stackit/iaas/models/backup.py +++ b/services/iaas/src/stackit/iaas/models/backup.py @@ -42,7 +42,7 @@ class Backup(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.") @@ -90,8 +90,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("snapshot_id") diff --git a/services/iaas/src/stackit/iaas/models/boot_volume.py b/services/iaas/src/stackit/iaas/models/boot_volume.py index 9879c505a..7a149b50e 100644 --- a/services/iaas/src/stackit/iaas/models/boot_volume.py +++ b/services/iaas/src/stackit/iaas/models/boot_volume.py @@ -45,7 +45,7 @@ class BootVolume(BaseModel): id: Optional[Annotated[str, Field(min_length=36, strict=True, max_length=36)]] = Field( default=None, description="Universally Unique Identifier (UUID)." ) - performance_class: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + performance_class: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs.", alias="performanceClass", @@ -72,8 +72,8 @@ def performance_class_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/create_affinity_group_payload.py b/services/iaas/src/stackit/iaas/models/create_affinity_group_payload.py index f59a9363f..b6cfd4c7f 100644 --- a/services/iaas/src/stackit/iaas/models/create_affinity_group_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_affinity_group_payload.py @@ -34,7 +34,7 @@ class CreateAffinityGroupPayload(BaseModel): members: Optional[List[Annotated[str, Field(min_length=36, strict=True, max_length=36)]]] = Field( default=None, description="The servers that are part of the affinity group." ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) policy: StrictStr = Field( @@ -57,8 +57,8 @@ def id_validate_regular_expression(cls, value): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/create_backup_payload.py b/services/iaas/src/stackit/iaas/models/create_backup_payload.py index 4145a4d9d..626881738 100644 --- a/services/iaas/src/stackit/iaas/models/create_backup_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_backup_payload.py @@ -34,7 +34,7 @@ class CreateBackupPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) source: BackupSource @@ -46,8 +46,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/create_image_payload.py b/services/iaas/src/stackit/iaas/models/create_image_payload.py index 2b6a3b973..493a818cf 100644 --- a/services/iaas/src/stackit/iaas/models/create_image_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_image_payload.py @@ -57,7 +57,7 @@ class CreateImagePayload(BaseModel): ) min_disk_size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.", alias="minDiskSize") min_ram: Optional[StrictInt] = Field(default=None, description="Size in Megabyte.", alias="minRam") - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) owner: Optional[Annotated[str, Field(min_length=36, strict=True, max_length=36)]] = Field( @@ -108,8 +108,8 @@ def id_validate_regular_expression(cls, value): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("owner") diff --git a/services/iaas/src/stackit/iaas/models/create_network_area_payload.py b/services/iaas/src/stackit/iaas/models/create_network_area_payload.py index cf2ff0404..005c8c6dd 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_area_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_network_area_payload.py @@ -35,7 +35,7 @@ class CreateNetworkAreaPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) __properties: ClassVar[List[str]] = ["addressFamily", "labels", "name"] @@ -43,8 +43,8 @@ class CreateNetworkAreaPayload(BaseModel): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/create_network_payload.py b/services/iaas/src/stackit/iaas/models/create_network_payload.py index 6915b17f9..fb5ed5d1a 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_network_payload.py @@ -35,7 +35,7 @@ class CreateNetworkPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) routed: Optional[StrictBool] = Field( @@ -46,8 +46,8 @@ class CreateNetworkPayload(BaseModel): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/create_nic_payload.py b/services/iaas/src/stackit/iaas/models/create_nic_payload.py index 4c961e4ee..4ee39bd71 100644 --- a/services/iaas/src/stackit/iaas/models/create_nic_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_nic_payload.py @@ -59,7 +59,7 @@ class CreateNicPayload(BaseModel): mac: Optional[Annotated[str, Field(strict=True)]] = Field( default=None, description="Object that represents an MAC address." ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) network_id: Optional[Annotated[str, Field(min_length=36, strict=True, max_length=36)]] = Field( @@ -161,8 +161,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("network_id") diff --git a/services/iaas/src/stackit/iaas/models/create_security_group_payload.py b/services/iaas/src/stackit/iaas/models/create_security_group_payload.py index 7b16da7d2..0a2fb495b 100644 --- a/services/iaas/src/stackit/iaas/models/create_security_group_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_security_group_payload.py @@ -44,7 +44,7 @@ class CreateSecurityGroupPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) rules: Optional[List[SecurityGroupRule]] = Field( @@ -83,8 +83,8 @@ def id_validate_regular_expression(cls, value): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/create_server_payload.py b/services/iaas/src/stackit/iaas/models/create_server_payload.py index 8232b8daf..10fb82d66 100644 --- a/services/iaas/src/stackit/iaas/models/create_server_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_server_payload.py @@ -72,10 +72,14 @@ class CreateServerPayload(BaseModel): launched_at: Optional[datetime] = Field( default=None, description="Date-time when resource was launched.", alias="launchedAt" ) - machine_type: Annotated[str, Field(strict=True, max_length=63)] = Field( + machine_type: Annotated[str, Field(strict=True, max_length=127)] = Field( description="Name of the machine type the server shall belong to.", alias="machineType" ) maintenance_window: Optional[ServerMaintenance] = Field(default=None, alias="maintenanceWindow") + metadata: Optional[Dict[str, Any]] = Field( + default=None, + description="Object that represents the metadata of an object. Regex for keys: `^[a-zA-Z0-9-_:. ]{1,255}$`. Regex for values: `^.{0,255}$`.", + ) name: Annotated[str, Field(strict=True, max_length=63)] = Field(description="The name for a Server.") networking: Optional[CreateServerPayloadNetworking] = None nics: Optional[List[ServerNetwork]] = Field( @@ -87,7 +91,7 @@ class CreateServerPayload(BaseModel): description="The power status of a server. Possible values: `CRASHED`, `ERROR`, `RUNNING`, `STOPPED`.", alias="powerStatus", ) - security_groups: Optional[List[Annotated[str, Field(strict=True, max_length=63)]]] = Field( + security_groups: Optional[List[Annotated[str, Field(strict=True, max_length=127)]]] = Field( default=None, description="The initial security groups for the server creation.", alias="securityGroups" ) service_account_mails: Optional[ @@ -125,6 +129,7 @@ class CreateServerPayload(BaseModel): "launchedAt", "machineType", "maintenanceWindow", + "metadata", "name", "networking", "nics", @@ -186,15 +191,20 @@ def keypair_name_validate_regular_expression(cls, value): @field_validator("machine_type") def machine_type_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|\.)[A-Za-z0-9]+)*$/") + if not re.match( + r"^(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$", + value, + ): + raise ValueError( + r"must validate the regular expression /^(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/" + ) return value model_config = ConfigDict( @@ -300,6 +310,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if obj.get("maintenanceWindow") is not None else None ), + "metadata": obj.get("metadata"), "name": obj.get("name"), "networking": ( CreateServerPayloadNetworking.from_dict(obj["networking"]) diff --git a/services/iaas/src/stackit/iaas/models/create_snapshot_payload.py b/services/iaas/src/stackit/iaas/models/create_snapshot_payload.py index c7664e547..e54b29094 100644 --- a/services/iaas/src/stackit/iaas/models/create_snapshot_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_snapshot_payload.py @@ -39,7 +39,7 @@ class CreateSnapshotPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.") @@ -73,8 +73,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("volume_id") diff --git a/services/iaas/src/stackit/iaas/models/create_volume_payload.py b/services/iaas/src/stackit/iaas/models/create_volume_payload.py index bf9f1a59c..468e4b789 100644 --- a/services/iaas/src/stackit/iaas/models/create_volume_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_volume_payload.py @@ -58,10 +58,10 @@ class CreateVolumePayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) - performance_class: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + performance_class: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs.", alias="performanceClass", @@ -113,8 +113,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("performance_class") @@ -123,8 +123,8 @@ def performance_class_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("server_id") diff --git a/services/iaas/src/stackit/iaas/models/image.py b/services/iaas/src/stackit/iaas/models/image.py index 97e4a4bea..c2abb94ca 100644 --- a/services/iaas/src/stackit/iaas/models/image.py +++ b/services/iaas/src/stackit/iaas/models/image.py @@ -57,7 +57,7 @@ class Image(BaseModel): ) min_disk_size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.", alias="minDiskSize") min_ram: Optional[StrictInt] = Field(default=None, description="Size in Megabyte.", alias="minRam") - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) owner: Optional[Annotated[str, Field(min_length=36, strict=True, max_length=36)]] = Field( @@ -108,8 +108,8 @@ def id_validate_regular_expression(cls, value): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("owner") diff --git a/services/iaas/src/stackit/iaas/models/machine_type.py b/services/iaas/src/stackit/iaas/models/machine_type.py index a20993a8a..971583457 100644 --- a/services/iaas/src/stackit/iaas/models/machine_type.py +++ b/services/iaas/src/stackit/iaas/models/machine_type.py @@ -37,7 +37,7 @@ class MachineType(BaseModel): description="Properties to control certain aspects or scheduling behavior for an object.", alias="extraSpecs", ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) ram: StrictInt = Field(description="Size in Megabyte.") @@ -47,8 +47,8 @@ class MachineType(BaseModel): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/nic.py b/services/iaas/src/stackit/iaas/models/nic.py index 9ea20bdd7..a9b7dcc41 100644 --- a/services/iaas/src/stackit/iaas/models/nic.py +++ b/services/iaas/src/stackit/iaas/models/nic.py @@ -59,7 +59,7 @@ class NIC(BaseModel): mac: Optional[Annotated[str, Field(strict=True)]] = Field( default=None, description="Object that represents an MAC address." ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) network_id: Optional[Annotated[str, Field(min_length=36, strict=True, max_length=36)]] = Field( @@ -161,8 +161,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("network_id") diff --git a/services/iaas/src/stackit/iaas/models/partial_update_network_area_payload.py b/services/iaas/src/stackit/iaas/models/partial_update_network_area_payload.py index c459fcee2..bdb0ddaf1 100644 --- a/services/iaas/src/stackit/iaas/models/partial_update_network_area_payload.py +++ b/services/iaas/src/stackit/iaas/models/partial_update_network_area_payload.py @@ -35,7 +35,7 @@ class PartialUpdateNetworkAreaPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) __properties: ClassVar[List[str]] = ["addressFamily", "labels", "name"] @@ -46,8 +46,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/partial_update_network_payload.py b/services/iaas/src/stackit/iaas/models/partial_update_network_payload.py index eb130852f..a33205a3a 100644 --- a/services/iaas/src/stackit/iaas/models/partial_update_network_payload.py +++ b/services/iaas/src/stackit/iaas/models/partial_update_network_payload.py @@ -35,7 +35,7 @@ class PartialUpdateNetworkPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) routed: Optional[StrictBool] = Field( @@ -49,8 +49,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/resize_server_payload.py b/services/iaas/src/stackit/iaas/models/resize_server_payload.py index e459058c6..42ecfcd49 100644 --- a/services/iaas/src/stackit/iaas/models/resize_server_payload.py +++ b/services/iaas/src/stackit/iaas/models/resize_server_payload.py @@ -28,7 +28,7 @@ class ResizeServerPayload(BaseModel): ResizeServerPayload """ - machine_type: Annotated[str, Field(strict=True, max_length=63)] = Field( + machine_type: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs.", alias="machineType" ) __properties: ClassVar[List[str]] = ["machineType"] @@ -36,8 +36,8 @@ class ResizeServerPayload(BaseModel): @field_validator("machine_type") def machine_type_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/security_group.py b/services/iaas/src/stackit/iaas/models/security_group.py index bf4902846..2a9b858f8 100644 --- a/services/iaas/src/stackit/iaas/models/security_group.py +++ b/services/iaas/src/stackit/iaas/models/security_group.py @@ -44,7 +44,7 @@ class SecurityGroup(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) rules: Optional[List[SecurityGroupRule]] = Field( @@ -83,8 +83,8 @@ def id_validate_regular_expression(cls, value): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/server.py b/services/iaas/src/stackit/iaas/models/server.py index daaec5b8d..3e4cc335f 100644 --- a/services/iaas/src/stackit/iaas/models/server.py +++ b/services/iaas/src/stackit/iaas/models/server.py @@ -72,10 +72,14 @@ class Server(BaseModel): launched_at: Optional[datetime] = Field( default=None, description="Date-time when resource was launched.", alias="launchedAt" ) - machine_type: Annotated[str, Field(strict=True, max_length=63)] = Field( + machine_type: Annotated[str, Field(strict=True, max_length=127)] = Field( description="Name of the machine type the server shall belong to.", alias="machineType" ) maintenance_window: Optional[ServerMaintenance] = Field(default=None, alias="maintenanceWindow") + metadata: Optional[Dict[str, Any]] = Field( + default=None, + description="Object that represents the metadata of an object. Regex for keys: `^[a-zA-Z0-9-_:. ]{1,255}$`. Regex for values: `^.{0,255}$`.", + ) name: Annotated[str, Field(strict=True, max_length=63)] = Field(description="The name for a Server.") networking: Optional[CreateServerPayloadNetworking] = None nics: Optional[List[ServerNetwork]] = Field( @@ -87,7 +91,7 @@ class Server(BaseModel): description="The power status of a server. Possible values: `CRASHED`, `ERROR`, `RUNNING`, `STOPPED`.", alias="powerStatus", ) - security_groups: Optional[List[Annotated[str, Field(strict=True, max_length=63)]]] = Field( + security_groups: Optional[List[Annotated[str, Field(strict=True, max_length=127)]]] = Field( default=None, description="The initial security groups for the server creation.", alias="securityGroups" ) service_account_mails: Optional[ @@ -125,6 +129,7 @@ class Server(BaseModel): "launchedAt", "machineType", "maintenanceWindow", + "metadata", "name", "networking", "nics", @@ -186,15 +191,20 @@ def keypair_name_validate_regular_expression(cls, value): @field_validator("machine_type") def machine_type_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|\.)[A-Za-z0-9]+)*$/") + if not re.match( + r"^(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$", + value, + ): + raise ValueError( + r"must validate the regular expression /^(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/" + ) return value model_config = ConfigDict( @@ -300,6 +310,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if obj.get("maintenanceWindow") is not None else None ), + "metadata": obj.get("metadata"), "name": obj.get("name"), "networking": ( CreateServerPayloadNetworking.from_dict(obj["networking"]) diff --git a/services/iaas/src/stackit/iaas/models/server_network.py b/services/iaas/src/stackit/iaas/models/server_network.py index 57340bf28..e83668483 100644 --- a/services/iaas/src/stackit/iaas/models/server_network.py +++ b/services/iaas/src/stackit/iaas/models/server_network.py @@ -43,7 +43,7 @@ class ServerNetwork(BaseModel): network_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( description="Universally Unique Identifier (UUID).", alias="networkId" ) - network_name: Annotated[str, Field(strict=True, max_length=63)] = Field( + network_name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs.", alias="networkName" ) nic_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( @@ -121,8 +121,8 @@ def network_id_validate_regular_expression(cls, value): @field_validator("network_name") def network_name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("nic_id") diff --git a/services/iaas/src/stackit/iaas/models/snapshot.py b/services/iaas/src/stackit/iaas/models/snapshot.py index dd3f021c3..dac2888a7 100644 --- a/services/iaas/src/stackit/iaas/models/snapshot.py +++ b/services/iaas/src/stackit/iaas/models/snapshot.py @@ -39,7 +39,7 @@ class Snapshot(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.") @@ -73,8 +73,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("volume_id") diff --git a/services/iaas/src/stackit/iaas/models/update_backup_payload.py b/services/iaas/src/stackit/iaas/models/update_backup_payload.py index a25338d30..3d2b66720 100644 --- a/services/iaas/src/stackit/iaas/models/update_backup_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_backup_payload.py @@ -42,7 +42,7 @@ class UpdateBackupPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.") @@ -90,8 +90,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("snapshot_id") diff --git a/services/iaas/src/stackit/iaas/models/update_image_payload.py b/services/iaas/src/stackit/iaas/models/update_image_payload.py index 243fce490..0ddb8ce4e 100644 --- a/services/iaas/src/stackit/iaas/models/update_image_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_image_payload.py @@ -50,7 +50,7 @@ class UpdateImagePayload(BaseModel): ) min_disk_size: Optional[StrictInt] = Field(default=None, description="Size in Gigabyte.", alias="minDiskSize") min_ram: Optional[StrictInt] = Field(default=None, description="Size in Megabyte.", alias="minRam") - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) protected: Optional[StrictBool] = None @@ -62,8 +62,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/update_nic_payload.py b/services/iaas/src/stackit/iaas/models/update_nic_payload.py index 8ecb57705..7443d93a7 100644 --- a/services/iaas/src/stackit/iaas/models/update_nic_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_nic_payload.py @@ -37,7 +37,7 @@ class UpdateNicPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) nic_security: Optional[StrictBool] = Field( @@ -56,8 +56,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/update_security_group_payload.py b/services/iaas/src/stackit/iaas/models/update_security_group_payload.py index e8584432f..d1ded6fc2 100644 --- a/services/iaas/src/stackit/iaas/models/update_security_group_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_security_group_payload.py @@ -35,7 +35,7 @@ class UpdateSecurityGroupPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) __properties: ClassVar[List[str]] = ["description", "labels", "name"] @@ -46,8 +46,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/update_server_payload.py b/services/iaas/src/stackit/iaas/models/update_server_payload.py index bc38754a4..9edb65509 100644 --- a/services/iaas/src/stackit/iaas/models/update_server_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_server_payload.py @@ -32,10 +32,14 @@ class UpdateServerPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) + metadata: Optional[Dict[str, Any]] = Field( + default=None, + description="Object that represents the metadata of an object. Regex for keys: `^[a-zA-Z0-9-_:. ]{1,255}$`. Regex for values: `^.{0,255}$`.", + ) name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( default=None, description="The name for a Server." ) - __properties: ClassVar[List[str]] = ["labels", "name"] + __properties: ClassVar[List[str]] = ["labels", "metadata", "name"] @field_validator("name") def name_validate_regular_expression(cls, value): @@ -43,8 +47,13 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|\.)[A-Za-z0-9]+)*$/") + if not re.match( + r"^(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$", + value, + ): + raise ValueError( + r"must validate the regular expression /^(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/" + ) return value model_config = ConfigDict( @@ -95,5 +104,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if not isinstance(obj, dict): return cls.model_validate(obj) - _obj = cls.model_validate({"labels": obj.get("labels"), "name": obj.get("name")}) + _obj = cls.model_validate( + {"labels": obj.get("labels"), "metadata": obj.get("metadata"), "name": obj.get("name")} + ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/update_snapshot_payload.py b/services/iaas/src/stackit/iaas/models/update_snapshot_payload.py index d3fe88906..b448fa067 100644 --- a/services/iaas/src/stackit/iaas/models/update_snapshot_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_snapshot_payload.py @@ -32,7 +32,7 @@ class UpdateSnapshotPayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) __properties: ClassVar[List[str]] = ["labels", "name"] @@ -43,8 +43,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/update_volume_payload.py b/services/iaas/src/stackit/iaas/models/update_volume_payload.py index efb29bd77..d95fa7e70 100644 --- a/services/iaas/src/stackit/iaas/models/update_volume_payload.py +++ b/services/iaas/src/stackit/iaas/models/update_volume_payload.py @@ -39,7 +39,7 @@ class UpdateVolumePayload(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) __properties: ClassVar[List[str]] = ["bootable", "description", "imageConfig", "labels", "name"] @@ -50,8 +50,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict( diff --git a/services/iaas/src/stackit/iaas/models/volume.py b/services/iaas/src/stackit/iaas/models/volume.py index 6b704fe0d..c9800e63d 100644 --- a/services/iaas/src/stackit/iaas/models/volume.py +++ b/services/iaas/src/stackit/iaas/models/volume.py @@ -58,10 +58,10 @@ class Volume(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + name: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs." ) - performance_class: Optional[Annotated[str, Field(strict=True, max_length=63)]] = Field( + performance_class: Optional[Annotated[str, Field(strict=True, max_length=127)]] = Field( default=None, description="The name for a General Object. Matches Names and also UUIDs.", alias="performanceClass", @@ -113,8 +113,8 @@ def name_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("performance_class") @@ -123,8 +123,8 @@ def performance_class_validate_regular_expression(cls, value): if value is None: return value - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value @field_validator("server_id") diff --git a/services/iaas/src/stackit/iaas/models/volume_performance_class.py b/services/iaas/src/stackit/iaas/models/volume_performance_class.py index 6d1b75bad..62e7a6b00 100644 --- a/services/iaas/src/stackit/iaas/models/volume_performance_class.py +++ b/services/iaas/src/stackit/iaas/models/volume_performance_class.py @@ -36,7 +36,7 @@ class VolumePerformanceClass(BaseModel): default=None, description="Object that represents the labels of an object. Regex for keys: `^[a-z]((-|_|[a-z0-9])){0,62}$`. Regex for values: `^(-|_|[a-z0-9]){0,63}$`.", ) - name: Annotated[str, Field(strict=True, max_length=63)] = Field( + name: Annotated[str, Field(strict=True, max_length=127)] = Field( description="The name for a General Object. Matches Names and also UUIDs." ) throughput: Optional[StrictInt] = Field(default=None, description="Throughput in Megabyte per second.") @@ -45,8 +45,8 @@ class VolumePerformanceClass(BaseModel): @field_validator("name") def name_validate_regular_expression(cls, value): """Validates the regular expression""" - if not re.match(r"^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$", value): - raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+((-|_|\s|\.)[A-Za-z0-9]+)*$/") + if not re.match(r"^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9]+([ \/._-]*[A-Za-z0-9]+)*$/") return value model_config = ConfigDict(