Skip to content

Commit 0a00c58

Browse files
authored
feat(instance): add compatible types endpoint and end_of_service flag in ServerType (#867)
1 parent 64cdb42 commit 0a00c58

File tree

8 files changed

+178
-0
lines changed

8 files changed

+178
-0
lines changed

scaleway-async/scaleway_async/instance/v1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
from .types import GetSecurityGroupResponse
129129
from .types import GetSecurityGroupRuleRequest
130130
from .types import GetSecurityGroupRuleResponse
131+
from .types import GetServerCompatibleTypesRequest
131132
from .types import GetServerRequest
132133
from .types import GetServerResponse
133134
from .types import GetServerTypesAvailabilityRequest
@@ -167,6 +168,7 @@
167168
from .types import PlanBlockMigrationRequest
168169
from .types import ServerActionRequest
169170
from .types import ServerActionResponse
171+
from .types import ServerCompatibleTypes
170172
from .types import SetImageRequest
171173
from .types import SetPlacementGroupRequest
172174
from .types import SetPlacementGroupResponse
@@ -324,6 +326,7 @@
324326
"GetSecurityGroupResponse",
325327
"GetSecurityGroupRuleRequest",
326328
"GetSecurityGroupRuleResponse",
329+
"GetServerCompatibleTypesRequest",
327330
"GetServerRequest",
328331
"GetServerResponse",
329332
"GetServerTypesAvailabilityRequest",
@@ -363,6 +366,7 @@
363366
"PlanBlockMigrationRequest",
364367
"ServerActionRequest",
365368
"ServerActionResponse",
369+
"ServerCompatibleTypes",
366370
"SetImageRequest",
367371
"SetPlacementGroupRequest",
368372
"SetPlacementGroupResponse",

scaleway-async/scaleway_async/instance/v1/api.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
ServerActionRequest,
109109
ServerActionRequestVolumeBackupTemplate,
110110
ServerActionResponse,
111+
ServerCompatibleTypes,
111112
ServerIp,
112113
ServerIpv6,
113114
ServerLocation,
@@ -189,6 +190,7 @@
189190
unmarshal_ListVolumesTypesResponse,
190191
unmarshal_MigrationPlan,
191192
unmarshal_ServerActionResponse,
193+
unmarshal_ServerCompatibleTypes,
192194
unmarshal_SetPlacementGroupResponse,
193195
unmarshal_SetPlacementGroupServersResponse,
194196
unmarshal_SetSecurityGroupRulesResponse,
@@ -1036,6 +1038,43 @@ async def delete_server_user_data(
10361038

10371039
self._throw_on_error(res)
10381040

1041+
async def get_server_compatible_types(
1042+
self,
1043+
*,
1044+
server_id: str,
1045+
zone: Optional[ScwZone] = None,
1046+
) -> ServerCompatibleTypes:
1047+
"""
1048+
Get Instance compatible types.
1049+
Get compatible commercial types that can be used to update the Instance. The compatibility of an Instance offer is based on:
1050+
* the CPU architecture
1051+
* the OS type
1052+
* the required l_ssd storage size
1053+
* the required scratch storage size
1054+
If the specified Instance offer is flagged as end of service, the best compatible offer is the first returned.
1055+
:param server_id: UUID of the Instance you want to get.
1056+
:param zone: Zone to target. If none is passed will use default zone from the config.
1057+
:return: :class:`ServerCompatibleTypes <ServerCompatibleTypes>`
1058+
1059+
Usage:
1060+
::
1061+
1062+
result = await api.get_server_compatible_types(
1063+
server_id="example",
1064+
)
1065+
"""
1066+
1067+
param_zone = validate_path_param("zone", zone or self.client.default_zone)
1068+
param_server_id = validate_path_param("server_id", server_id)
1069+
1070+
res = self._request(
1071+
"GET",
1072+
f"/instance/v1/zones/{param_zone}/servers/{param_server_id}/compatible-types",
1073+
)
1074+
1075+
self._throw_on_error(res)
1076+
return unmarshal_ServerCompatibleTypes(res.json())
1077+
10391078
async def attach_server_volume(
10401079
self,
10411080
*,

scaleway-async/scaleway_async/instance/v1/marshalling.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
ListVolumesTypesResponse,
9595
MigrationPlan,
9696
ServerActionResponse,
97+
ServerCompatibleTypes,
9798
SetPlacementGroupResponse,
9899
SetPlacementGroupServersResponse,
99100
SetSecurityGroupRulesResponse,
@@ -2151,6 +2152,10 @@ def unmarshal_ServerType(data: Any) -> ServerType:
21512152
if field is not None:
21522153
args["baremetal"] = field
21532154

2155+
field = data.get("end_of_service", None)
2156+
if field is not None:
2157+
args["end_of_service"] = field
2158+
21542159
field = data.get("per_volume_constraint", None)
21552160
if field is not None:
21562161
args["per_volume_constraint"] = unmarshal_ServerTypeVolumeConstraintsByType(
@@ -2391,6 +2396,21 @@ def unmarshal_ServerActionResponse(data: Any) -> ServerActionResponse:
23912396
return ServerActionResponse(**args)
23922397

23932398

2399+
def unmarshal_ServerCompatibleTypes(data: Any) -> ServerCompatibleTypes:
2400+
if not isinstance(data, dict):
2401+
raise TypeError(
2402+
"Unmarshalling the type 'ServerCompatibleTypes' failed as data isn't a dictionary."
2403+
)
2404+
2405+
args: Dict[str, Any] = {}
2406+
2407+
field = data.get("compatible_types", None)
2408+
if field is not None:
2409+
args["compatible_types"] = field
2410+
2411+
return ServerCompatibleTypes(**args)
2412+
2413+
23942414
def unmarshal_SetPlacementGroupResponse(data: Any) -> SetPlacementGroupResponse:
23952415
if not isinstance(data, dict):
23962416
raise TypeError(

scaleway-async/scaleway_async/instance/v1/types.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,6 +1342,11 @@ class ServerType:
13421342
True if it is a baremetal Instance.
13431343
"""
13441344

1345+
end_of_service: bool
1346+
"""
1347+
True if this Instance type has reached end of service.
1348+
"""
1349+
13451350
per_volume_constraint: Optional[ServerTypeVolumeConstraintsByType]
13461351
"""
13471352
Additional volume constraints.
@@ -2277,6 +2282,19 @@ class GetSecurityGroupRuleResponse:
22772282
rule: Optional[SecurityGroupRule]
22782283

22792284

2285+
@dataclass
2286+
class GetServerCompatibleTypesRequest:
2287+
server_id: str
2288+
"""
2289+
UUID of the Instance you want to get.
2290+
"""
2291+
2292+
zone: Optional[ScwZone]
2293+
"""
2294+
Zone to target. If none is passed will use default zone from the config.
2295+
"""
2296+
2297+
22802298
@dataclass
22812299
class GetServerRequest:
22822300
server_id: str
@@ -3005,6 +3023,14 @@ class ServerActionResponse:
30053023
task: Optional[Task]
30063024

30073025

3026+
@dataclass
3027+
class ServerCompatibleTypes:
3028+
compatible_types: List[str]
3029+
"""
3030+
Instance compatible types.
3031+
"""
3032+
3033+
30083034
@dataclass
30093035
class SetImageRequest:
30103036
zone: Optional[ScwZone]

scaleway/scaleway/instance/v1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
from .types import GetSecurityGroupResponse
129129
from .types import GetSecurityGroupRuleRequest
130130
from .types import GetSecurityGroupRuleResponse
131+
from .types import GetServerCompatibleTypesRequest
131132
from .types import GetServerRequest
132133
from .types import GetServerResponse
133134
from .types import GetServerTypesAvailabilityRequest
@@ -167,6 +168,7 @@
167168
from .types import PlanBlockMigrationRequest
168169
from .types import ServerActionRequest
169170
from .types import ServerActionResponse
171+
from .types import ServerCompatibleTypes
170172
from .types import SetImageRequest
171173
from .types import SetPlacementGroupRequest
172174
from .types import SetPlacementGroupResponse
@@ -324,6 +326,7 @@
324326
"GetSecurityGroupResponse",
325327
"GetSecurityGroupRuleRequest",
326328
"GetSecurityGroupRuleResponse",
329+
"GetServerCompatibleTypesRequest",
327330
"GetServerRequest",
328331
"GetServerResponse",
329332
"GetServerTypesAvailabilityRequest",
@@ -363,6 +366,7 @@
363366
"PlanBlockMigrationRequest",
364367
"ServerActionRequest",
365368
"ServerActionResponse",
369+
"ServerCompatibleTypes",
366370
"SetImageRequest",
367371
"SetPlacementGroupRequest",
368372
"SetPlacementGroupResponse",

scaleway/scaleway/instance/v1/api.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
ServerActionRequest,
109109
ServerActionRequestVolumeBackupTemplate,
110110
ServerActionResponse,
111+
ServerCompatibleTypes,
111112
ServerIp,
112113
ServerIpv6,
113114
ServerLocation,
@@ -189,6 +190,7 @@
189190
unmarshal_ListVolumesTypesResponse,
190191
unmarshal_MigrationPlan,
191192
unmarshal_ServerActionResponse,
193+
unmarshal_ServerCompatibleTypes,
192194
unmarshal_SetPlacementGroupResponse,
193195
unmarshal_SetPlacementGroupServersResponse,
194196
unmarshal_SetSecurityGroupRulesResponse,
@@ -1036,6 +1038,43 @@ def delete_server_user_data(
10361038

10371039
self._throw_on_error(res)
10381040

1041+
def get_server_compatible_types(
1042+
self,
1043+
*,
1044+
server_id: str,
1045+
zone: Optional[ScwZone] = None,
1046+
) -> ServerCompatibleTypes:
1047+
"""
1048+
Get Instance compatible types.
1049+
Get compatible commercial types that can be used to update the Instance. The compatibility of an Instance offer is based on:
1050+
* the CPU architecture
1051+
* the OS type
1052+
* the required l_ssd storage size
1053+
* the required scratch storage size
1054+
If the specified Instance offer is flagged as end of service, the best compatible offer is the first returned.
1055+
:param server_id: UUID of the Instance you want to get.
1056+
:param zone: Zone to target. If none is passed will use default zone from the config.
1057+
:return: :class:`ServerCompatibleTypes <ServerCompatibleTypes>`
1058+
1059+
Usage:
1060+
::
1061+
1062+
result = api.get_server_compatible_types(
1063+
server_id="example",
1064+
)
1065+
"""
1066+
1067+
param_zone = validate_path_param("zone", zone or self.client.default_zone)
1068+
param_server_id = validate_path_param("server_id", server_id)
1069+
1070+
res = self._request(
1071+
"GET",
1072+
f"/instance/v1/zones/{param_zone}/servers/{param_server_id}/compatible-types",
1073+
)
1074+
1075+
self._throw_on_error(res)
1076+
return unmarshal_ServerCompatibleTypes(res.json())
1077+
10391078
def attach_server_volume(
10401079
self,
10411080
*,

scaleway/scaleway/instance/v1/marshalling.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
ListVolumesTypesResponse,
9595
MigrationPlan,
9696
ServerActionResponse,
97+
ServerCompatibleTypes,
9798
SetPlacementGroupResponse,
9899
SetPlacementGroupServersResponse,
99100
SetSecurityGroupRulesResponse,
@@ -2151,6 +2152,10 @@ def unmarshal_ServerType(data: Any) -> ServerType:
21512152
if field is not None:
21522153
args["baremetal"] = field
21532154

2155+
field = data.get("end_of_service", None)
2156+
if field is not None:
2157+
args["end_of_service"] = field
2158+
21542159
field = data.get("per_volume_constraint", None)
21552160
if field is not None:
21562161
args["per_volume_constraint"] = unmarshal_ServerTypeVolumeConstraintsByType(
@@ -2391,6 +2396,21 @@ def unmarshal_ServerActionResponse(data: Any) -> ServerActionResponse:
23912396
return ServerActionResponse(**args)
23922397

23932398

2399+
def unmarshal_ServerCompatibleTypes(data: Any) -> ServerCompatibleTypes:
2400+
if not isinstance(data, dict):
2401+
raise TypeError(
2402+
"Unmarshalling the type 'ServerCompatibleTypes' failed as data isn't a dictionary."
2403+
)
2404+
2405+
args: Dict[str, Any] = {}
2406+
2407+
field = data.get("compatible_types", None)
2408+
if field is not None:
2409+
args["compatible_types"] = field
2410+
2411+
return ServerCompatibleTypes(**args)
2412+
2413+
23942414
def unmarshal_SetPlacementGroupResponse(data: Any) -> SetPlacementGroupResponse:
23952415
if not isinstance(data, dict):
23962416
raise TypeError(

scaleway/scaleway/instance/v1/types.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,6 +1342,11 @@ class ServerType:
13421342
True if it is a baremetal Instance.
13431343
"""
13441344

1345+
end_of_service: bool
1346+
"""
1347+
True if this Instance type has reached end of service.
1348+
"""
1349+
13451350
per_volume_constraint: Optional[ServerTypeVolumeConstraintsByType]
13461351
"""
13471352
Additional volume constraints.
@@ -2277,6 +2282,19 @@ class GetSecurityGroupRuleResponse:
22772282
rule: Optional[SecurityGroupRule]
22782283

22792284

2285+
@dataclass
2286+
class GetServerCompatibleTypesRequest:
2287+
server_id: str
2288+
"""
2289+
UUID of the Instance you want to get.
2290+
"""
2291+
2292+
zone: Optional[ScwZone]
2293+
"""
2294+
Zone to target. If none is passed will use default zone from the config.
2295+
"""
2296+
2297+
22802298
@dataclass
22812299
class GetServerRequest:
22822300
server_id: str
@@ -3005,6 +3023,14 @@ class ServerActionResponse:
30053023
task: Optional[Task]
30063024

30073025

3026+
@dataclass
3027+
class ServerCompatibleTypes:
3028+
compatible_types: List[str]
3029+
"""
3030+
Instance compatible types.
3031+
"""
3032+
3033+
30083034
@dataclass
30093035
class SetImageRequest:
30103036
zone: Optional[ScwZone]

0 commit comments

Comments
 (0)