diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py index 49b832145..55d659e89 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py @@ -1,5 +1,7 @@ # This file was automatically generated. DO NOT EDIT. # If you have any remark or suggestion do not hesitate to open an issue. +from .types import ConnectivityDiagnosticActionType +from .types import ConnectivityDiagnosticDiagnosticStatus from .types import ListServersRequestOrderBy from .types import ServerStatus from .content import SERVER_TRANSIENT_STATUSES @@ -10,10 +12,13 @@ from .types import ServerTypeGPU from .types import ServerTypeMemory from .types import ServerTypeNetwork +from .types import ConnectivityDiagnosticServerHealth from .types import ServerType from .types import Server +from .types import ConnectivityDiagnostic from .types import CreateServerRequest from .types import DeleteServerRequest +from .types import GetConnectivityDiagnosticRequest from .types import GetOSRequest from .types import GetServerRequest from .types import GetServerTypeRequest @@ -25,10 +30,14 @@ from .types import ListServersResponse from .types import RebootServerRequest from .types import ReinstallServerRequest +from .types import StartConnectivityDiagnosticRequest +from .types import StartConnectivityDiagnosticResponse from .types import UpdateServerRequest from .api import ApplesiliconV1Alpha1API __all__ = [ + "ConnectivityDiagnosticActionType", + "ConnectivityDiagnosticDiagnosticStatus", "ListServersRequestOrderBy", "ServerStatus", "SERVER_TRANSIENT_STATUSES", @@ -39,10 +48,13 @@ "ServerTypeGPU", "ServerTypeMemory", "ServerTypeNetwork", + "ConnectivityDiagnosticServerHealth", "ServerType", "Server", + "ConnectivityDiagnostic", "CreateServerRequest", "DeleteServerRequest", + "GetConnectivityDiagnosticRequest", "GetOSRequest", "GetServerRequest", "GetServerTypeRequest", @@ -54,6 +66,8 @@ "ListServersResponse", "RebootServerRequest", "ReinstallServerRequest", + "StartConnectivityDiagnosticRequest", + "StartConnectivityDiagnosticResponse", "UpdateServerRequest", "ApplesiliconV1Alpha1API", ] diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py index 5e3272715..a05f9b8b3 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py @@ -16,6 +16,7 @@ ) from .types import ( ListServersRequestOrderBy, + ConnectivityDiagnostic, CreateServerRequest, ListOSResponse, ListServerTypesResponse, @@ -24,6 +25,8 @@ ReinstallServerRequest, Server, ServerType, + StartConnectivityDiagnosticRequest, + StartConnectivityDiagnosticResponse, UpdateServerRequest, ) from .content import ( @@ -33,11 +36,14 @@ unmarshal_OS, unmarshal_ServerType, unmarshal_Server, + unmarshal_ConnectivityDiagnostic, unmarshal_ListOSResponse, unmarshal_ListServerTypesResponse, unmarshal_ListServersResponse, + unmarshal_StartConnectivityDiagnosticResponse, marshal_CreateServerRequest, marshal_ReinstallServerRequest, + marshal_StartConnectivityDiagnosticRequest, marshal_UpdateServerRequest, ) @@ -568,3 +574,69 @@ async def reinstall_server( self._throw_on_error(res) return unmarshal_Server(res.json()) + + async def start_connectivity_diagnostic( + self, + *, + server_id: str, + zone: Optional[Zone] = None, + ) -> StartConnectivityDiagnosticResponse: + """ + :param server_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`StartConnectivityDiagnosticResponse ` + + Usage: + :: + + result = await api.start_connectivity_diagnostic( + server_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + + res = self._request( + "POST", + f"/apple-silicon/v1alpha1/zones/{param_zone}/connectivity-diagnostics", + body=marshal_StartConnectivityDiagnosticRequest( + StartConnectivityDiagnosticRequest( + server_id=server_id, + zone=zone, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_StartConnectivityDiagnosticResponse(res.json()) + + async def get_connectivity_diagnostic( + self, + *, + diagnostic_id: str, + zone: Optional[Zone] = None, + ) -> ConnectivityDiagnostic: + """ + :param diagnostic_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`ConnectivityDiagnostic ` + + Usage: + :: + + result = await api.get_connectivity_diagnostic( + diagnostic_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_diagnostic_id = validate_path_param("diagnostic_id", diagnostic_id) + + res = self._request( + "GET", + f"/apple-silicon/v1alpha1/zones/{param_zone}/connectivity-diagnostics/{param_diagnostic_id}", + ) + + self._throw_on_error(res) + return unmarshal_ConnectivityDiagnostic(res.json()) diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py index b057db698..2d7ac679c 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py @@ -6,6 +6,7 @@ from scaleway_core.profile import ProfileDefaults from .types import ( + ConnectivityDiagnosticActionType, OS, ServerTypeCPU, ServerTypeDisk, @@ -14,11 +15,15 @@ ServerTypeNetwork, ServerType, Server, + ConnectivityDiagnosticServerHealth, + ConnectivityDiagnostic, ListOSResponse, ListServerTypesResponse, ListServersResponse, + StartConnectivityDiagnosticResponse, CreateServerRequest, ReinstallServerRequest, + StartConnectivityDiagnosticRequest, UpdateServerRequest, ) @@ -315,6 +320,88 @@ def unmarshal_Server(data: Any) -> Server: return Server(**args) +def unmarshal_ConnectivityDiagnosticServerHealth( + data: Any, +) -> ConnectivityDiagnosticServerHealth: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ConnectivityDiagnosticServerHealth' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("is_server_alive", None) + if field is not None: + args["is_server_alive"] = field + + field = data.get("is_agent_alive", None) + if field is not None: + args["is_agent_alive"] = field + + field = data.get("is_mdm_alive", None) + if field is not None: + args["is_mdm_alive"] = field + + field = data.get("is_ssh_port_up", None) + if field is not None: + args["is_ssh_port_up"] = field + + field = data.get("is_vnc_port_up", None) + if field is not None: + args["is_vnc_port_up"] = field + + field = data.get("last_checkin_date", None) + if field is not None: + args["last_checkin_date"] = ( + parser.isoparse(field) if isinstance(field, str) else field + ) + else: + args["last_checkin_date"] = None + + return ConnectivityDiagnosticServerHealth(**args) + + +def unmarshal_ConnectivityDiagnostic(data: Any) -> ConnectivityDiagnostic: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ConnectivityDiagnostic' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("id", None) + if field is not None: + args["id"] = field + + field = data.get("status", None) + if field is not None: + args["status"] = field + + field = data.get("is_healthy", None) + if field is not None: + args["is_healthy"] = field + + field = data.get("supported_actions", None) + if field is not None: + args["supported_actions"] = ( + [ConnectivityDiagnosticActionType(v) for v in field] + if field is not None + else None + ) + + field = data.get("error_message", None) + if field is not None: + args["error_message"] = field + + field = data.get("health_details", None) + if field is not None: + args["health_details"] = unmarshal_ConnectivityDiagnosticServerHealth(field) + else: + args["health_details"] = None + + return ConnectivityDiagnostic(**args) + + def unmarshal_ListOSResponse(data: Any) -> ListOSResponse: if not isinstance(data, dict): raise TypeError( @@ -372,6 +459,23 @@ def unmarshal_ListServersResponse(data: Any) -> ListServersResponse: return ListServersResponse(**args) +def unmarshal_StartConnectivityDiagnosticResponse( + data: Any, +) -> StartConnectivityDiagnosticResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'StartConnectivityDiagnosticResponse' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("diagnostic_id", None) + if field is not None: + args["diagnostic_id"] = field + + return StartConnectivityDiagnosticResponse(**args) + + def marshal_CreateServerRequest( request: CreateServerRequest, defaults: ProfileDefaults, @@ -405,6 +509,18 @@ def marshal_ReinstallServerRequest( return output +def marshal_StartConnectivityDiagnosticRequest( + request: StartConnectivityDiagnosticRequest, + defaults: ProfileDefaults, +) -> Dict[str, Any]: + output: Dict[str, Any] = {} + + if request.server_id is not None: + output["server_id"] = request.server_id + + return output + + def marshal_UpdateServerRequest( request: UpdateServerRequest, defaults: ProfileDefaults, diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py index 1e13e4a5f..2c56907c7 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py @@ -15,6 +15,24 @@ ) +class ConnectivityDiagnosticActionType(str, Enum, metaclass=StrEnumMeta): + REBOOT_SERVER = "reboot_server" + REINSTALL_SERVER = "reinstall_server" + + def __str__(self) -> str: + return str(self.value) + + +class ConnectivityDiagnosticDiagnosticStatus(str, Enum, metaclass=StrEnumMeta): + UNKNOWN_STATUS = "unknown_status" + PROCESSING = "processing" + ERROR = "error" + COMPLETED = "completed" + + def __str__(self) -> str: + return str(self.value) + + class ListServersRequestOrderBy(str, Enum, metaclass=StrEnumMeta): CREATED_AT_ASC = "created_at_asc" CREATED_AT_DESC = "created_at_desc" @@ -130,6 +148,21 @@ class ServerTypeNetwork: public_bandwidth_bps: int +@dataclass +class ConnectivityDiagnosticServerHealth: + is_server_alive: bool + + is_agent_alive: bool + + is_mdm_alive: bool + + is_ssh_port_up: bool + + is_vnc_port_up: bool + + last_checkin_date: Optional[datetime] + + @dataclass class ServerType: name: str @@ -271,6 +304,21 @@ class Server: """ +@dataclass +class ConnectivityDiagnostic: + id: str + + status: ConnectivityDiagnosticDiagnosticStatus + + is_healthy: bool + + supported_actions: List[ConnectivityDiagnosticActionType] + + error_message: str + + health_details: Optional[ConnectivityDiagnosticServerHealth] + + @dataclass class CreateServerRequest: type_: str @@ -312,6 +360,16 @@ class DeleteServerRequest: """ +@dataclass +class GetConnectivityDiagnosticRequest: + diagnostic_id: str + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + @dataclass class GetOSRequest: os_id: str @@ -485,6 +543,21 @@ class ReinstallServerRequest: """ +@dataclass +class StartConnectivityDiagnosticRequest: + server_id: str + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + +@dataclass +class StartConnectivityDiagnosticResponse: + diagnostic_id: str + + @dataclass class UpdateServerRequest: server_id: str diff --git a/scaleway/scaleway/applesilicon/v1alpha1/__init__.py b/scaleway/scaleway/applesilicon/v1alpha1/__init__.py index 49b832145..55d659e89 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/__init__.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/__init__.py @@ -1,5 +1,7 @@ # This file was automatically generated. DO NOT EDIT. # If you have any remark or suggestion do not hesitate to open an issue. +from .types import ConnectivityDiagnosticActionType +from .types import ConnectivityDiagnosticDiagnosticStatus from .types import ListServersRequestOrderBy from .types import ServerStatus from .content import SERVER_TRANSIENT_STATUSES @@ -10,10 +12,13 @@ from .types import ServerTypeGPU from .types import ServerTypeMemory from .types import ServerTypeNetwork +from .types import ConnectivityDiagnosticServerHealth from .types import ServerType from .types import Server +from .types import ConnectivityDiagnostic from .types import CreateServerRequest from .types import DeleteServerRequest +from .types import GetConnectivityDiagnosticRequest from .types import GetOSRequest from .types import GetServerRequest from .types import GetServerTypeRequest @@ -25,10 +30,14 @@ from .types import ListServersResponse from .types import RebootServerRequest from .types import ReinstallServerRequest +from .types import StartConnectivityDiagnosticRequest +from .types import StartConnectivityDiagnosticResponse from .types import UpdateServerRequest from .api import ApplesiliconV1Alpha1API __all__ = [ + "ConnectivityDiagnosticActionType", + "ConnectivityDiagnosticDiagnosticStatus", "ListServersRequestOrderBy", "ServerStatus", "SERVER_TRANSIENT_STATUSES", @@ -39,10 +48,13 @@ "ServerTypeGPU", "ServerTypeMemory", "ServerTypeNetwork", + "ConnectivityDiagnosticServerHealth", "ServerType", "Server", + "ConnectivityDiagnostic", "CreateServerRequest", "DeleteServerRequest", + "GetConnectivityDiagnosticRequest", "GetOSRequest", "GetServerRequest", "GetServerTypeRequest", @@ -54,6 +66,8 @@ "ListServersResponse", "RebootServerRequest", "ReinstallServerRequest", + "StartConnectivityDiagnosticRequest", + "StartConnectivityDiagnosticResponse", "UpdateServerRequest", "ApplesiliconV1Alpha1API", ] diff --git a/scaleway/scaleway/applesilicon/v1alpha1/api.py b/scaleway/scaleway/applesilicon/v1alpha1/api.py index d9ac5936d..d295da15c 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/api.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/api.py @@ -16,6 +16,7 @@ ) from .types import ( ListServersRequestOrderBy, + ConnectivityDiagnostic, CreateServerRequest, ListOSResponse, ListServerTypesResponse, @@ -24,6 +25,8 @@ ReinstallServerRequest, Server, ServerType, + StartConnectivityDiagnosticRequest, + StartConnectivityDiagnosticResponse, UpdateServerRequest, ) from .content import ( @@ -33,11 +36,14 @@ unmarshal_OS, unmarshal_ServerType, unmarshal_Server, + unmarshal_ConnectivityDiagnostic, unmarshal_ListOSResponse, unmarshal_ListServerTypesResponse, unmarshal_ListServersResponse, + unmarshal_StartConnectivityDiagnosticResponse, marshal_CreateServerRequest, marshal_ReinstallServerRequest, + marshal_StartConnectivityDiagnosticRequest, marshal_UpdateServerRequest, ) @@ -568,3 +574,69 @@ def reinstall_server( self._throw_on_error(res) return unmarshal_Server(res.json()) + + def start_connectivity_diagnostic( + self, + *, + server_id: str, + zone: Optional[Zone] = None, + ) -> StartConnectivityDiagnosticResponse: + """ + :param server_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`StartConnectivityDiagnosticResponse ` + + Usage: + :: + + result = api.start_connectivity_diagnostic( + server_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + + res = self._request( + "POST", + f"/apple-silicon/v1alpha1/zones/{param_zone}/connectivity-diagnostics", + body=marshal_StartConnectivityDiagnosticRequest( + StartConnectivityDiagnosticRequest( + server_id=server_id, + zone=zone, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_StartConnectivityDiagnosticResponse(res.json()) + + def get_connectivity_diagnostic( + self, + *, + diagnostic_id: str, + zone: Optional[Zone] = None, + ) -> ConnectivityDiagnostic: + """ + :param diagnostic_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`ConnectivityDiagnostic ` + + Usage: + :: + + result = api.get_connectivity_diagnostic( + diagnostic_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_diagnostic_id = validate_path_param("diagnostic_id", diagnostic_id) + + res = self._request( + "GET", + f"/apple-silicon/v1alpha1/zones/{param_zone}/connectivity-diagnostics/{param_diagnostic_id}", + ) + + self._throw_on_error(res) + return unmarshal_ConnectivityDiagnostic(res.json()) diff --git a/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py b/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py index b057db698..2d7ac679c 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py @@ -6,6 +6,7 @@ from scaleway_core.profile import ProfileDefaults from .types import ( + ConnectivityDiagnosticActionType, OS, ServerTypeCPU, ServerTypeDisk, @@ -14,11 +15,15 @@ ServerTypeNetwork, ServerType, Server, + ConnectivityDiagnosticServerHealth, + ConnectivityDiagnostic, ListOSResponse, ListServerTypesResponse, ListServersResponse, + StartConnectivityDiagnosticResponse, CreateServerRequest, ReinstallServerRequest, + StartConnectivityDiagnosticRequest, UpdateServerRequest, ) @@ -315,6 +320,88 @@ def unmarshal_Server(data: Any) -> Server: return Server(**args) +def unmarshal_ConnectivityDiagnosticServerHealth( + data: Any, +) -> ConnectivityDiagnosticServerHealth: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ConnectivityDiagnosticServerHealth' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("is_server_alive", None) + if field is not None: + args["is_server_alive"] = field + + field = data.get("is_agent_alive", None) + if field is not None: + args["is_agent_alive"] = field + + field = data.get("is_mdm_alive", None) + if field is not None: + args["is_mdm_alive"] = field + + field = data.get("is_ssh_port_up", None) + if field is not None: + args["is_ssh_port_up"] = field + + field = data.get("is_vnc_port_up", None) + if field is not None: + args["is_vnc_port_up"] = field + + field = data.get("last_checkin_date", None) + if field is not None: + args["last_checkin_date"] = ( + parser.isoparse(field) if isinstance(field, str) else field + ) + else: + args["last_checkin_date"] = None + + return ConnectivityDiagnosticServerHealth(**args) + + +def unmarshal_ConnectivityDiagnostic(data: Any) -> ConnectivityDiagnostic: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ConnectivityDiagnostic' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("id", None) + if field is not None: + args["id"] = field + + field = data.get("status", None) + if field is not None: + args["status"] = field + + field = data.get("is_healthy", None) + if field is not None: + args["is_healthy"] = field + + field = data.get("supported_actions", None) + if field is not None: + args["supported_actions"] = ( + [ConnectivityDiagnosticActionType(v) for v in field] + if field is not None + else None + ) + + field = data.get("error_message", None) + if field is not None: + args["error_message"] = field + + field = data.get("health_details", None) + if field is not None: + args["health_details"] = unmarshal_ConnectivityDiagnosticServerHealth(field) + else: + args["health_details"] = None + + return ConnectivityDiagnostic(**args) + + def unmarshal_ListOSResponse(data: Any) -> ListOSResponse: if not isinstance(data, dict): raise TypeError( @@ -372,6 +459,23 @@ def unmarshal_ListServersResponse(data: Any) -> ListServersResponse: return ListServersResponse(**args) +def unmarshal_StartConnectivityDiagnosticResponse( + data: Any, +) -> StartConnectivityDiagnosticResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'StartConnectivityDiagnosticResponse' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("diagnostic_id", None) + if field is not None: + args["diagnostic_id"] = field + + return StartConnectivityDiagnosticResponse(**args) + + def marshal_CreateServerRequest( request: CreateServerRequest, defaults: ProfileDefaults, @@ -405,6 +509,18 @@ def marshal_ReinstallServerRequest( return output +def marshal_StartConnectivityDiagnosticRequest( + request: StartConnectivityDiagnosticRequest, + defaults: ProfileDefaults, +) -> Dict[str, Any]: + output: Dict[str, Any] = {} + + if request.server_id is not None: + output["server_id"] = request.server_id + + return output + + def marshal_UpdateServerRequest( request: UpdateServerRequest, defaults: ProfileDefaults, diff --git a/scaleway/scaleway/applesilicon/v1alpha1/types.py b/scaleway/scaleway/applesilicon/v1alpha1/types.py index 1e13e4a5f..2c56907c7 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/types.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/types.py @@ -15,6 +15,24 @@ ) +class ConnectivityDiagnosticActionType(str, Enum, metaclass=StrEnumMeta): + REBOOT_SERVER = "reboot_server" + REINSTALL_SERVER = "reinstall_server" + + def __str__(self) -> str: + return str(self.value) + + +class ConnectivityDiagnosticDiagnosticStatus(str, Enum, metaclass=StrEnumMeta): + UNKNOWN_STATUS = "unknown_status" + PROCESSING = "processing" + ERROR = "error" + COMPLETED = "completed" + + def __str__(self) -> str: + return str(self.value) + + class ListServersRequestOrderBy(str, Enum, metaclass=StrEnumMeta): CREATED_AT_ASC = "created_at_asc" CREATED_AT_DESC = "created_at_desc" @@ -130,6 +148,21 @@ class ServerTypeNetwork: public_bandwidth_bps: int +@dataclass +class ConnectivityDiagnosticServerHealth: + is_server_alive: bool + + is_agent_alive: bool + + is_mdm_alive: bool + + is_ssh_port_up: bool + + is_vnc_port_up: bool + + last_checkin_date: Optional[datetime] + + @dataclass class ServerType: name: str @@ -271,6 +304,21 @@ class Server: """ +@dataclass +class ConnectivityDiagnostic: + id: str + + status: ConnectivityDiagnosticDiagnosticStatus + + is_healthy: bool + + supported_actions: List[ConnectivityDiagnosticActionType] + + error_message: str + + health_details: Optional[ConnectivityDiagnosticServerHealth] + + @dataclass class CreateServerRequest: type_: str @@ -312,6 +360,16 @@ class DeleteServerRequest: """ +@dataclass +class GetConnectivityDiagnosticRequest: + diagnostic_id: str + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + @dataclass class GetOSRequest: os_id: str @@ -485,6 +543,21 @@ class ReinstallServerRequest: """ +@dataclass +class StartConnectivityDiagnosticRequest: + server_id: str + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + +@dataclass +class StartConnectivityDiagnosticResponse: + diagnostic_id: str + + @dataclass class UpdateServerRequest: server_id: str