diff --git a/scaleway-async/scaleway_async/instance/v1/__init__.py b/scaleway-async/scaleway_async/instance/v1/__init__.py index a1bdc97a..05aba600 100644 --- a/scaleway-async/scaleway_async/instance/v1/__init__.py +++ b/scaleway-async/scaleway_async/instance/v1/__init__.py @@ -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 @@ -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 @@ -277,6 +281,8 @@ "VolumeImageUpdateTemplate", "SecurityGroupTemplate", "ApplyBlockMigrationRequest", + "AttachServerFileSystemRequest", + "AttachServerFileSystemResponse", "AttachServerVolumeRequest", "AttachServerVolumeResponse", "CheckBlockMigrationOrganizationQuotasRequest", @@ -308,6 +314,8 @@ "DeleteServerUserDataRequest", "DeleteSnapshotRequest", "DeleteVolumeRequest", + "DetachServerFileSystemRequest", + "DetachServerFileSystemResponse", "DetachServerVolumeRequest", "DetachServerVolumeResponse", "ExportSnapshotRequest", diff --git a/scaleway-async/scaleway_async/instance/v1/api.py b/scaleway-async/scaleway_async/instance/v1/api.py index c5a68706..2a49867d 100644 --- a/scaleway-async/scaleway_async/instance/v1/api.py +++ b/scaleway-async/scaleway_async/instance/v1/api.py @@ -43,6 +43,8 @@ SnapshotVolumeType, VolumeVolumeType, ApplyBlockMigrationRequest, + AttachServerFileSystemRequest, + AttachServerFileSystemResponse, AttachServerVolumeRequest, AttachServerVolumeResponse, Bootscript, @@ -65,6 +67,8 @@ CreateSnapshotResponse, CreateVolumeRequest, CreateVolumeResponse, + DetachServerFileSystemRequest, + DetachServerFileSystemResponse, DetachServerVolumeRequest, DetachServerVolumeResponse, ExportSnapshotRequest, @@ -151,6 +155,7 @@ ) from .marshalling import ( unmarshal_PrivateNIC, + unmarshal_AttachServerFileSystemResponse, unmarshal_AttachServerVolumeResponse, unmarshal_CreateImageResponse, unmarshal_CreateIpResponse, @@ -161,6 +166,7 @@ unmarshal_CreateServerResponse, unmarshal_CreateSnapshotResponse, unmarshal_CreateVolumeResponse, + unmarshal_DetachServerFileSystemResponse, unmarshal_DetachServerVolumeResponse, unmarshal_ExportSnapshotResponse, unmarshal_GetDashboardResponse, @@ -209,6 +215,7 @@ unmarshal__SetServerResponse, unmarshal__SetSnapshotResponse, marshal_ApplyBlockMigrationRequest, + marshal_AttachServerFileSystemRequest, marshal_AttachServerVolumeRequest, marshal_CheckBlockMigrationOrganizationQuotasRequest, marshal_CreateImageRequest, @@ -220,6 +227,7 @@ marshal_CreateServerRequest, marshal_CreateSnapshotRequest, marshal_CreateVolumeRequest, + marshal_DetachServerFileSystemRequest, marshal_DetachServerVolumeRequest, marshal_ExportSnapshotRequest, marshal_PlanBlockMigrationRequest, @@ -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 ` + + 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 ` + + 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, *, diff --git a/scaleway-async/scaleway_async/instance/v1/marshalling.py b/scaleway-async/scaleway_async/instance/v1/marshalling.py index 483f73ba..86c38fc2 100644 --- a/scaleway-async/scaleway_async/instance/v1/marshalling.py +++ b/scaleway-async/scaleway_async/instance/v1/marshalling.py @@ -37,6 +37,7 @@ ServerMaintenance, VolumeServer, Server, + AttachServerFileSystemResponse, AttachServerVolumeResponse, CreateImageResponse, Ip, @@ -53,6 +54,7 @@ Task, CreateSnapshotResponse, CreateVolumeResponse, + DetachServerFileSystemResponse, DetachServerVolumeResponse, ExportSnapshotResponse, Dashboard, @@ -109,6 +111,7 @@ UpdateSnapshotResponse, UpdateVolumeResponse, ApplyBlockMigrationRequest, + AttachServerFileSystemRequest, AttachServerVolumeRequest, CheckBlockMigrationOrganizationQuotasRequest, VolumeTemplate, @@ -122,6 +125,7 @@ CreateServerRequest, CreateSnapshotRequest, CreateVolumeRequest, + DetachServerFileSystemRequest, DetachServerVolumeRequest, ExportSnapshotRequest, PlanBlockMigrationRequest, @@ -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( @@ -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( @@ -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, @@ -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, diff --git a/scaleway-async/scaleway_async/instance/v1/types.py b/scaleway-async/scaleway_async/instance/v1/types.py index 41148781..fb8865a7 100644 --- a/scaleway-async/scaleway_async/instance/v1/types.py +++ b/scaleway-async/scaleway_async/instance/v1/types.py @@ -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 @@ -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 diff --git a/scaleway/scaleway/instance/v1/__init__.py b/scaleway/scaleway/instance/v1/__init__.py index a1bdc97a..05aba600 100644 --- a/scaleway/scaleway/instance/v1/__init__.py +++ b/scaleway/scaleway/instance/v1/__init__.py @@ -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 @@ -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 @@ -277,6 +281,8 @@ "VolumeImageUpdateTemplate", "SecurityGroupTemplate", "ApplyBlockMigrationRequest", + "AttachServerFileSystemRequest", + "AttachServerFileSystemResponse", "AttachServerVolumeRequest", "AttachServerVolumeResponse", "CheckBlockMigrationOrganizationQuotasRequest", @@ -308,6 +314,8 @@ "DeleteServerUserDataRequest", "DeleteSnapshotRequest", "DeleteVolumeRequest", + "DetachServerFileSystemRequest", + "DetachServerFileSystemResponse", "DetachServerVolumeRequest", "DetachServerVolumeResponse", "ExportSnapshotRequest", diff --git a/scaleway/scaleway/instance/v1/api.py b/scaleway/scaleway/instance/v1/api.py index 7e559de7..f0c8ca3d 100644 --- a/scaleway/scaleway/instance/v1/api.py +++ b/scaleway/scaleway/instance/v1/api.py @@ -43,6 +43,8 @@ SnapshotVolumeType, VolumeVolumeType, ApplyBlockMigrationRequest, + AttachServerFileSystemRequest, + AttachServerFileSystemResponse, AttachServerVolumeRequest, AttachServerVolumeResponse, Bootscript, @@ -65,6 +67,8 @@ CreateSnapshotResponse, CreateVolumeRequest, CreateVolumeResponse, + DetachServerFileSystemRequest, + DetachServerFileSystemResponse, DetachServerVolumeRequest, DetachServerVolumeResponse, ExportSnapshotRequest, @@ -151,6 +155,7 @@ ) from .marshalling import ( unmarshal_PrivateNIC, + unmarshal_AttachServerFileSystemResponse, unmarshal_AttachServerVolumeResponse, unmarshal_CreateImageResponse, unmarshal_CreateIpResponse, @@ -161,6 +166,7 @@ unmarshal_CreateServerResponse, unmarshal_CreateSnapshotResponse, unmarshal_CreateVolumeResponse, + unmarshal_DetachServerFileSystemResponse, unmarshal_DetachServerVolumeResponse, unmarshal_ExportSnapshotResponse, unmarshal_GetDashboardResponse, @@ -209,6 +215,7 @@ unmarshal__SetServerResponse, unmarshal__SetSnapshotResponse, marshal_ApplyBlockMigrationRequest, + marshal_AttachServerFileSystemRequest, marshal_AttachServerVolumeRequest, marshal_CheckBlockMigrationOrganizationQuotasRequest, marshal_CreateImageRequest, @@ -220,6 +227,7 @@ marshal_CreateServerRequest, marshal_CreateSnapshotRequest, marshal_CreateVolumeRequest, + marshal_DetachServerFileSystemRequest, marshal_DetachServerVolumeRequest, marshal_ExportSnapshotRequest, marshal_PlanBlockMigrationRequest, @@ -1167,6 +1175,90 @@ def detach_server_volume( self._throw_on_error(res) return unmarshal_DetachServerVolumeResponse(res.json()) + 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 ` + + Usage: + :: + + result = 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()) + + 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 ` + + Usage: + :: + + result = 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()) + def list_images( self, *, diff --git a/scaleway/scaleway/instance/v1/marshalling.py b/scaleway/scaleway/instance/v1/marshalling.py index 483f73ba..86c38fc2 100644 --- a/scaleway/scaleway/instance/v1/marshalling.py +++ b/scaleway/scaleway/instance/v1/marshalling.py @@ -37,6 +37,7 @@ ServerMaintenance, VolumeServer, Server, + AttachServerFileSystemResponse, AttachServerVolumeResponse, CreateImageResponse, Ip, @@ -53,6 +54,7 @@ Task, CreateSnapshotResponse, CreateVolumeResponse, + DetachServerFileSystemResponse, DetachServerVolumeResponse, ExportSnapshotResponse, Dashboard, @@ -109,6 +111,7 @@ UpdateSnapshotResponse, UpdateVolumeResponse, ApplyBlockMigrationRequest, + AttachServerFileSystemRequest, AttachServerVolumeRequest, CheckBlockMigrationOrganizationQuotasRequest, VolumeTemplate, @@ -122,6 +125,7 @@ CreateServerRequest, CreateSnapshotRequest, CreateVolumeRequest, + DetachServerFileSystemRequest, DetachServerVolumeRequest, ExportSnapshotRequest, PlanBlockMigrationRequest, @@ -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( @@ -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( @@ -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, @@ -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, diff --git a/scaleway/scaleway/instance/v1/types.py b/scaleway/scaleway/instance/v1/types.py index 41148781..fb8865a7 100644 --- a/scaleway/scaleway/instance/v1/types.py +++ b/scaleway/scaleway/instance/v1/types.py @@ -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 @@ -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