Skip to content

Commit dbc41ed

Browse files
authored
feat(apple_silicon): add os selection fields (#503)
1 parent f182837 commit dbc41ed

File tree

8 files changed

+244
-48
lines changed

8 files changed

+244
-48
lines changed

scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from .types import ServerStatus
55
from .content import SERVER_TRANSIENT_STATUSES
66
from .types import ServerTypeStock
7+
from .types import OS
78
from .types import ServerTypeCPU
89
from .types import ServerTypeDisk
910
from .types import ServerTypeMemory
10-
from .types import OS
1111
from .types import ServerType
1212
from .types import Server
1313
from .types import CreateServerRequest
@@ -31,10 +31,10 @@
3131
"ServerStatus",
3232
"SERVER_TRANSIENT_STATUSES",
3333
"ServerTypeStock",
34+
"OS",
3435
"ServerTypeCPU",
3536
"ServerTypeDisk",
3637
"ServerTypeMemory",
37-
"OS",
3838
"ServerType",
3939
"Server",
4040
"CreateServerRequest",

scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
ListServerTypesResponse,
2222
ListServersResponse,
2323
OS,
24+
ReinstallServerRequest,
2425
Server,
2526
ServerType,
2627
UpdateServerRequest,
@@ -36,6 +37,7 @@
3637
unmarshal_ListServerTypesResponse,
3738
unmarshal_ListServersResponse,
3839
marshal_CreateServerRequest,
40+
marshal_ReinstallServerRequest,
3941
marshal_UpdateServerRequest,
4042
)
4143

@@ -109,6 +111,7 @@ async def create_server(
109111
zone: Optional[Zone] = None,
110112
name: Optional[str] = None,
111113
project_id: Optional[str] = None,
114+
os_id: Optional[str] = None,
112115
) -> Server:
113116
"""
114117
Create a server.
@@ -117,6 +120,7 @@ async def create_server(
117120
:param zone: Zone to target. If none is passed will use default zone from the config.
118121
:param name: Create a server with this given name.
119122
:param project_id: Create a server in the given project ID.
123+
:param os_id: Create a server & install the given os_id, when no os_id provided the default OS for this server type is chosen. Requesting a non-default OS will induce an extended delivery time.
120124
:return: :class:`Server <Server>`
121125
122126
Usage:
@@ -138,6 +142,7 @@ async def create_server(
138142
zone=zone,
139143
name=name or random_name(prefix="as"),
140144
project_id=project_id,
145+
os_id=os_id,
141146
),
142147
self.client,
143148
),
@@ -522,12 +527,14 @@ async def reinstall_server(
522527
*,
523528
server_id: str,
524529
zone: Optional[Zone] = None,
530+
os_id: Optional[str] = None,
525531
) -> Server:
526532
"""
527533
Reinstall a server.
528534
Reinstall an existing Apple silicon server (specified by its server ID) from a new image (OS). All the data on the disk is deleted and all configuration is reset to the defailt configuration values of the image (OS).
529535
:param server_id: UUID of the server you want to reinstall.
530536
:param zone: Zone to target. If none is passed will use default zone from the config.
537+
:param os_id: Reinstall the server with the target OS, when no os_id provided the default OS for the server type is used.
531538
:return: :class:`Server <Server>`
532539
533540
Usage:
@@ -544,7 +551,14 @@ async def reinstall_server(
544551
res = self._request(
545552
"POST",
546553
f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/reinstall",
547-
body={},
554+
body=marshal_ReinstallServerRequest(
555+
ReinstallServerRequest(
556+
server_id=server_id,
557+
zone=zone,
558+
os_id=os_id,
559+
),
560+
self.client,
561+
),
548562
)
549563

550564
self._throw_on_error(res)

scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
ListServerTypesResponse,
1717
ListServersResponse,
1818
CreateServerRequest,
19+
ReinstallServerRequest,
1920
UpdateServerRequest,
2021
)
2122

@@ -44,6 +45,22 @@ def unmarshal_OS(data: Any) -> OS:
4445
if field is not None:
4546
args["image_url"] = field
4647

