Skip to content

fix(instance): activate attach/detach filesystems in the sdk #962

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions scaleway-async/scaleway_async/instance/v1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@
from .types import VolumeImageUpdateTemplate
from .types import SecurityGroupTemplate
from .types import ApplyBlockMigrationRequest
from .types import AttachServerFileSystemRequest
from .types import AttachServerFileSystemResponse
from .types import AttachServerVolumeRequest
from .types import AttachServerVolumeResponse
from .types import CheckBlockMigrationOrganizationQuotasRequest
Expand Down Expand Up @@ -109,6 +111,8 @@
from .types import DeleteServerUserDataRequest
from .types import DeleteSnapshotRequest
from .types import DeleteVolumeRequest
from .types import DetachServerFileSystemRequest
from .types import DetachServerFileSystemResponse
from .types import DetachServerVolumeRequest
from .types import DetachServerVolumeResponse
from .types import ExportSnapshotRequest
Expand Down Expand Up @@ -277,6 +281,8 @@
"VolumeImageUpdateTemplate",
"SecurityGroupTemplate",
"ApplyBlockMigrationRequest",
"AttachServerFileSystemRequest",
"AttachServerFileSystemResponse",
"AttachServerVolumeRequest",
"AttachServerVolumeResponse",
"CheckBlockMigrationOrganizationQuotasRequest",
Expand Down Expand Up @@ -308,6 +314,8 @@
"DeleteServerUserDataRequest",
"DeleteSnapshotRequest",
"DeleteVolumeRequest",
"DetachServerFileSystemRequest",
"DetachServerFileSystemResponse",
"DetachServerVolumeRequest",
"DetachServerVolumeResponse",
"ExportSnapshotRequest",
Expand Down
92 changes: 92 additions & 0 deletions scaleway-async/scaleway_async/instance/v1/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
SnapshotVolumeType,
VolumeVolumeType,
ApplyBlockMigrationRequest,
AttachServerFileSystemRequest,
AttachServerFileSystemResponse,
AttachServerVolumeRequest,
AttachServerVolumeResponse,
Bootscript,
Expand All @@ -65,6 +67,8 @@
CreateSnapshotResponse,
CreateVolumeRequest,
CreateVolumeResponse,
DetachServerFileSystemRequest,
DetachServerFileSystemResponse,
DetachServerVolumeRequest,
DetachServerVolumeResponse,
ExportSnapshotRequest,
Expand Down Expand Up @@ -151,6 +155,7 @@
)
from .marshalling import (
unmarshal_PrivateNIC,
unmarshal_AttachServerFileSystemResponse,
unmarshal_AttachServerVolumeResponse,
unmarshal_CreateImageResponse,
unmarshal_CreateIpResponse,
Expand All @@ -161,6 +166,7 @@
unmarshal_CreateServerResponse,
unmarshal_CreateSnapshotResponse,
unmarshal_CreateVolumeResponse,
unmarshal_DetachServerFileSystemResponse,
unmarshal_DetachServerVolumeResponse,
unmarshal_ExportSnapshotResponse,
unmarshal_GetDashboardResponse,
Expand Down Expand Up @@ -209,6 +215,7 @@
unmarshal__SetServerResponse,
unmarshal__SetSnapshotResponse,
marshal_ApplyBlockMigrationRequest,
marshal_AttachServerFileSystemRequest,
marshal_AttachServerVolumeRequest,
marshal_CheckBlockMigrationOrganizationQuotasRequest,
marshal_CreateImageRequest,
Expand All @@ -220,6 +227,7 @@
marshal_CreateServerRequest,
marshal_CreateSnapshotRequest,
marshal_CreateVolumeRequest,
marshal_DetachServerFileSystemRequest,
marshal_DetachServerVolumeRequest,
marshal_ExportSnapshotRequest,
marshal_PlanBlockMigrationRequest,
Expand Down Expand Up @@ -1167,6 +1175,90 @@ async def detach_server_volume(
self._throw_on_error(res)
return unmarshal_DetachServerVolumeResponse(res.json())

async def attach_server_file_system(
self,
*,
server_id: str,
filesystem_id: str,
zone: Optional[ScwZone] = None,
) -> AttachServerFileSystemResponse:
"""
Attach a filesystem volume to an Instance.
:param server_id:
:param filesystem_id:
:param zone: Zone to target. If none is passed will use default zone from the config.
:return: :class:`AttachServerFileSystemResponse <AttachServerFileSystemResponse>`

Usage:
::

result = await api.attach_server_file_system(
server_id="example",
filesystem_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"/instance/v1/zones/{param_zone}/servers/{param_server_id}/attach-filesystem",
body=marshal_AttachServerFileSystemRequest(
AttachServerFileSystemRequest(
server_id=server_id,
filesystem_id=filesystem_id,
zone=zone,
),
self.client,
),
)

self._throw_on_error(res)
return unmarshal_AttachServerFileSystemResponse(res.json())

async def detach_server_file_system(
self,
*,
server_id: str,
filesystem_id: str,
zone: Optional[ScwZone] = None,
) -> DetachServerFileSystemResponse:
"""
Detach a filesystem volume to an Instance.
:param server_id:
:param filesystem_id:
:param zone: Zone to target. If none is passed will use default zone from the config.
:return: :class:`DetachServerFileSystemResponse <DetachServerFileSystemResponse>`

Usage:
::

result = await api.detach_server_file_system(
server_id="example",
filesystem_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"/instance/v1/zones/{param_zone}/servers/{param_server_id}/detach-filesystem",
body=marshal_DetachServerFileSystemRequest(
DetachServerFileSystemRequest(
server_id=server_id,
filesystem_id=filesystem_id,
zone=zone,
),
self.client,
),
)

self._throw_on_error(res)
return unmarshal_DetachServerFileSystemResponse(res.json())

async def list_images(
self,
*,
Expand Down
66 changes: 66 additions & 0 deletions scaleway-async/scaleway_async/instance/v1/marshalling.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
ServerMaintenance,
VolumeServer,
Server,
AttachServerFileSystemResponse,
AttachServerVolumeResponse,
CreateImageResponse,
Ip,
Expand All @@ -53,6 +54,7 @@
Task,
CreateSnapshotResponse,
CreateVolumeResponse,
DetachServerFileSystemResponse,
DetachServerVolumeResponse,
ExportSnapshotResponse,
Dashboard,
Expand Down Expand Up @@ -109,6 +111,7 @@
UpdateSnapshotResponse,
UpdateVolumeResponse,
ApplyBlockMigrationRequest,
AttachServerFileSystemRequest,
AttachServerVolumeRequest,
CheckBlockMigrationOrganizationQuotasRequest,
VolumeTemplate,
Expand All @@ -122,6 +125,7 @@
CreateServerRequest,
CreateSnapshotRequest,
CreateVolumeRequest,
DetachServerFileSystemRequest,
DetachServerVolumeRequest,
ExportSnapshotRequest,
PlanBlockMigrationRequest,
Expand Down Expand Up @@ -917,6 +921,25 @@ def unmarshal_Server(data: Any) -> Server:
return Server(**args)


def unmarshal_AttachServerFileSystemResponse(
data: Any,
) -> AttachServerFileSystemResponse:
if not isinstance(data, dict):
raise TypeError(
"Unmarshalling the type 'AttachServerFileSystemResponse' failed as data isn't a dictionary."
)

args: Dict[str, Any] = {}

field = data.get("server", None)
if field is not None:
args["server"] = unmarshal_Server(field)
else:
args["server"] = None

return AttachServerFileSystemResponse(**args)


def unmarshal_AttachServerVolumeResponse(data: Any) -> AttachServerVolumeResponse:
if not isinstance(data, dict):
raise TypeError(
Expand Down Expand Up @@ -1451,6 +1474,25 @@ def unmarshal_CreateVolumeResponse(data: Any) -> CreateVolumeResponse:
return CreateVolumeResponse(**args)


def unmarshal_DetachServerFileSystemResponse(
data: Any,
) -> DetachServerFileSystemResponse:
if not isinstance(data, dict):
raise TypeError(
"Unmarshalling the type 'DetachServerFileSystemResponse' failed as data isn't a dictionary."
)

args: Dict[str, Any] = {}

field = data.get("server", None)
if field is not None:
args["server"] = unmarshal_Server(field)
else:
args["server"] = None

return DetachServerFileSystemResponse(**args)


def unmarshal_DetachServerVolumeResponse(data: Any) -> DetachServerVolumeResponse:
if not isinstance(data, dict):
raise TypeError(
Expand Down Expand Up @@ -2766,6 +2808,18 @@ def marshal_ApplyBlockMigrationRequest(
return output


def marshal_AttachServerFileSystemRequest(
request: AttachServerFileSystemRequest,
defaults: ProfileDefaults,
) -> Dict[str, Any]:
output: Dict[str, Any] = {}

if request.filesystem_id is not None:
output["filesystem_id"] = request.filesystem_id

return output


def marshal_AttachServerVolumeRequest(
request: AttachServerVolumeRequest,
defaults: ProfileDefaults,
Expand Down Expand Up @@ -3240,6 +3294,18 @@ def marshal_CreateVolumeRequest(
return output


def marshal_DetachServerFileSystemRequest(
request: DetachServerFileSystemRequest,
defaults: ProfileDefaults,
) -> Dict[str, Any]:
output: Dict[str, Any] = {}

if request.filesystem_id is not None:
output["filesystem_id"] = request.filesystem_id

return output


def marshal_DetachServerVolumeRequest(
request: DetachServerVolumeRequest,
defaults: ProfileDefaults,
Expand Down
34 changes: 34 additions & 0 deletions scaleway-async/scaleway_async/instance/v1/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -1514,6 +1514,23 @@ class ApplyBlockMigrationRequest:
snapshot_id: Optional[str]


@dataclass
class AttachServerFileSystemRequest:
server_id: str

filesystem_id: str

zone: Optional[ScwZone]
"""
Zone to target. If none is passed will use default zone from the config.
"""


@dataclass
class AttachServerFileSystemResponse:
server: Optional[Server]


@dataclass
class AttachServerVolumeRequest:
server_id: str
Expand Down Expand Up @@ -2120,6 +2137,23 @@ class DeleteVolumeRequest:
"""


@dataclass
class DetachServerFileSystemRequest:
server_id: str

filesystem_id: str

zone: Optional[ScwZone]
"""
Zone to target. If none is passed will use default zone from the config.
"""


@dataclass
class DetachServerFileSystemResponse:
server: Optional[Server]


@dataclass
class DetachServerVolumeRequest:
server_id: str
Expand Down
8 changes: 8 additions & 0 deletions scaleway/scaleway/instance/v1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@
from .types import VolumeImageUpdateTemplate
from .types import SecurityGroupTemplate
from .types import ApplyBlockMigrationRequest
from .types import AttachServerFileSystemRequest
from .types import AttachServerFileSystemResponse
from .types import AttachServerVolumeRequest
from .types import AttachServerVolumeResponse
from .types import CheckBlockMigrationOrganizationQuotasRequest
Expand Down Expand Up @@ -109,6 +111,8 @@
from .types import DeleteServerUserDataRequest
from .types import DeleteSnapshotRequest
from .types import DeleteVolumeRequest
from .types import DetachServerFileSystemRequest
from .types import DetachServerFileSystemResponse
from .types import DetachServerVolumeRequest
from .types import DetachServerVolumeResponse
from .types import ExportSnapshotRequest
Expand Down Expand Up @@ -277,6 +281,8 @@
"VolumeImageUpdateTemplate",
"SecurityGroupTemplate",
"ApplyBlockMigrationRequest",
"AttachServerFileSystemRequest",
"AttachServerFileSystemResponse",
"AttachServerVolumeRequest",
"AttachServerVolumeResponse",
"CheckBlockMigrationOrganizationQuotasRequest",
Expand Down Expand Up @@ -308,6 +314,8 @@
"DeleteServerUserDataRequest",
"DeleteSnapshotRequest",
"DeleteVolumeRequest",
"DetachServerFileSystemRequest",
"DetachServerFileSystemResponse",
"DetachServerVolumeRequest",
"DetachServerVolumeResponse",
"ExportSnapshotRequest",
Expand Down
Loading