diff --git a/scaleway-async/scaleway_async/baremetal/v1/__init__.py b/scaleway-async/scaleway_async/baremetal/v1/__init__.py index 96db8523c..f1ec9f1e5 100644 --- a/scaleway-async/scaleway_async/baremetal/v1/__init__.py +++ b/scaleway-async/scaleway_async/baremetal/v1/__init__.py @@ -81,6 +81,7 @@ from .types import ListServersResponse from .types import ListSettingsRequest from .types import ListSettingsResponse +from .types import MigrateServerToMonthlyOfferRequest from .types import PrivateNetworkApiAddServerPrivateNetworkRequest from .types import PrivateNetworkApiDeleteServerPrivateNetworkRequest from .types import PrivateNetworkApiListServerPrivateNetworksRequest @@ -180,6 +181,7 @@ "ListServersResponse", "ListSettingsRequest", "ListSettingsResponse", + "MigrateServerToMonthlyOfferRequest", "PrivateNetworkApiAddServerPrivateNetworkRequest", "PrivateNetworkApiDeleteServerPrivateNetworkRequest", "PrivateNetworkApiListServerPrivateNetworksRequest", diff --git a/scaleway-async/scaleway_async/baremetal/v1/api.py b/scaleway-async/scaleway_async/baremetal/v1/api.py index 204dd12f5..24f8f9163 100644 --- a/scaleway-async/scaleway_async/baremetal/v1/api.py +++ b/scaleway-async/scaleway_async/baremetal/v1/api.py @@ -1035,6 +1035,38 @@ async def delete_option_server( self._throw_on_error(res) return unmarshal_Server(res.json()) + async def migrate_server_to_monthly_offer( + self, + *, + server_id: str, + zone: Optional[ScwZone] = None, + ) -> Server: + """ + Migrate server offer. + Migrate server with hourly offer to monthly offer. + :param server_id: ID of the server. + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`Server ` + + Usage: + :: + + result = await api.migrate_server_to_monthly_offer( + server_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_server_id = validate_path_param("server_id", server_id) + + res = self._request( + "POST", + f"/baremetal/v1/zones/{param_zone}/servers/{param_server_id}/migrate-offer-monthly", + ) + + self._throw_on_error(res) + return unmarshal_Server(res.json()) + async def list_offers( self, *, diff --git a/scaleway-async/scaleway_async/baremetal/v1/content.py b/scaleway-async/scaleway_async/baremetal/v1/content.py index e0817ef45..cc244bae7 100644 --- a/scaleway-async/scaleway_async/baremetal/v1/content.py +++ b/scaleway-async/scaleway_async/baremetal/v1/content.py @@ -29,6 +29,7 @@ ServerStatus.DELETING, ServerStatus.ORDERED, ServerStatus.RESETTING, + ServerStatus.MIGRATING, ] """ Lists transient statutes of the enum :class:`ServerStatus `. diff --git a/scaleway-async/scaleway_async/baremetal/v1/marshalling.py b/scaleway-async/scaleway_async/baremetal/v1/marshalling.py index f04179dda..e95766ac5 100644 --- a/scaleway-async/scaleway_async/baremetal/v1/marshalling.py +++ b/scaleway-async/scaleway_async/baremetal/v1/marshalling.py @@ -781,6 +781,12 @@ def unmarshal_Offer(data: Any) -> Offer: else: args["fee"] = None + field = data.get("monthly_offer_id", None) + if field is not None: + args["monthly_offer_id"] = field + else: + args["monthly_offer_id"] = None + return Offer(**args) diff --git a/scaleway-async/scaleway_async/baremetal/v1/types.py b/scaleway-async/scaleway_async/baremetal/v1/types.py index d419bad2e..6f0a4468a 100644 --- a/scaleway-async/scaleway_async/baremetal/v1/types.py +++ b/scaleway-async/scaleway_async/baremetal/v1/types.py @@ -203,6 +203,7 @@ class ServerStatus(str, Enum, metaclass=StrEnumMeta): OUT_OF_STOCK = "out_of_stock" ORDERED = "ordered" RESETTING = "resetting" + MIGRATING = "migrating" def __str__(self) -> str: return str(self.value) @@ -824,6 +825,11 @@ class Offer: One time fee invoiced by Scaleway for the setup and activation of the server. """ + monthly_offer_id: Optional[str] + """ + Exist only for hourly offers, to migrate to the monthly offer. + """ + @dataclass class Option: @@ -1589,6 +1595,19 @@ class ListSettingsResponse: """ +@dataclass +class MigrateServerToMonthlyOfferRequest: + server_id: str + """ + ID of the server. + """ + + zone: Optional[ScwZone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + @dataclass class PrivateNetworkApiAddServerPrivateNetworkRequest: server_id: str diff --git a/scaleway/scaleway/baremetal/v1/__init__.py b/scaleway/scaleway/baremetal/v1/__init__.py index 96db8523c..f1ec9f1e5 100644 --- a/scaleway/scaleway/baremetal/v1/__init__.py +++ b/scaleway/scaleway/baremetal/v1/__init__.py @@ -81,6 +81,7 @@ from .types import ListServersResponse from .types import ListSettingsRequest from .types import ListSettingsResponse +from .types import MigrateServerToMonthlyOfferRequest from .types import PrivateNetworkApiAddServerPrivateNetworkRequest from .types import PrivateNetworkApiDeleteServerPrivateNetworkRequest from .types import PrivateNetworkApiListServerPrivateNetworksRequest @@ -180,6 +181,7 @@ "ListServersResponse", "ListSettingsRequest", "ListSettingsResponse", + "MigrateServerToMonthlyOfferRequest", "PrivateNetworkApiAddServerPrivateNetworkRequest", "PrivateNetworkApiDeleteServerPrivateNetworkRequest", "PrivateNetworkApiListServerPrivateNetworksRequest", diff --git a/scaleway/scaleway/baremetal/v1/api.py b/scaleway/scaleway/baremetal/v1/api.py index d4e1bc217..d9b73a500 100644 --- a/scaleway/scaleway/baremetal/v1/api.py +++ b/scaleway/scaleway/baremetal/v1/api.py @@ -1035,6 +1035,38 @@ def delete_option_server( self._throw_on_error(res) return unmarshal_Server(res.json()) + def migrate_server_to_monthly_offer( + self, + *, + server_id: str, + zone: Optional[ScwZone] = None, + ) -> Server: + """ + Migrate server offer. + Migrate server with hourly offer to monthly offer. + :param server_id: ID of the server. + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`Server ` + + Usage: + :: + + result = api.migrate_server_to_monthly_offer( + server_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_server_id = validate_path_param("server_id", server_id) + + res = self._request( + "POST", + f"/baremetal/v1/zones/{param_zone}/servers/{param_server_id}/migrate-offer-monthly", + ) + + self._throw_on_error(res) + return unmarshal_Server(res.json()) + def list_offers( self, *, diff --git a/scaleway/scaleway/baremetal/v1/content.py b/scaleway/scaleway/baremetal/v1/content.py index e0817ef45..cc244bae7 100644 --- a/scaleway/scaleway/baremetal/v1/content.py +++ b/scaleway/scaleway/baremetal/v1/content.py @@ -29,6 +29,7 @@ ServerStatus.DELETING, ServerStatus.ORDERED, ServerStatus.RESETTING, + ServerStatus.MIGRATING, ] """ Lists transient statutes of the enum :class:`ServerStatus `. diff --git a/scaleway/scaleway/baremetal/v1/marshalling.py b/scaleway/scaleway/baremetal/v1/marshalling.py index f04179dda..e95766ac5 100644 --- a/scaleway/scaleway/baremetal/v1/marshalling.py +++ b/scaleway/scaleway/baremetal/v1/marshalling.py @@ -781,6 +781,12 @@ def unmarshal_Offer(data: Any) -> Offer: else: args["fee"] = None + field = data.get("monthly_offer_id", None) + if field is not None: + args["monthly_offer_id"] = field + else: + args["monthly_offer_id"] = None + return Offer(**args) diff --git a/scaleway/scaleway/baremetal/v1/types.py b/scaleway/scaleway/baremetal/v1/types.py index d419bad2e..6f0a4468a 100644 --- a/scaleway/scaleway/baremetal/v1/types.py +++ b/scaleway/scaleway/baremetal/v1/types.py @@ -203,6 +203,7 @@ class ServerStatus(str, Enum, metaclass=StrEnumMeta): OUT_OF_STOCK = "out_of_stock" ORDERED = "ordered" RESETTING = "resetting" + MIGRATING = "migrating" def __str__(self) -> str: return str(self.value) @@ -824,6 +825,11 @@ class Offer: One time fee invoiced by Scaleway for the setup and activation of the server. """ + monthly_offer_id: Optional[str] + """ + Exist only for hourly offers, to migrate to the monthly offer. + """ + @dataclass class Option: @@ -1589,6 +1595,19 @@ class ListSettingsResponse: """ +@dataclass +class MigrateServerToMonthlyOfferRequest: + server_id: str + """ + ID of the server. + """ + + zone: Optional[ScwZone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + @dataclass class PrivateNetworkApiAddServerPrivateNetworkRequest: server_id: str