48+
field = data.get("family", None)
49+
if field is not None:
50+
args["family"] = field
51+
52+
field = data.get("is_beta", None)
53+
if field is not None:
54+
args["is_beta"] = field
55+
56+
field = data.get("version", None)
57+
if field is not None:
58+
args["version"] = field
59+
60+
field = data.get("xcode_version", None)
61+
if field is not None:
62+
args["xcode_version"] = field
63+
4764
field = data.get("compatible_server_types", None)
4865
if field is not None:
4966
args["compatible_server_types"] = field
@@ -148,6 +165,12 @@ def unmarshal_ServerType(data: Any) -> ServerType:
148165
else:
149166
args["minimum_lease_duration"] = None
150167

168+
field = data.get("default_os", None)
169+
if field is not None:
170+
args["default_os"] = unmarshal_OS(field)
171+
else:
172+
args["default_os"] = None
173+
151174
return ServerType(**args)
152175

153176

@@ -195,6 +218,12 @@ def unmarshal_Server(data: Any) -> Server:
195218
if field is not None:
196219
args["zone"] = field
197220

221+
field = data.get("os", None)
222+
if field is not None:
223+
args["os"] = unmarshal_OS(field)
224+
else:
225+
args["os"] = None
226+
198227
field = data.get("created_at", None)
199228
if field is not None:
200229
args["created_at"] = parser.isoparse(field) if isinstance(field, str) else field
@@ -290,6 +319,21 @@ def marshal_CreateServerRequest(
290319
if request.project_id is not None:
291320
output["project_id"] = request.project_id or defaults.default_project_id
292321

322+
if request.os_id is not None:
323+
output["os_id"] = request.os_id
324+
325+
return output
326+
327+
328+
def marshal_ReinstallServerRequest(
329+
request: ReinstallServerRequest,
330+
defaults: ProfileDefaults,
331+
) -> Dict[str, Any]:
332+
output: Dict[str, Any] = {}
333+
334+
if request.os_id is not None:
335+
output["os_id"] = request.os_id
336+
293337
return output
294338

295339

scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py

Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,6 @@ def __str__(self) -> str:
4949
return str(self.value)
5050

5151

52-
@dataclass
53-
class ServerTypeCPU:
54-
name: str
55-
56-
core_count: int
57-
58-
59-
@dataclass
60-
class ServerTypeDisk:
61-
capacity: int
62-
63-
type_: str
64-
65-
66-
@dataclass
67-
class ServerTypeMemory:
68-
capacity: int
69-
70-
type_: str
71-
72-
7352
@dataclass
7453
class OS:
7554
id: str
@@ -92,12 +71,53 @@ class OS:
9271
URL of the image.
9372
"""
9473

74+
family: str
75+
"""
76+
The OS family to which this OS belongs, eg. 13 or 14.
77+
"""
78+
79+
is_beta: bool
80+
"""
81+
Describes if the OS is in beta.
82+
"""
83+
84+
version: str
85+
"""
86+
The OS version number, eg. Sonoma has version number 14.3.
87+
"""
88+
89+
xcode_version: str
90+
"""
91+
The current xcode version for this OS.
92+
"""
93+
9594
compatible_server_types: List[str]
9695
"""
9796
List of compatible server types.
9897
"""
9998

10099

100+
@dataclass
101+
class ServerTypeCPU:
102+
name: str
103+
104+
core_count: int
105+
106+
107+
@dataclass
108+
class ServerTypeDisk:
109+
capacity: int
110+
111+
type_: str
112+
113+
114+
@dataclass
115+
class ServerTypeMemory:
116+
capacity: int
117+
118+
type_: str
119+
120+
101121
@dataclass
102122
class ServerType:
103123
name: str
@@ -130,6 +150,11 @@ class ServerType:
130150
Minimum duration of the lease in seconds (example. 3.4s).
131151
"""
132152

153+
default_os: Optional[OS]
154+
"""
155+
The default OS for this server type.
156+
"""
157+
133158

134159
@dataclass
135160
class Server:
@@ -178,6 +203,11 @@ class Server:
178203
Zone of the server.
179204
"""
180205

206+
os: Optional[OS]
207+
"""
208+
Initially installed OS, this does not necessarily reflect the current OS version.
209+
"""
210+
181211
created_at: Optional[datetime]
182212
"""
183213
Date on which the server was created.
@@ -216,6 +246,11 @@ class CreateServerRequest:
216246
Create a server in the given project ID.
217247
"""
218248

249+
os_id: Optional[str]
250+
"""
251+
Create a server & install the given os_id, when no os_id provided the default OS for this server type is chosen. Requesting a non-default OS will induce an extended delivery time.
252+
"""
253+
219254

220255
@dataclass
221256
class DeleteServerRequest:
@@ -397,6 +432,11 @@ class ReinstallServerRequest:
397432
Zone to target. If none is passed will use default zone from the config.
398433
"""
399434

435+
os_id: Optional[str]
436+
"""
437+
Reinstall the server with the target OS, when no os_id provided the default OS for the server type is used.
438+
"""
439+
400440

401441
@dataclass
402442
class UpdateServerRequest:

scaleway/scaleway/applesilicon/v1alpha1/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from .types import ServerStatus
55
from .content import SERVER_TRANSIENT_STATUSES
66
from .types import ServerTypeStock
7+
from .types import OS
78
from .types import ServerTypeCPU
89
from .types import ServerTypeDisk
910
from .types import ServerTypeMemory
10-
from .types import OS
1111
from .types import ServerType
1212
from .types import Server
1313
from .types import CreateServerRequest
@@ -31,10 +31,10 @@
3131
"ServerStatus",
3232
"SERVER_TRANSIENT_STATUSES",
3333
"ServerTypeStock",
34+
"OS",
3435
"ServerTypeCPU",
3536
"ServerTypeDisk",
3637
"ServerTypeMemory",
37-
"OS",
3838
"ServerType",
3939
"Server",
4040
"CreateServerRequest",

scaleway/scaleway/applesilicon/v1alpha1/api.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
ListServerTypesResponse,
2222
ListServersResponse,
2323
OS,
24+
ReinstallServerRequest,
2425
Server,
2526
ServerType,
2627
UpdateServerRequest,
@@ -36,6 +37,7 @@
3637
unmarshal_ListServerTypesResponse,
3738
unmarshal_ListServersResponse,
3839
marshal_CreateServerRequest,
40+
marshal_ReinstallServerRequest,
3941
marshal_UpdateServerRequest,
4042
)
4143

