diff --git a/services/iaas/oas_commit b/services/iaas/oas_commit index 39bada35c..a70f65d1f 100644 --- a/services/iaas/oas_commit +++ b/services/iaas/oas_commit @@ -1 +1 @@ -a35d8f28738a45005b098b66b6debd08a67ab018 +efae0a126dee165f0b9c67f12dc73b658af6306c diff --git a/services/iaas/src/stackit/iaas/__init__.py b/services/iaas/src/stackit/iaas/__init__.py index 70b8c77b2..3e103b149 100644 --- a/services/iaas/src/stackit/iaas/__init__.py +++ b/services/iaas/src/stackit/iaas/__init__.py @@ -142,6 +142,7 @@ "ServerMaintenance", "ServerNetwork", "ServerNetworking", + "ServerVTPM", "ServiceAccountMailListResponse", "SetImageSharePayload", "Snapshot", @@ -431,6 +432,7 @@ ) from stackit.iaas.models.server_network import ServerNetwork as ServerNetwork from stackit.iaas.models.server_networking import ServerNetworking as ServerNetworking +from stackit.iaas.models.server_vtpm import ServerVTPM as ServerVTPM from stackit.iaas.models.service_account_mail_list_response import ( ServiceAccountMailListResponse as ServiceAccountMailListResponse, ) diff --git a/services/iaas/src/stackit/iaas/api/default_api.py b/services/iaas/src/stackit/iaas/api/default_api.py index 531d19040..63780c230 100644 --- a/services/iaas/src/stackit/iaas/api/default_api.py +++ b/services/iaas/src/stackit/iaas/api/default_api.py @@ -1971,7 +1971,7 @@ def add_service_account_to_server( ) -> ServiceAccountMailListResponse: """Attach service account to a server. - Attach an additional service account to the server. + Attach a service account to the server. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -2051,7 +2051,7 @@ def add_service_account_to_server_with_http_info( ) -> ApiResponse[ServiceAccountMailListResponse]: """Attach service account to a server. - Attach an additional service account to the server. + Attach a service account to the server. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -2131,7 +2131,7 @@ def add_service_account_to_server_without_preload_content( ) -> RESTResponseType: """Attach service account to a server. - Attach an additional service account to the server. + Attach a service account to the server. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -2912,6 +2912,7 @@ def create_backup( "401": "Error", "403": "Error", "404": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2985,6 +2986,7 @@ def create_backup_with_http_info( "401": "Error", "403": "Error", "404": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -3058,6 +3060,7 @@ def create_backup_without_preload_content( "401": "Error", "403": "Error", "404": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -3145,7 +3148,7 @@ def create_image( ) -> ImageCreateResponse: """Create new Image. - Create a new Image in a project. This call, if successful, returns a pre-signed URL for the customer to upload the image. + Create a new Image in a project in queued state. Image data must be imported separately. This call returns a pre-signed URL to upload small images. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -3191,6 +3194,7 @@ def create_image( "401": "Error", "403": "Error", "404": "Error", + "413": "Error", "429": "Error", "500": "Error", } @@ -3219,7 +3223,7 @@ def create_image_with_http_info( ) -> ApiResponse[ImageCreateResponse]: """Create new Image. - Create a new Image in a project. This call, if successful, returns a pre-signed URL for the customer to upload the image. + Create a new Image in a project in queued state. Image data must be imported separately. This call returns a pre-signed URL to upload small images. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -3265,6 +3269,7 @@ def create_image_with_http_info( "401": "Error", "403": "Error", "404": "Error", + "413": "Error", "429": "Error", "500": "Error", } @@ -3293,7 +3298,7 @@ def create_image_without_preload_content( ) -> RESTResponseType: """Create new Image. - Create a new Image in a project. This call, if successful, returns a pre-signed URL for the customer to upload the image. + Create a new Image in a project in queued state. Image data must be imported separately. This call returns a pre-signed URL to upload small images. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -3339,6 +3344,7 @@ def create_image_without_preload_content( "401": "Error", "403": "Error", "404": "Error", + "413": "Error", "429": "Error", "500": "Error", } @@ -6923,6 +6929,8 @@ def create_snapshot( "401": "Error", "403": "Error", "404": "Error", + "409": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -6996,6 +7004,8 @@ def create_snapshot_with_http_info( "401": "Error", "403": "Error", "404": "Error", + "409": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7069,6 +7079,8 @@ def create_snapshot_without_preload_content( "401": "Error", "403": "Error", "404": "Error", + "409": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7202,6 +7214,8 @@ def create_volume( "401": "Error", "403": "Error", "404": "Error", + "409": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7275,6 +7289,8 @@ def create_volume_with_http_info( "401": "Error", "403": "Error", "404": "Error", + "409": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7348,6 +7364,8 @@ def create_volume_without_preload_content( "401": "Error", "403": "Error", "404": "Error", + "409": "Error", + "413": "Error", "500": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -27738,9 +27756,9 @@ def list_server_service_accounts( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ServiceAccountMailListResponse: - """List all service accounts of the Server. + """List the service account of the Server. - Get the list of the service accounts of the server. + Get service account of the server in a list. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -27811,9 +27829,9 @@ def list_server_service_accounts_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[ServiceAccountMailListResponse]: - """List all service accounts of the Server. + """List the service account of the Server. - Get the list of the service accounts of the server. + Get service account of the server in a list. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -27884,9 +27902,9 @@ def list_server_service_accounts_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """List all service accounts of the Server. + """List the service account of the Server. - Get the list of the service accounts of the server. + Get service account of the server in a list. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -31149,7 +31167,7 @@ def remove_service_account_from_server( ) -> ServiceAccountMailListResponse: """Detach a service account from a server. - Detach an additional service account from the server. + Detach a service account from the server. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -31229,7 +31247,7 @@ def remove_service_account_from_server_with_http_info( ) -> ApiResponse[ServiceAccountMailListResponse]: """Detach a service account from a server. - Detach an additional service account from the server. + Detach a service account from the server. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID @@ -31309,7 +31327,7 @@ def remove_service_account_from_server_without_preload_content( ) -> RESTResponseType: """Detach a service account from a server. - Detach an additional service account from the server. + Detach a service account from the server. :param project_id: The identifier (ID) of a STACKIT Project. (required) :type project_id: UUID diff --git a/services/iaas/src/stackit/iaas/exceptions.py b/services/iaas/src/stackit/iaas/exceptions.py index 9992f35fc..236939e4b 100644 --- a/services/iaas/src/stackit/iaas/exceptions.py +++ b/services/iaas/src/stackit/iaas/exceptions.py @@ -46,7 +46,7 @@ def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None) -> full_msg = msg if path_to_item: full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) - super(ApiTypeError, self).__init__(full_msg) + super(ApiTypeError, self).__init__(full_msg, path_to_item, valid_classes, key_type) class ApiValueError(OpenApiException, ValueError): @@ -64,7 +64,7 @@ def __init__(self, msg, path_to_item=None) -> None: full_msg = msg if path_to_item: full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) - super(ApiValueError, self).__init__(full_msg) + super(ApiValueError, self).__init__(full_msg, path_to_item) class ApiAttributeError(OpenApiException, AttributeError): @@ -83,7 +83,7 @@ def __init__(self, msg, path_to_item=None) -> None: full_msg = msg if path_to_item: full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) - super(ApiAttributeError, self).__init__(full_msg) + super(ApiAttributeError, self).__init__(full_msg, path_to_item) class ApiKeyError(OpenApiException, KeyError): @@ -100,7 +100,7 @@ def __init__(self, msg, path_to_item=None) -> None: full_msg = msg if path_to_item: full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) - super(ApiKeyError, self).__init__(full_msg) + super(ApiKeyError, self).__init__(full_msg, path_to_item) class ApiException(OpenApiException): diff --git a/services/iaas/src/stackit/iaas/models/__init__.py b/services/iaas/src/stackit/iaas/models/__init__.py index 53b2c8d46..cd38c59d1 100644 --- a/services/iaas/src/stackit/iaas/models/__init__.py +++ b/services/iaas/src/stackit/iaas/models/__init__.py @@ -163,6 +163,7 @@ from stackit.iaas.models.server_maintenance import ServerMaintenance from stackit.iaas.models.server_network import ServerNetwork from stackit.iaas.models.server_networking import ServerNetworking +from stackit.iaas.models.server_vtpm import ServerVTPM from stackit.iaas.models.service_account_mail_list_response import ( ServiceAccountMailListResponse, ) diff --git a/services/iaas/src/stackit/iaas/models/add_routing_table_to_area_payload.py b/services/iaas/src/stackit/iaas/models/add_routing_table_to_area_payload.py index 984e6f12e..f5ed01e7c 100644 --- a/services/iaas/src/stackit/iaas/models/add_routing_table_to_area_payload.py +++ b/services/iaas/src/stackit/iaas/models/add_routing_table_to_area_payload.py @@ -28,7 +28,7 @@ class AddRoutingTableToAreaPayload(BaseModel): """ - An object representing a routing table. + An object representing a routing table. Filterable Fields: `dynamicRoutes`, `systemRoutes`. """ # noqa: E501 created_at: Optional[datetime] = Field( diff --git a/services/iaas/src/stackit/iaas/models/create_network_area_range_payload.py b/services/iaas/src/stackit/iaas/models/create_network_area_range_payload.py index 08a4ecc4b..b4310eba1 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_area_range_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_network_area_range_payload.py @@ -31,7 +31,7 @@ class CreateNetworkAreaRangePayload(BaseModel): """ # noqa: E501 ipv4: Optional[Annotated[List[NetworkRange], Field(min_length=1, max_length=64)]] = Field( - default=None, description="A list of network ranges." + default=None, description="A list of network area network ranges." ) __properties: ClassVar[List[str]] = ["ipv4"] diff --git a/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix.py b/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix.py index e22412b08..b608e2f4b 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix.py +++ b/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix.py @@ -18,6 +18,7 @@ import pprint import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic_core import to_jsonable_python @@ -37,7 +38,10 @@ class CreateNetworkIPv4WithPrefix(BaseModel): default=None, description="A list containing DNS Servers/Nameservers for IPv4." ) prefix: Annotated[str, Field(strict=True)] = Field(description="IPv4 Classless Inter-Domain Routing (CIDR).") - __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefix"] + vpc_network_range_id: Optional[UUID] = Field( + default=None, description="Universally Unique Identifier (UUID).", alias="vpcNetworkRangeId" + ) + __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefix", "vpcNetworkRangeId"] @field_validator("gateway") def gateway_validate_regular_expression(cls, value): @@ -72,6 +76,21 @@ def prefix_validate_regular_expression(cls, value): ) return value + @field_validator("vpc_network_range_id") + def vpc_network_range_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( validate_by_name=True, validate_by_alias=True, @@ -126,6 +145,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate( - {"gateway": obj.get("gateway"), "nameservers": obj.get("nameservers"), "prefix": obj.get("prefix")} + { + "gateway": obj.get("gateway"), + "nameservers": obj.get("nameservers"), + "prefix": obj.get("prefix"), + "vpcNetworkRangeId": obj.get("vpcNetworkRangeId"), + } ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix_length.py b/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix_length.py index 463bcd02f..eac401887 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix_length.py +++ b/services/iaas/src/stackit/iaas/models/create_network_ipv4_with_prefix_length.py @@ -16,9 +16,11 @@ import json import pprint +import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic_core import to_jsonable_python from typing_extensions import Annotated, Self @@ -32,7 +34,25 @@ class CreateNetworkIPv4WithPrefixLength(BaseModel): default=None, description="A list containing DNS Servers/Nameservers for IPv4." ) prefix_length: Annotated[int, Field(le=29, strict=True, ge=8)] = Field(alias="prefixLength") - __properties: ClassVar[List[str]] = ["nameservers", "prefixLength"] + vpc_network_range_id: Optional[UUID] = Field( + default=None, description="Universally Unique Identifier (UUID).", alias="vpcNetworkRangeId" + ) + __properties: ClassVar[List[str]] = ["nameservers", "prefixLength", "vpcNetworkRangeId"] + + @field_validator("vpc_network_range_id") + def vpc_network_range_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value model_config = ConfigDict( validate_by_name=True, @@ -82,5 +102,11 @@ 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({"nameservers": obj.get("nameservers"), "prefixLength": obj.get("prefixLength")}) + _obj = cls.model_validate( + { + "nameservers": obj.get("nameservers"), + "prefixLength": obj.get("prefixLength"), + "vpcNetworkRangeId": obj.get("vpcNetworkRangeId"), + } + ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix.py b/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix.py index 9c3e9ba7c..3b98408f4 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix.py +++ b/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix.py @@ -18,6 +18,7 @@ import pprint import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic_core import to_jsonable_python @@ -37,7 +38,10 @@ class CreateNetworkIPv6WithPrefix(BaseModel): default=None, description="A list containing DNS Servers/Nameservers for IPv6." ) prefix: Annotated[str, Field(strict=True)] = Field(description="Classless Inter-Domain Routing (CIDR) for IPv6.") - __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefix"] + vpc_network_range_id: Optional[UUID] = Field( + default=None, description="Universally Unique Identifier (UUID).", alias="vpcNetworkRangeId" + ) + __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefix", "vpcNetworkRangeId"] @field_validator("gateway") def gateway_validate_regular_expression(cls, value): @@ -72,6 +76,21 @@ def prefix_validate_regular_expression(cls, value): ) return value + @field_validator("vpc_network_range_id") + def vpc_network_range_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( validate_by_name=True, validate_by_alias=True, @@ -126,6 +145,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate( - {"gateway": obj.get("gateway"), "nameservers": obj.get("nameservers"), "prefix": obj.get("prefix")} + { + "gateway": obj.get("gateway"), + "nameservers": obj.get("nameservers"), + "prefix": obj.get("prefix"), + "vpcNetworkRangeId": obj.get("vpcNetworkRangeId"), + } ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix_length.py b/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix_length.py index 8696f5cad..eeac42916 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix_length.py +++ b/services/iaas/src/stackit/iaas/models/create_network_ipv6_with_prefix_length.py @@ -16,9 +16,11 @@ import json import pprint +import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic_core import to_jsonable_python from typing_extensions import Annotated, Self @@ -32,7 +34,25 @@ class CreateNetworkIPv6WithPrefixLength(BaseModel): default=None, description="A list containing DNS Servers/Nameservers for IPv6." ) prefix_length: Annotated[int, Field(le=128, strict=True, ge=56)] = Field(alias="prefixLength") - __properties: ClassVar[List[str]] = ["nameservers", "prefixLength"] + vpc_network_range_id: Optional[UUID] = Field( + default=None, description="Universally Unique Identifier (UUID).", alias="vpcNetworkRangeId" + ) + __properties: ClassVar[List[str]] = ["nameservers", "prefixLength", "vpcNetworkRangeId"] + + @field_validator("vpc_network_range_id") + def vpc_network_range_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value model_config = ConfigDict( validate_by_name=True, @@ -82,5 +102,11 @@ 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({"nameservers": obj.get("nameservers"), "prefixLength": obj.get("prefixLength")}) + _obj = cls.model_validate( + { + "nameservers": obj.get("nameservers"), + "prefixLength": obj.get("prefixLength"), + "vpcNetworkRangeId": obj.get("vpcNetworkRangeId"), + } + ) return _obj 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 d6e932255..522844a41 100644 --- a/services/iaas/src/stackit/iaas/models/create_network_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_network_payload.py @@ -49,7 +49,8 @@ class CreateNetworkPayload(BaseModel): routing_table_id: Optional[UUID] = Field( default=None, description="Universally Unique Identifier (UUID).", alias="routingTableId" ) - __properties: ClassVar[List[str]] = ["dhcp", "ipv4", "ipv6", "labels", "name", "routed", "routingTableId"] + vpc_id: Optional[UUID] = Field(default=None, description="The identifier (ID) of a STACKIT VPC.", alias="vpcId") + __properties: ClassVar[List[str]] = ["dhcp", "ipv4", "ipv6", "labels", "name", "routed", "routingTableId", "vpcId"] @field_validator("name") def name_validate_regular_expression(cls, value): @@ -76,6 +77,21 @@ def routing_table_id_validate_regular_expression(cls, value): ) return value + @field_validator("vpc_id") + def vpc_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( validate_by_name=True, validate_by_alias=True, @@ -139,6 +155,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "routed": obj.get("routed"), "routingTableId": obj.get("routingTableId"), + "vpcId": obj.get("vpcId"), } ) return _obj 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 632f7c184..3546ad6b3 100644 --- a/services/iaas/src/stackit/iaas/models/create_server_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_server_payload.py @@ -40,6 +40,7 @@ from stackit.iaas.models.server_agent import ServerAgent from stackit.iaas.models.server_maintenance import ServerMaintenance from stackit.iaas.models.server_network import ServerNetwork +from stackit.iaas.models.server_vtpm import ServerVTPM class CreateServerPayload(BaseModel): @@ -118,6 +119,7 @@ class CreateServerPayload(BaseModel): alias="userData", ) volumes: Optional[List[UUID]] = Field(default=None, description="The list of volumes attached to the server.") + vtpm: Optional[ServerVTPM] = None __properties: ClassVar[List[str]] = [ "affinityGroup", "agent", @@ -144,6 +146,7 @@ class CreateServerPayload(BaseModel): "updatedAt", "userData", "volumes", + "vtpm", ] @field_validator("affinity_group") @@ -345,6 +348,9 @@ def to_dict(self) -> Dict[str, Any]: if _item_nics: _items.append(_item_nics.to_dict()) _dict["nics"] = _items + # override the default output from pydantic by calling `to_dict()` of vtpm + if self.vtpm: + _dict["vtpm"] = self.vtpm.to_dict() return _dict @classmethod @@ -393,6 +399,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "updatedAt": obj.get("updatedAt"), "userData": obj.get("userData"), "volumes": obj.get("volumes"), + "vtpm": ServerVTPM.from_dict(obj["vtpm"]) if obj.get("vtpm") is not None else None, } ) return _obj 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 fe1a587f2..f12589f8b 100644 --- a/services/iaas/src/stackit/iaas/models/create_snapshot_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_snapshot_payload.py @@ -31,6 +31,9 @@ class CreateSnapshotPayload(BaseModel): Object that represents a snapshot. """ # noqa: E501 + availability_zone: Optional[StrictStr] = Field( + default=None, description="Object that represents an availability zone.", alias="availabilityZone" + ) created_at: Optional[datetime] = Field( default=None, description="Date-time when resource was created.", alias="createdAt" ) @@ -55,6 +58,7 @@ class CreateSnapshotPayload(BaseModel): ) volume_id: UUID = Field(description="Universally Unique Identifier (UUID).", alias="volumeId") __properties: ClassVar[List[str]] = [ + "availabilityZone", "createdAt", "description", "id", @@ -166,9 +170,11 @@ def to_dict(self) -> Dict[str, Any]: * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set( [ + "availability_zone", "created_at", "id", "size", @@ -195,6 +201,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate( { + "availabilityZone": obj.get("availabilityZone"), "createdAt": obj.get("createdAt"), "description": obj.get("description"), "id": obj.get("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 cc7f037e9..c4f6558e5 100644 --- a/services/iaas/src/stackit/iaas/models/create_volume_payload.py +++ b/services/iaas/src/stackit/iaas/models/create_volume_payload.py @@ -76,7 +76,7 @@ class CreateVolumePayload(BaseModel): source: Optional[VolumeSource] = None status: Optional[StrictStr] = Field( default=None, - description="The status of a volume object. Possible values: `ATTACHED`, `ATTACHING`, `AVAILABLE`, `AWAITING-TRANSFER`, `BACKING-UP`, `CREATING`, `DELETED`, `DELETING`, `DETACHING`, `DOWNLOADING`, `ERROR`, `ERROR_BACKING-UP`, `ERROR_DELETING`, `ERROR_RESIZING`, `ERROR_RESTORING-BACKUP`, `MAINTENANCE`, `RESERVED`, `RESIZING`, `RESTORING-BACKUP`, `RETYPING`, `UPLOADING`.", + description="The status of a volume object. Possible values: `ATTACHED`, `ATTACHING`, `AVAILABLE`, `AWAITING-TRANSFER`, `BACKING-UP`, `CREATING`, `DELETED`, `DELETING`, `DETACHING`, `DOWNLOADING`, `ERROR`, `ERROR_BACKING-UP`, `ERROR_DELETING`, `ERROR_RESIZING`, `ERROR_RESTORING-BACKUP`, `ERROR_KMS-ENCRYPTION-PARAMS`, `MAINTENANCE`, `RESERVED`, `RESIZING`, `RESTORING-BACKUP`, `RETYPING`, `UPLOADING`.", ) updated_at: Optional[datetime] = Field( default=None, description="Date-time when resource was last updated.", alias="updatedAt" diff --git a/services/iaas/src/stackit/iaas/models/network.py b/services/iaas/src/stackit/iaas/models/network.py index ad56498e3..98b6806b9 100644 --- a/services/iaas/src/stackit/iaas/models/network.py +++ b/services/iaas/src/stackit/iaas/models/network.py @@ -65,6 +65,7 @@ class Network(BaseModel): updated_at: Optional[datetime] = Field( default=None, description="Date-time when resource was last updated.", alias="updatedAt" ) + vpc_id: Optional[UUID] = Field(default=None, description="The identifier (ID) of a STACKIT VPC.", alias="vpcId") __properties: ClassVar[List[str]] = [ "createdAt", "dhcp", @@ -77,6 +78,7 @@ class Network(BaseModel): "routingTableId", "status", "updatedAt", + "vpcId", ] @field_validator("created_at", mode="before") @@ -132,6 +134,21 @@ def updated_at_change_year_zero_to_one(cls, value): return "0001" + value[4:] # Take "0001" and append the rest of the string return value + @field_validator("vpc_id") + def vpc_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( validate_by_name=True, validate_by_alias=True, @@ -206,6 +223,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "routingTableId": obj.get("routingTableId"), "status": obj.get("status"), "updatedAt": obj.get("updatedAt"), + "vpcId": obj.get("vpcId"), } ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/network_ipv4.py b/services/iaas/src/stackit/iaas/models/network_ipv4.py index d3ae80e55..6b3b5481e 100644 --- a/services/iaas/src/stackit/iaas/models/network_ipv4.py +++ b/services/iaas/src/stackit/iaas/models/network_ipv4.py @@ -18,6 +18,7 @@ import pprint import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic_core import to_jsonable_python @@ -40,7 +41,10 @@ class NetworkIPv4(BaseModel): public_ip: Optional[Annotated[str, Field(strict=True)]] = Field( default=None, description="String that represents an IPv4 address.", alias="publicIp" ) - __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefixes", "publicIp"] + vpc_network_range_id: Optional[UUID] = Field( + default=None, description="Universally Unique Identifier (UUID).", alias="vpcNetworkRangeId" + ) + __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefixes", "publicIp", "vpcNetworkRangeId"] @field_validator("gateway") def gateway_validate_regular_expression(cls, value): @@ -78,6 +82,21 @@ def public_ip_validate_regular_expression(cls, value): ) return value + @field_validator("vpc_network_range_id") + def vpc_network_range_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( validate_by_name=True, validate_by_alias=True, @@ -142,6 +161,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "nameservers": obj.get("nameservers"), "prefixes": obj.get("prefixes"), "publicIp": obj.get("publicIp"), + "vpcNetworkRangeId": obj.get("vpcNetworkRangeId"), } ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/network_ipv6.py b/services/iaas/src/stackit/iaas/models/network_ipv6.py index 7a138a34d..55fd0495e 100644 --- a/services/iaas/src/stackit/iaas/models/network_ipv6.py +++ b/services/iaas/src/stackit/iaas/models/network_ipv6.py @@ -18,6 +18,7 @@ import pprint import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic_core import to_jsonable_python @@ -37,7 +38,10 @@ class NetworkIPv6(BaseModel): default=None, description="A list containing DNS Servers/Nameservers for IPv6." ) prefixes: List[Annotated[str, Field(strict=True)]] - __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefixes"] + vpc_network_range_id: Optional[UUID] = Field( + default=None, description="Universally Unique Identifier (UUID).", alias="vpcNetworkRangeId" + ) + __properties: ClassVar[List[str]] = ["gateway", "nameservers", "prefixes", "vpcNetworkRangeId"] @field_validator("gateway") def gateway_validate_regular_expression(cls, value): @@ -57,6 +61,21 @@ def gateway_validate_regular_expression(cls, value): ) return value + @field_validator("vpc_network_range_id") + def vpc_network_range_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not isinstance(value, str): + value = str(value) + + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( validate_by_name=True, validate_by_alias=True, @@ -111,6 +130,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate( - {"gateway": obj.get("gateway"), "nameservers": obj.get("nameservers"), "prefixes": obj.get("prefixes")} + { + "gateway": obj.get("gateway"), + "nameservers": obj.get("nameservers"), + "prefixes": obj.get("prefixes"), + "vpcNetworkRangeId": obj.get("vpcNetworkRangeId"), + } ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/network_range.py b/services/iaas/src/stackit/iaas/models/network_range.py index df4281fd9..aa2100999 100644 --- a/services/iaas/src/stackit/iaas/models/network_range.py +++ b/services/iaas/src/stackit/iaas/models/network_range.py @@ -28,7 +28,7 @@ class NetworkRange(BaseModel): """ - Object that represents a network range. + Object that represents a network range of a network area. """ # noqa: E501 created_at: Optional[datetime] = Field( diff --git a/services/iaas/src/stackit/iaas/models/network_range_list_response.py b/services/iaas/src/stackit/iaas/models/network_range_list_response.py index 34b774b24..2b5129a81 100644 --- a/services/iaas/src/stackit/iaas/models/network_range_list_response.py +++ b/services/iaas/src/stackit/iaas/models/network_range_list_response.py @@ -27,11 +27,11 @@ class NetworkRangeListResponse(BaseModel): """ - Network Range list response. + Network Range list response of a network area. """ # noqa: E501 items: Annotated[List[NetworkRange], Field(min_length=1, max_length=64)] = Field( - description="A list of network ranges." + description="A list of network area network ranges." ) __properties: ClassVar[List[str]] = ["items"] diff --git a/services/iaas/src/stackit/iaas/models/regional_area_ipv4.py b/services/iaas/src/stackit/iaas/models/regional_area_ipv4.py index 2a4538ce0..bd45b3902 100644 --- a/services/iaas/src/stackit/iaas/models/regional_area_ipv4.py +++ b/services/iaas/src/stackit/iaas/models/regional_area_ipv4.py @@ -44,7 +44,7 @@ class RegionalAreaIPv4(BaseModel): description="The minimal prefix length for networks in the network area.", alias="minPrefixLen" ) network_ranges: Annotated[List[NetworkRange], Field(min_length=1, max_length=64)] = Field( - description="A list of network ranges.", alias="networkRanges" + description="A list of network area network ranges.", alias="networkRanges" ) transfer_network: Annotated[str, Field(strict=True)] = Field( description="IPv4 Classless Inter-Domain Routing (CIDR).", alias="transferNetwork" diff --git a/services/iaas/src/stackit/iaas/models/request.py b/services/iaas/src/stackit/iaas/models/request.py index ac6d2f911..d4bd151bb 100644 --- a/services/iaas/src/stackit/iaas/models/request.py +++ b/services/iaas/src/stackit/iaas/models/request.py @@ -40,7 +40,7 @@ class Request(BaseModel): description="Identifier (ID) representing a single API request.", alias="requestId" ) request_type: StrictStr = Field( - description="Object that represents a resource type. Possible values: `BACKUP`, `IMAGE`, `NETWORK`, `NETWORKAREA`, `NIC`, `PROJECT`, `ROUTE`, `SERVER`, `SERVICEACCOUNT`, `SNAPSHOT`, `VIRTUALIP`, `VOLUME`.", + description="Object that represents a resource type. Possible values: `BACKUP`, `IMAGE`, `NETWORK`, `NETWORKAREA`, `NIC`, `PROJECT`, `ROUTE`, `SERVER`, `SERVICEACCOUNT`, `SNAPSHOT`, `VIRTUALIP`, `VOLUME`, `VPC`, `VPCNETWORKRANGE`.", alias="requestType", ) resources: List[RequestResource] diff --git a/services/iaas/src/stackit/iaas/models/request_resource.py b/services/iaas/src/stackit/iaas/models/request_resource.py index ffbe144d8..496d40d23 100644 --- a/services/iaas/src/stackit/iaas/models/request_resource.py +++ b/services/iaas/src/stackit/iaas/models/request_resource.py @@ -35,7 +35,7 @@ class RequestResource(BaseModel): description="The state of a resource object. Possible values: `CREATING`, `CREATED`, `DELETING`, `DELETED`, `FAILED`, `UPDATED`, `UPDATING`." ) type: StrictStr = Field( - description="Object that represents a resource type. Possible values: `BACKUP`, `IMAGE`, `NETWORK`, `NETWORKAREA`, `NIC`, `PROJECT`, `ROUTE`, `SERVER`, `SERVICEACCOUNT`, `SNAPSHOT`, `VIRTUALIP`, `VOLUME`." + description="Object that represents a resource type. Possible values: `BACKUP`, `IMAGE`, `NETWORK`, `NETWORKAREA`, `NIC`, `PROJECT`, `ROUTE`, `SERVER`, `SERVICEACCOUNT`, `SNAPSHOT`, `VIRTUALIP`, `VOLUME`, `VPC`, `VPCNETWORKRANGE`." ) __properties: ClassVar[List[str]] = ["id", "status", "type"] diff --git a/services/iaas/src/stackit/iaas/models/routing_table.py b/services/iaas/src/stackit/iaas/models/routing_table.py index a9ad199e0..2b74e643c 100644 --- a/services/iaas/src/stackit/iaas/models/routing_table.py +++ b/services/iaas/src/stackit/iaas/models/routing_table.py @@ -28,7 +28,7 @@ class RoutingTable(BaseModel): """ - An object representing a routing table. + An object representing a routing table. Filterable Fields: `dynamicRoutes`, `systemRoutes`. """ # noqa: E501 created_at: Optional[datetime] = Field( diff --git a/services/iaas/src/stackit/iaas/models/server.py b/services/iaas/src/stackit/iaas/models/server.py index 59460c8e1..cb3a7a4f1 100644 --- a/services/iaas/src/stackit/iaas/models/server.py +++ b/services/iaas/src/stackit/iaas/models/server.py @@ -38,6 +38,7 @@ from stackit.iaas.models.server_maintenance import ServerMaintenance from stackit.iaas.models.server_network import ServerNetwork from stackit.iaas.models.server_networking import ServerNetworking +from stackit.iaas.models.server_vtpm import ServerVTPM class Server(BaseModel): @@ -116,6 +117,7 @@ class Server(BaseModel): alias="userData", ) volumes: Optional[List[UUID]] = Field(default=None, description="The list of volumes attached to the server.") + vtpm: Optional[ServerVTPM] = None __properties: ClassVar[List[str]] = [ "affinityGroup", "agent", @@ -142,6 +144,7 @@ class Server(BaseModel): "updatedAt", "userData", "volumes", + "vtpm", ] @field_validator("affinity_group") @@ -343,6 +346,9 @@ def to_dict(self) -> Dict[str, Any]: if _item_nics: _items.append(_item_nics.to_dict()) _dict["nics"] = _items + # override the default output from pydantic by calling `to_dict()` of vtpm + if self.vtpm: + _dict["vtpm"] = self.vtpm.to_dict() return _dict @classmethod @@ -389,6 +395,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "updatedAt": obj.get("updatedAt"), "userData": obj.get("userData"), "volumes": obj.get("volumes"), + "vtpm": ServerVTPM.from_dict(obj["vtpm"]) if obj.get("vtpm") is not None else None, } ) return _obj diff --git a/services/iaas/src/stackit/iaas/models/server_vtpm.py b/services/iaas/src/stackit/iaas/models/server_vtpm.py new file mode 100644 index 000000000..7d2d19c5c --- /dev/null +++ b/services/iaas/src/stackit/iaas/models/server_vtpm.py @@ -0,0 +1,85 @@ +# coding: utf-8 + +""" + STACKIT IaaS API + + This API allows you to create and modify IaaS resources. + + The version of the OpenAPI document: 2 + Contact: stackit-iaas@mail.schwarz + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations + +import json +import pprint +from typing import Any, ClassVar, Dict, List, Optional, Set + +from pydantic import BaseModel, ConfigDict, Field, StrictBool +from pydantic_core import to_jsonable_python +from typing_extensions import Self + + +class ServerVTPM(BaseModel): + """ + Configuration for the Virtual Trusted Platform Module (vTPM). + """ # noqa: E501 + + enabled: StrictBool = Field( + description="Defines whether the server instance has the Virtual Trusted Platform Module (vTPM) enabled." + ) + __properties: ClassVar[List[str]] = ["enabled"] + + model_config = ConfigDict( + validate_by_name=True, + validate_by_alias=True, + validate_assignment=True, + protected_namespaces=(), + ) + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(to_jsonable_python(self.to_dict())) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ServerVTPM from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ServerVTPM from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"enabled": obj.get("enabled") if obj.get("enabled") is not None else False}) + return _obj diff --git a/services/iaas/src/stackit/iaas/models/snapshot.py b/services/iaas/src/stackit/iaas/models/snapshot.py index d30d9549d..620b4551f 100644 --- a/services/iaas/src/stackit/iaas/models/snapshot.py +++ b/services/iaas/src/stackit/iaas/models/snapshot.py @@ -31,6 +31,9 @@ class Snapshot(BaseModel): Object that represents a snapshot. """ # noqa: E501 + availability_zone: Optional[StrictStr] = Field( + default=None, description="Object that represents an availability zone.", alias="availabilityZone" + ) created_at: Optional[datetime] = Field( default=None, description="Date-time when resource was created.", alias="createdAt" ) @@ -55,6 +58,7 @@ class Snapshot(BaseModel): ) volume_id: UUID = Field(description="Universally Unique Identifier (UUID).", alias="volumeId") __properties: ClassVar[List[str]] = [ + "availabilityZone", "createdAt", "description", "id", @@ -166,9 +170,11 @@ def to_dict(self) -> Dict[str, Any]: * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set( [ + "availability_zone", "created_at", "id", "size", @@ -195,6 +201,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate( { + "availabilityZone": obj.get("availabilityZone"), "createdAt": obj.get("createdAt"), "description": obj.get("description"), "id": obj.get("id"), diff --git a/services/iaas/src/stackit/iaas/models/volume.py b/services/iaas/src/stackit/iaas/models/volume.py index f6f660a72..e93c8d342 100644 --- a/services/iaas/src/stackit/iaas/models/volume.py +++ b/services/iaas/src/stackit/iaas/models/volume.py @@ -76,7 +76,7 @@ class Volume(BaseModel): source: Optional[VolumeSource] = None status: Optional[StrictStr] = Field( default=None, - description="The status of a volume object. Possible values: `ATTACHED`, `ATTACHING`, `AVAILABLE`, `AWAITING-TRANSFER`, `BACKING-UP`, `CREATING`, `DELETED`, `DELETING`, `DETACHING`, `DOWNLOADING`, `ERROR`, `ERROR_BACKING-UP`, `ERROR_DELETING`, `ERROR_RESIZING`, `ERROR_RESTORING-BACKUP`, `MAINTENANCE`, `RESERVED`, `RESIZING`, `RESTORING-BACKUP`, `RETYPING`, `UPLOADING`.", + description="The status of a volume object. Possible values: `ATTACHED`, `ATTACHING`, `AVAILABLE`, `AWAITING-TRANSFER`, `BACKING-UP`, `CREATING`, `DELETED`, `DELETING`, `DETACHING`, `DOWNLOADING`, `ERROR`, `ERROR_BACKING-UP`, `ERROR_DELETING`, `ERROR_RESIZING`, `ERROR_RESTORING-BACKUP`, `ERROR_KMS-ENCRYPTION-PARAMS`, `MAINTENANCE`, `RESERVED`, `RESIZING`, `RESTORING-BACKUP`, `RETYPING`, `UPLOADING`.", ) updated_at: Optional[datetime] = Field( default=None, description="Date-time when resource was last updated.", alias="updatedAt"