@@ -109,6 +111,7 @@ def create_server(
109111
zone: Optional[Zone] = None,
110112
name: Optional[str] = None,
111113
project_id: Optional[str] = None,
114+
os_id: Optional[str] = None,
112115
) -> Server:
113116
"""
114117
Create a server.
@@ -117,6 +120,7 @@ def create_server(
117120
:param zone: Zone to target. If none is passed will use default zone from the config.
118121
:param name: Create a server with this given name.
119122
:param project_id: Create a server in the given project ID.
123+
:param os_id: Create a server & install the given os_id, when no os_id provided the default OS for this server type is chosen. Requesting a non-default OS will induce an extended delivery time.
120124
:return: :class:`Server <Server>`
121125
122126
Usage:
@@ -138,6 +142,7 @@ def create_server(
138142
zone=zone,
139143
name=name or random_name(prefix="as"),
140144
project_id=project_id,
145+
os_id=os_id,
141146
),
142147
self.client,
143148
),
@@ -522,12 +527,14 @@ def reinstall_server(
522527
*,
523528
server_id: str,
524529
zone: Optional[Zone] = None,
530+
os_id: Optional[str] = None,
525531
) -> Server:
526532
"""
527533
Reinstall a server.
528534
Reinstall an existing Apple silicon server (specified by its server ID) from a new image (OS). All the data on the disk is deleted and all configuration is reset to the defailt configuration values of the image (OS).
529535
:param server_id: UUID of the server you want to reinstall.
530536
:param zone: Zone to target. If none is passed will use default zone from the config.
537+
:param os_id: Reinstall the server with the target OS, when no os_id provided the default OS for the server type is used.
531538
:return: :class:`Server <Server>`
532539
533540
Usage:
@@ -544,7 +551,14 @@ def reinstall_server(
544551
res = self._request(
545552
"POST",
546553
f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/reinstall",
547-
body={},
554+
body=marshal_ReinstallServerRequest(
555+
ReinstallServerRequest(
556+
server_id=server_id,
557+
zone=zone,
558+
os_id=os_id,
559+
),
560+
self.client,
561+
),
548562
)
549563

550564
self._throw_on_error(res)

0 commit comments

Comments
 (0)