diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py index e893d2fb1..6078c5b74 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/__init__.py @@ -2,7 +2,10 @@ # 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 ListServerPrivateNetworksRequestOrderBy from .types import ListServersRequestOrderBy +from .types import ServerPrivateNetworkServerStatus +from .content import SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES from .types import ServerPrivateNetworkStatus from .content import SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES from .types import ServerStatus @@ -15,6 +18,7 @@ from .types import ServerTypeMemory from .types import ServerTypeNetwork from .types import ConnectivityDiagnosticServerHealth +from .types import ServerPrivateNetwork from .types import ServerType from .types import Server from .types import ConnectivityDiagnostic @@ -26,21 +30,32 @@ from .types import GetServerTypeRequest from .types import ListOSRequest from .types import ListOSResponse +from .types import ListServerPrivateNetworksResponse from .types import ListServerTypesRequest from .types import ListServerTypesResponse from .types import ListServersRequest from .types import ListServersResponse +from .types import PrivateNetworkApiAddServerPrivateNetworkRequest +from .types import PrivateNetworkApiDeleteServerPrivateNetworkRequest +from .types import PrivateNetworkApiGetServerPrivateNetworkRequest +from .types import PrivateNetworkApiListServerPrivateNetworksRequest +from .types import PrivateNetworkApiSetServerPrivateNetworksRequest from .types import RebootServerRequest from .types import ReinstallServerRequest +from .types import SetServerPrivateNetworksResponse from .types import StartConnectivityDiagnosticRequest from .types import StartConnectivityDiagnosticResponse from .types import UpdateServerRequest from .api import ApplesiliconV1Alpha1API +from .api import ApplesiliconV1Alpha1PrivateNetworkAPI __all__ = [ "ConnectivityDiagnosticActionType", "ConnectivityDiagnosticDiagnosticStatus", + "ListServerPrivateNetworksRequestOrderBy", "ListServersRequestOrderBy", + "ServerPrivateNetworkServerStatus", + "SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES", "ServerPrivateNetworkStatus", "SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES", "ServerStatus", @@ -53,6 +68,7 @@ "ServerTypeMemory", "ServerTypeNetwork", "ConnectivityDiagnosticServerHealth", + "ServerPrivateNetwork", "ServerType", "Server", "ConnectivityDiagnostic", @@ -64,14 +80,22 @@ "GetServerTypeRequest", "ListOSRequest", "ListOSResponse", + "ListServerPrivateNetworksResponse", "ListServerTypesRequest", "ListServerTypesResponse", "ListServersRequest", "ListServersResponse", + "PrivateNetworkApiAddServerPrivateNetworkRequest", + "PrivateNetworkApiDeleteServerPrivateNetworkRequest", + "PrivateNetworkApiGetServerPrivateNetworkRequest", + "PrivateNetworkApiListServerPrivateNetworksRequest", + "PrivateNetworkApiSetServerPrivateNetworksRequest", "RebootServerRequest", "ReinstallServerRequest", + "SetServerPrivateNetworksResponse", "StartConnectivityDiagnosticRequest", "StartConnectivityDiagnosticResponse", "UpdateServerRequest", "ApplesiliconV1Alpha1API", + "ApplesiliconV1Alpha1PrivateNetworkAPI", ] diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py index e9a58d4df..3299afcc4 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/api.py @@ -1,7 +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 typing import Awaitable, List, Optional, Union +from typing import Awaitable, Dict, List, Optional, Union from scaleway_core.api import API from scaleway_core.bridge import ( @@ -15,33 +15,45 @@ wait_for_resource_async, ) from .types import ( + ListServerPrivateNetworksRequestOrderBy, ListServersRequestOrderBy, ConnectivityDiagnostic, CreateServerRequest, ListOSResponse, + ListServerPrivateNetworksResponse, ListServerTypesResponse, ListServersResponse, OS, + PrivateNetworkApiAddServerPrivateNetworkRequest, + PrivateNetworkApiSetServerPrivateNetworksRequest, ReinstallServerRequest, Server, + ServerPrivateNetwork, ServerType, + SetServerPrivateNetworksResponse, StartConnectivityDiagnosticRequest, StartConnectivityDiagnosticResponse, UpdateServerRequest, ) from .content import ( + SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES, SERVER_TRANSIENT_STATUSES, ) from .marshalling import ( unmarshal_OS, + unmarshal_ServerPrivateNetwork, unmarshal_ServerType, unmarshal_Server, unmarshal_ConnectivityDiagnostic, unmarshal_ListOSResponse, + unmarshal_ListServerPrivateNetworksResponse, unmarshal_ListServerTypesResponse, unmarshal_ListServersResponse, + unmarshal_SetServerPrivateNetworksResponse, unmarshal_StartConnectivityDiagnosticResponse, marshal_CreateServerRequest, + marshal_PrivateNetworkApiAddServerPrivateNetworkRequest, + marshal_PrivateNetworkApiSetServerPrivateNetworksRequest, marshal_ReinstallServerRequest, marshal_StartConnectivityDiagnosticRequest, marshal_UpdateServerRequest, @@ -647,3 +659,317 @@ async def get_connectivity_diagnostic( self._throw_on_error(res) return unmarshal_ConnectivityDiagnostic(res.json()) + + +class ApplesiliconV1Alpha1PrivateNetworkAPI(API): + """ + Apple silicon - Private Networks API. + """ + + async def get_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + ) -> ServerPrivateNetwork: + """ + :param server_id: + :param private_network_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`ServerPrivateNetwork ` + + Usage: + :: + + result = await api.get_server_private_network( + server_id="example", + private_network_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_server_id = validate_path_param("server_id", server_id) + param_private_network_id = validate_path_param( + "private_network_id", private_network_id + ) + + res = self._request( + "GET", + f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks/{param_private_network_id}", + ) + + self._throw_on_error(res) + return unmarshal_ServerPrivateNetwork(res.json()) + + async def wait_for_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + options: Optional[ + WaitForOptions[ServerPrivateNetwork, Union[bool, Awaitable[bool]]] + ] = None, + ) -> ServerPrivateNetwork: + """ + :param server_id: + :param private_network_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`ServerPrivateNetwork ` + + Usage: + :: + + result = await api.get_server_private_network( + server_id="example", + private_network_id="example", + ) + """ + + if not options: + options = WaitForOptions() + + if not options.stop: + options.stop = ( + lambda res: res.status + not in SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES + ) + + return await wait_for_resource_async( + fetcher=self.get_server_private_network, + options=options, + args={ + "server_id": server_id, + "private_network_id": private_network_id, + "zone": zone, + }, + ) + + async def add_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + ipam_ip_ids: Optional[List[str]] = None, + ) -> ServerPrivateNetwork: + """ + Add a server to a Private Network. + Add an Apple silicon server to a Private Network. + :param server_id: ID of the server. + :param private_network_id: ID of the Private Network. + :param zone: Zone to target. If none is passed will use default zone from the config. + :param ipam_ip_ids: IPAM IDs of IPs to attach to the server. + :return: :class:`ServerPrivateNetwork ` + + Usage: + :: + + result = await api.add_server_private_network( + server_id="example", + private_network_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"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks", + body=marshal_PrivateNetworkApiAddServerPrivateNetworkRequest( + PrivateNetworkApiAddServerPrivateNetworkRequest( + server_id=server_id, + private_network_id=private_network_id, + zone=zone, + ipam_ip_ids=ipam_ip_ids, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_ServerPrivateNetwork(res.json()) + + async def set_server_private_networks( + self, + *, + server_id: str, + per_private_network_ipam_ip_ids: Dict[str, List[str]], + zone: Optional[Zone] = None, + ) -> SetServerPrivateNetworksResponse: + """ + Set multiple Private Networks on a server. + Configure multiple Private Networks on an Apple silicon server. + :param server_id: ID of the server. + :param per_private_network_ipam_ip_ids: Object where the keys are the IDs of Private Networks and the values are arrays of IPAM IDs representing the IPs to assign to this Apple silicon server on the Private Network. If the array supplied for a Private Network is empty, the next available IP from the Private Network's CIDR block will automatically be used for attachment. + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`SetServerPrivateNetworksResponse ` + + Usage: + :: + + result = await api.set_server_private_networks( + server_id="example", + per_private_network_ipam_ip_ids={}, + ) + """ + + 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( + "PUT", + f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks", + body=marshal_PrivateNetworkApiSetServerPrivateNetworksRequest( + PrivateNetworkApiSetServerPrivateNetworksRequest( + server_id=server_id, + per_private_network_ipam_ip_ids=per_private_network_ipam_ip_ids, + zone=zone, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_SetServerPrivateNetworksResponse(res.json()) + + async def list_server_private_networks( + self, + *, + zone: Optional[Zone] = None, + order_by: Optional[ListServerPrivateNetworksRequestOrderBy] = None, + page: Optional[int] = None, + page_size: Optional[int] = None, + server_id: Optional[str] = None, + private_network_id: Optional[str] = None, + organization_id: Optional[str] = None, + project_id: Optional[str] = None, + ipam_ip_ids: Optional[List[str]] = None, + ) -> ListServerPrivateNetworksResponse: + """ + List the Private Networks of a server. + List the Private Networks of an Apple silicon server. + :param zone: Zone to target. If none is passed will use default zone from the config. + :param order_by: Sort order for the returned Private Networks. + :param page: Page number for the returned Private Networks. + :param page_size: Maximum number of Private Networks per page. + :param server_id: Filter Private Networks by server ID. + :param private_network_id: Filter Private Networks by Private Network ID. + :param organization_id: Filter Private Networks by Organization ID. + :param project_id: Filter Private Networks by Project ID. + :param ipam_ip_ids: Filter Private Networks by IPAM IP IDs. + :return: :class:`ListServerPrivateNetworksResponse ` + + Usage: + :: + + result = await api.list_server_private_networks() + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + + res = self._request( + "GET", + f"/apple-silicon/v1alpha1/zones/{param_zone}/server-private-networks", + params={ + "ipam_ip_ids": ipam_ip_ids, + "order_by": order_by, + "organization_id": organization_id + or self.client.default_organization_id, + "page": page, + "page_size": page_size or self.client.default_page_size, + "private_network_id": private_network_id, + "project_id": project_id or self.client.default_project_id, + "server_id": server_id, + }, + ) + + self._throw_on_error(res) + return unmarshal_ListServerPrivateNetworksResponse(res.json()) + + async def list_server_private_networks_all( + self, + *, + zone: Optional[Zone] = None, + order_by: Optional[ListServerPrivateNetworksRequestOrderBy] = None, + page: Optional[int] = None, + page_size: Optional[int] = None, + server_id: Optional[str] = None, + private_network_id: Optional[str] = None, + organization_id: Optional[str] = None, + project_id: Optional[str] = None, + ipam_ip_ids: Optional[List[str]] = None, + ) -> List[ServerPrivateNetwork]: + """ + List the Private Networks of a server. + List the Private Networks of an Apple silicon server. + :param zone: Zone to target. If none is passed will use default zone from the config. + :param order_by: Sort order for the returned Private Networks. + :param page: Page number for the returned Private Networks. + :param page_size: Maximum number of Private Networks per page. + :param server_id: Filter Private Networks by server ID. + :param private_network_id: Filter Private Networks by Private Network ID. + :param organization_id: Filter Private Networks by Organization ID. + :param project_id: Filter Private Networks by Project ID. + :param ipam_ip_ids: Filter Private Networks by IPAM IP IDs. + :return: :class:`List[ServerPrivateNetwork] ` + + Usage: + :: + + result = await api.list_server_private_networks_all() + """ + + return await fetch_all_pages_async( + type=ListServerPrivateNetworksResponse, + key="server_private_networks", + fetcher=self.list_server_private_networks, + args={ + "zone": zone, + "order_by": order_by, + "page": page, + "page_size": page_size, + "server_id": server_id, + "private_network_id": private_network_id, + "organization_id": organization_id, + "project_id": project_id, + "ipam_ip_ids": ipam_ip_ids, + }, + ) + + async def delete_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + ) -> None: + """ + Delete a Private Network. + :param server_id: ID of the server. + :param private_network_id: ID of the Private Network. + :param zone: Zone to target. If none is passed will use default zone from the config. + + Usage: + :: + + result = await api.delete_server_private_network( + server_id="example", + private_network_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_server_id = validate_path_param("server_id", server_id) + param_private_network_id = validate_path_param( + "private_network_id", private_network_id + ) + + res = self._request( + "DELETE", + f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks/{param_private_network_id}", + ) + + self._throw_on_error(res) diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/content.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/content.py index a80a0aaf2..d8118f9fb 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/content.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/content.py @@ -3,10 +3,20 @@ from typing import List from .types import ( + ServerPrivateNetworkServerStatus, ServerPrivateNetworkStatus, ServerStatus, ) +SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES: List[ + ServerPrivateNetworkServerStatus +] = [ + ServerPrivateNetworkServerStatus.ATTACHING, + ServerPrivateNetworkServerStatus.DETACHING, +] +""" +Lists transient statutes of the enum :class:`ServerPrivateNetworkServerStatus `. +""" SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES: List[ServerPrivateNetworkStatus] = [ ServerPrivateNetworkStatus.VPC_UPDATING, ] diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py index 760bfa2e8..edbb4774b 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/marshalling.py @@ -8,6 +8,7 @@ from .types import ( ConnectivityDiagnosticActionType, OS, + ServerPrivateNetwork, ServerTypeCPU, ServerTypeDisk, ServerTypeGPU, @@ -18,10 +19,14 @@ ConnectivityDiagnosticServerHealth, ConnectivityDiagnostic, ListOSResponse, + ListServerPrivateNetworksResponse, ListServerTypesResponse, ListServersResponse, + SetServerPrivateNetworksResponse, StartConnectivityDiagnosticResponse, CreateServerRequest, + PrivateNetworkApiAddServerPrivateNetworkRequest, + PrivateNetworkApiSetServerPrivateNetworksRequest, ReinstallServerRequest, StartConnectivityDiagnosticRequest, UpdateServerRequest, @@ -75,6 +80,59 @@ def unmarshal_OS(data: Any) -> OS: return OS(**args) +def unmarshal_ServerPrivateNetwork(data: Any) -> ServerPrivateNetwork: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ServerPrivateNetwork' 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("project_id", None) + if field is not None: + args["project_id"] = field + + field = data.get("server_id", None) + if field is not None: + args["server_id"] = field + + field = data.get("private_network_id", None) + if field is not None: + args["private_network_id"] = field + + field = data.get("status", None) + if field is not None: + args["status"] = field + + field = data.get("ipam_ip_ids", None) + if field is not None: + args["ipam_ip_ids"] = field + + field = data.get("vlan", None) + if field is not None: + args["vlan"] = field + else: + args["vlan"] = None + + field = data.get("created_at", None) + if field is not None: + args["created_at"] = parser.isoparse(field) if isinstance(field, str) else field + else: + args["created_at"] = None + + field = data.get("updated_at", None) + if field is not None: + args["updated_at"] = parser.isoparse(field) if isinstance(field, str) else field + else: + args["updated_at"] = None + + return ServerPrivateNetwork(**args) + + def unmarshal_ServerTypeCPU(data: Any) -> ServerTypeCPU: if not isinstance(data, dict): raise TypeError( @@ -425,6 +483,31 @@ def unmarshal_ListOSResponse(data: Any) -> ListOSResponse: return ListOSResponse(**args) +def unmarshal_ListServerPrivateNetworksResponse( + data: Any, +) -> ListServerPrivateNetworksResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ListServerPrivateNetworksResponse' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("server_private_networks", None) + if field is not None: + args["server_private_networks"] = ( + [unmarshal_ServerPrivateNetwork(v) for v in field] + if field is not None + else None + ) + + field = data.get("total_count", None) + if field is not None: + args["total_count"] = field + + return ListServerPrivateNetworksResponse(**args) + + def unmarshal_ListServerTypesResponse(data: Any) -> ListServerTypesResponse: if not isinstance(data, dict): raise TypeError( @@ -463,6 +546,27 @@ def unmarshal_ListServersResponse(data: Any) -> ListServersResponse: return ListServersResponse(**args) +def unmarshal_SetServerPrivateNetworksResponse( + data: Any, +) -> SetServerPrivateNetworksResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'SetServerPrivateNetworksResponse' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("server_private_networks", None) + if field is not None: + args["server_private_networks"] = ( + [unmarshal_ServerPrivateNetwork(v) for v in field] + if field is not None + else None + ) + + return SetServerPrivateNetworksResponse(**args) + + def unmarshal_StartConnectivityDiagnosticResponse( data: Any, ) -> StartConnectivityDiagnosticResponse: @@ -504,6 +608,35 @@ def marshal_CreateServerRequest( return output +def marshal_PrivateNetworkApiAddServerPrivateNetworkRequest( + request: PrivateNetworkApiAddServerPrivateNetworkRequest, + defaults: ProfileDefaults, +) -> Dict[str, Any]: + output: Dict[str, Any] = {} + + if request.private_network_id is not None: + output["private_network_id"] = request.private_network_id + + if request.ipam_ip_ids is not None: + output["ipam_ip_ids"] = request.ipam_ip_ids + + return output + + +def marshal_PrivateNetworkApiSetServerPrivateNetworksRequest( + request: PrivateNetworkApiSetServerPrivateNetworksRequest, + defaults: ProfileDefaults, +) -> Dict[str, Any]: + output: Dict[str, Any] = {} + + if request.per_private_network_ipam_ip_ids is not None: + output["per_private_network_ipam_ip_ids"] = { + key: value for key, value in request.per_private_network_ipam_ip_ids.items() + } + + return output + + def marshal_ReinstallServerRequest( request: ReinstallServerRequest, defaults: ProfileDefaults, diff --git a/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py b/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py index 722bfc1e7..02fc9fc26 100644 --- a/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py +++ b/scaleway-async/scaleway_async/applesilicon/v1alpha1/types.py @@ -5,7 +5,7 @@ from dataclasses import dataclass from datetime import datetime from enum import Enum -from typing import List, Optional +from typing import Dict, List, Optional from scaleway_core.bridge import ( Zone, @@ -33,6 +33,16 @@ def __str__(self) -> str: return str(self.value) +class ListServerPrivateNetworksRequestOrderBy(str, Enum, metaclass=StrEnumMeta): + CREATED_AT_ASC = "created_at_asc" + CREATED_AT_DESC = "created_at_desc" + UPDATED_AT_ASC = "updated_at_asc" + UPDATED_AT_DESC = "updated_at_desc" + + 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" @@ -41,6 +51,18 @@ def __str__(self) -> str: return str(self.value) +class ServerPrivateNetworkServerStatus(str, Enum, metaclass=StrEnumMeta): + UNKNOWN_STATUS = "unknown_status" + ATTACHING = "attaching" + ATTACHED = "attached" + ERROR = "error" + DETACHING = "detaching" + LOCKED = "locked" + + def __str__(self) -> str: + return str(self.value) + + class ServerPrivateNetworkStatus(str, Enum, metaclass=StrEnumMeta): VPC_UNKNOWN_STATUS = "vpc_unknown_status" VPC_ENABLED = "vpc_enabled" @@ -174,6 +196,54 @@ class ConnectivityDiagnosticServerHealth: last_checkin_date: Optional[datetime] +@dataclass +class ServerPrivateNetwork: + id: str + """ + ID of the Server-to-Private Network mapping. + """ + + project_id: str + """ + Private Network Project ID. + """ + + server_id: str + """ + Apple silicon server ID. + """ + + private_network_id: str + """ + Private Network ID. + """ + + status: ServerPrivateNetworkServerStatus + """ + Configuration status of the Private Network. + """ + + ipam_ip_ids: List[str] + """ + IPAM IP IDs of the server, if it has any. + """ + + vlan: Optional[int] + """ + ID of the VLAN associated with the Private Network. + """ + + created_at: Optional[datetime] + """ + Private Network creation date. + """ + + updated_at: Optional[datetime] + """ + Date the Private Network was last modified. + """ + + @dataclass class ServerType: name: str @@ -471,6 +541,13 @@ class ListOSResponse: """ +@dataclass +class ListServerPrivateNetworksResponse: + server_private_networks: List[ServerPrivateNetwork] + + total_count: int + + @dataclass class ListServerTypesRequest: zone: Optional[Zone] @@ -533,6 +610,125 @@ class ListServersResponse: """ +@dataclass +class PrivateNetworkApiAddServerPrivateNetworkRequest: + server_id: str + """ + ID of the server. + """ + + private_network_id: str + """ + ID of the Private Network. + """ + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + ipam_ip_ids: Optional[List[str]] + """ + IPAM IDs of IPs to attach to the server. + """ + + +@dataclass +class PrivateNetworkApiDeleteServerPrivateNetworkRequest: + server_id: str + """ + ID of the server. + """ + + private_network_id: str + """ + ID of the Private Network. + """ + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + +@dataclass +class PrivateNetworkApiGetServerPrivateNetworkRequest: + server_id: str + + private_network_id: str + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + +@dataclass +class PrivateNetworkApiListServerPrivateNetworksRequest: + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + order_by: Optional[ListServerPrivateNetworksRequestOrderBy] + """ + Sort order for the returned Private Networks. + """ + + page: Optional[int] + """ + Page number for the returned Private Networks. + """ + + page_size: Optional[int] + """ + Maximum number of Private Networks per page. + """ + + server_id: Optional[str] + """ + Filter Private Networks by server ID. + """ + + private_network_id: Optional[str] + """ + Filter Private Networks by Private Network ID. + """ + + organization_id: Optional[str] + """ + Filter Private Networks by Organization ID. + """ + + project_id: Optional[str] + """ + Filter Private Networks by Project ID. + """ + + ipam_ip_ids: Optional[List[str]] + """ + Filter Private Networks by IPAM IP IDs. + """ + + +@dataclass +class PrivateNetworkApiSetServerPrivateNetworksRequest: + server_id: str + """ + ID of the server. + """ + + per_private_network_ipam_ip_ids: Dict[str, List[str]] + """ + Object where the keys are the IDs of Private Networks and the values are arrays of IPAM IDs representing the IPs to assign to this Apple silicon server on the Private Network. If the array supplied for a Private Network is empty, the next available IP from the Private Network's CIDR block will automatically be used for attachment. + """ + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + @dataclass class RebootServerRequest: server_id: str @@ -564,6 +760,11 @@ class ReinstallServerRequest: """ +@dataclass +class SetServerPrivateNetworksResponse: + server_private_networks: List[ServerPrivateNetwork] + + @dataclass class StartConnectivityDiagnosticRequest: server_id: str diff --git a/scaleway/scaleway/applesilicon/v1alpha1/__init__.py b/scaleway/scaleway/applesilicon/v1alpha1/__init__.py index e893d2fb1..6078c5b74 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/__init__.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/__init__.py @@ -2,7 +2,10 @@ # 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 ListServerPrivateNetworksRequestOrderBy from .types import ListServersRequestOrderBy +from .types import ServerPrivateNetworkServerStatus +from .content import SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES from .types import ServerPrivateNetworkStatus from .content import SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES from .types import ServerStatus @@ -15,6 +18,7 @@ from .types import ServerTypeMemory from .types import ServerTypeNetwork from .types import ConnectivityDiagnosticServerHealth +from .types import ServerPrivateNetwork from .types import ServerType from .types import Server from .types import ConnectivityDiagnostic @@ -26,21 +30,32 @@ from .types import GetServerTypeRequest from .types import ListOSRequest from .types import ListOSResponse +from .types import ListServerPrivateNetworksResponse from .types import ListServerTypesRequest from .types import ListServerTypesResponse from .types import ListServersRequest from .types import ListServersResponse +from .types import PrivateNetworkApiAddServerPrivateNetworkRequest +from .types import PrivateNetworkApiDeleteServerPrivateNetworkRequest +from .types import PrivateNetworkApiGetServerPrivateNetworkRequest +from .types import PrivateNetworkApiListServerPrivateNetworksRequest +from .types import PrivateNetworkApiSetServerPrivateNetworksRequest from .types import RebootServerRequest from .types import ReinstallServerRequest +from .types import SetServerPrivateNetworksResponse from .types import StartConnectivityDiagnosticRequest from .types import StartConnectivityDiagnosticResponse from .types import UpdateServerRequest from .api import ApplesiliconV1Alpha1API +from .api import ApplesiliconV1Alpha1PrivateNetworkAPI __all__ = [ "ConnectivityDiagnosticActionType", "ConnectivityDiagnosticDiagnosticStatus", + "ListServerPrivateNetworksRequestOrderBy", "ListServersRequestOrderBy", + "ServerPrivateNetworkServerStatus", + "SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES", "ServerPrivateNetworkStatus", "SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES", "ServerStatus", @@ -53,6 +68,7 @@ "ServerTypeMemory", "ServerTypeNetwork", "ConnectivityDiagnosticServerHealth", + "ServerPrivateNetwork", "ServerType", "Server", "ConnectivityDiagnostic", @@ -64,14 +80,22 @@ "GetServerTypeRequest", "ListOSRequest", "ListOSResponse", + "ListServerPrivateNetworksResponse", "ListServerTypesRequest", "ListServerTypesResponse", "ListServersRequest", "ListServersResponse", + "PrivateNetworkApiAddServerPrivateNetworkRequest", + "PrivateNetworkApiDeleteServerPrivateNetworkRequest", + "PrivateNetworkApiGetServerPrivateNetworkRequest", + "PrivateNetworkApiListServerPrivateNetworksRequest", + "PrivateNetworkApiSetServerPrivateNetworksRequest", "RebootServerRequest", "ReinstallServerRequest", + "SetServerPrivateNetworksResponse", "StartConnectivityDiagnosticRequest", "StartConnectivityDiagnosticResponse", "UpdateServerRequest", "ApplesiliconV1Alpha1API", + "ApplesiliconV1Alpha1PrivateNetworkAPI", ] diff --git a/scaleway/scaleway/applesilicon/v1alpha1/api.py b/scaleway/scaleway/applesilicon/v1alpha1/api.py index 749ad82cd..c3cfb8698 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/api.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/api.py @@ -1,7 +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 typing import List, Optional +from typing import Dict, List, Optional from scaleway_core.api import API from scaleway_core.bridge import ( @@ -15,33 +15,45 @@ wait_for_resource, ) from .types import ( + ListServerPrivateNetworksRequestOrderBy, ListServersRequestOrderBy, ConnectivityDiagnostic, CreateServerRequest, ListOSResponse, + ListServerPrivateNetworksResponse, ListServerTypesResponse, ListServersResponse, OS, + PrivateNetworkApiAddServerPrivateNetworkRequest, + PrivateNetworkApiSetServerPrivateNetworksRequest, ReinstallServerRequest, Server, + ServerPrivateNetwork, ServerType, + SetServerPrivateNetworksResponse, StartConnectivityDiagnosticRequest, StartConnectivityDiagnosticResponse, UpdateServerRequest, ) from .content import ( + SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES, SERVER_TRANSIENT_STATUSES, ) from .marshalling import ( unmarshal_OS, + unmarshal_ServerPrivateNetwork, unmarshal_ServerType, unmarshal_Server, unmarshal_ConnectivityDiagnostic, unmarshal_ListOSResponse, + unmarshal_ListServerPrivateNetworksResponse, unmarshal_ListServerTypesResponse, unmarshal_ListServersResponse, + unmarshal_SetServerPrivateNetworksResponse, unmarshal_StartConnectivityDiagnosticResponse, marshal_CreateServerRequest, + marshal_PrivateNetworkApiAddServerPrivateNetworkRequest, + marshal_PrivateNetworkApiSetServerPrivateNetworksRequest, marshal_ReinstallServerRequest, marshal_StartConnectivityDiagnosticRequest, marshal_UpdateServerRequest, @@ -647,3 +659,315 @@ def get_connectivity_diagnostic( self._throw_on_error(res) return unmarshal_ConnectivityDiagnostic(res.json()) + + +class ApplesiliconV1Alpha1PrivateNetworkAPI(API): + """ + Apple silicon - Private Networks API. + """ + + def get_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + ) -> ServerPrivateNetwork: + """ + :param server_id: + :param private_network_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`ServerPrivateNetwork ` + + Usage: + :: + + result = api.get_server_private_network( + server_id="example", + private_network_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_server_id = validate_path_param("server_id", server_id) + param_private_network_id = validate_path_param( + "private_network_id", private_network_id + ) + + res = self._request( + "GET", + f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks/{param_private_network_id}", + ) + + self._throw_on_error(res) + return unmarshal_ServerPrivateNetwork(res.json()) + + def wait_for_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + options: Optional[WaitForOptions[ServerPrivateNetwork, bool]] = None, + ) -> ServerPrivateNetwork: + """ + :param server_id: + :param private_network_id: + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`ServerPrivateNetwork ` + + Usage: + :: + + result = api.get_server_private_network( + server_id="example", + private_network_id="example", + ) + """ + + if not options: + options = WaitForOptions() + + if not options.stop: + options.stop = ( + lambda res: res.status + not in SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES + ) + + return wait_for_resource( + fetcher=self.get_server_private_network, + options=options, + args={ + "server_id": server_id, + "private_network_id": private_network_id, + "zone": zone, + }, + ) + + def add_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + ipam_ip_ids: Optional[List[str]] = None, + ) -> ServerPrivateNetwork: + """ + Add a server to a Private Network. + Add an Apple silicon server to a Private Network. + :param server_id: ID of the server. + :param private_network_id: ID of the Private Network. + :param zone: Zone to target. If none is passed will use default zone from the config. + :param ipam_ip_ids: IPAM IDs of IPs to attach to the server. + :return: :class:`ServerPrivateNetwork ` + + Usage: + :: + + result = api.add_server_private_network( + server_id="example", + private_network_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"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks", + body=marshal_PrivateNetworkApiAddServerPrivateNetworkRequest( + PrivateNetworkApiAddServerPrivateNetworkRequest( + server_id=server_id, + private_network_id=private_network_id, + zone=zone, + ipam_ip_ids=ipam_ip_ids, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_ServerPrivateNetwork(res.json()) + + def set_server_private_networks( + self, + *, + server_id: str, + per_private_network_ipam_ip_ids: Dict[str, List[str]], + zone: Optional[Zone] = None, + ) -> SetServerPrivateNetworksResponse: + """ + Set multiple Private Networks on a server. + Configure multiple Private Networks on an Apple silicon server. + :param server_id: ID of the server. + :param per_private_network_ipam_ip_ids: Object where the keys are the IDs of Private Networks and the values are arrays of IPAM IDs representing the IPs to assign to this Apple silicon server on the Private Network. If the array supplied for a Private Network is empty, the next available IP from the Private Network's CIDR block will automatically be used for attachment. + :param zone: Zone to target. If none is passed will use default zone from the config. + :return: :class:`SetServerPrivateNetworksResponse ` + + Usage: + :: + + result = api.set_server_private_networks( + server_id="example", + per_private_network_ipam_ip_ids={}, + ) + """ + + 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( + "PUT", + f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks", + body=marshal_PrivateNetworkApiSetServerPrivateNetworksRequest( + PrivateNetworkApiSetServerPrivateNetworksRequest( + server_id=server_id, + per_private_network_ipam_ip_ids=per_private_network_ipam_ip_ids, + zone=zone, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_SetServerPrivateNetworksResponse(res.json()) + + def list_server_private_networks( + self, + *, + zone: Optional[Zone] = None, + order_by: Optional[ListServerPrivateNetworksRequestOrderBy] = None, + page: Optional[int] = None, + page_size: Optional[int] = None, + server_id: Optional[str] = None, + private_network_id: Optional[str] = None, + organization_id: Optional[str] = None, + project_id: Optional[str] = None, + ipam_ip_ids: Optional[List[str]] = None, + ) -> ListServerPrivateNetworksResponse: + """ + List the Private Networks of a server. + List the Private Networks of an Apple silicon server. + :param zone: Zone to target. If none is passed will use default zone from the config. + :param order_by: Sort order for the returned Private Networks. + :param page: Page number for the returned Private Networks. + :param page_size: Maximum number of Private Networks per page. + :param server_id: Filter Private Networks by server ID. + :param private_network_id: Filter Private Networks by Private Network ID. + :param organization_id: Filter Private Networks by Organization ID. + :param project_id: Filter Private Networks by Project ID. + :param ipam_ip_ids: Filter Private Networks by IPAM IP IDs. + :return: :class:`ListServerPrivateNetworksResponse ` + + Usage: + :: + + result = api.list_server_private_networks() + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + + res = self._request( + "GET", + f"/apple-silicon/v1alpha1/zones/{param_zone}/server-private-networks", + params={ + "ipam_ip_ids": ipam_ip_ids, + "order_by": order_by, + "organization_id": organization_id + or self.client.default_organization_id, + "page": page, + "page_size": page_size or self.client.default_page_size, + "private_network_id": private_network_id, + "project_id": project_id or self.client.default_project_id, + "server_id": server_id, + }, + ) + + self._throw_on_error(res) + return unmarshal_ListServerPrivateNetworksResponse(res.json()) + + def list_server_private_networks_all( + self, + *, + zone: Optional[Zone] = None, + order_by: Optional[ListServerPrivateNetworksRequestOrderBy] = None, + page: Optional[int] = None, + page_size: Optional[int] = None, + server_id: Optional[str] = None, + private_network_id: Optional[str] = None, + organization_id: Optional[str] = None, + project_id: Optional[str] = None, + ipam_ip_ids: Optional[List[str]] = None, + ) -> List[ServerPrivateNetwork]: + """ + List the Private Networks of a server. + List the Private Networks of an Apple silicon server. + :param zone: Zone to target. If none is passed will use default zone from the config. + :param order_by: Sort order for the returned Private Networks. + :param page: Page number for the returned Private Networks. + :param page_size: Maximum number of Private Networks per page. + :param server_id: Filter Private Networks by server ID. + :param private_network_id: Filter Private Networks by Private Network ID. + :param organization_id: Filter Private Networks by Organization ID. + :param project_id: Filter Private Networks by Project ID. + :param ipam_ip_ids: Filter Private Networks by IPAM IP IDs. + :return: :class:`List[ServerPrivateNetwork] ` + + Usage: + :: + + result = api.list_server_private_networks_all() + """ + + return fetch_all_pages( + type=ListServerPrivateNetworksResponse, + key="server_private_networks", + fetcher=self.list_server_private_networks, + args={ + "zone": zone, + "order_by": order_by, + "page": page, + "page_size": page_size, + "server_id": server_id, + "private_network_id": private_network_id, + "organization_id": organization_id, + "project_id": project_id, + "ipam_ip_ids": ipam_ip_ids, + }, + ) + + def delete_server_private_network( + self, + *, + server_id: str, + private_network_id: str, + zone: Optional[Zone] = None, + ) -> None: + """ + Delete a Private Network. + :param server_id: ID of the server. + :param private_network_id: ID of the Private Network. + :param zone: Zone to target. If none is passed will use default zone from the config. + + Usage: + :: + + result = api.delete_server_private_network( + server_id="example", + private_network_id="example", + ) + """ + + param_zone = validate_path_param("zone", zone or self.client.default_zone) + param_server_id = validate_path_param("server_id", server_id) + param_private_network_id = validate_path_param( + "private_network_id", private_network_id + ) + + res = self._request( + "DELETE", + f"/apple-silicon/v1alpha1/zones/{param_zone}/servers/{param_server_id}/private-networks/{param_private_network_id}", + ) + + self._throw_on_error(res) diff --git a/scaleway/scaleway/applesilicon/v1alpha1/content.py b/scaleway/scaleway/applesilicon/v1alpha1/content.py index a80a0aaf2..d8118f9fb 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/content.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/content.py @@ -3,10 +3,20 @@ from typing import List from .types import ( + ServerPrivateNetworkServerStatus, ServerPrivateNetworkStatus, ServerStatus, ) +SERVER_PRIVATE_NETWORK_SERVER_TRANSIENT_STATUSES: List[ + ServerPrivateNetworkServerStatus +] = [ + ServerPrivateNetworkServerStatus.ATTACHING, + ServerPrivateNetworkServerStatus.DETACHING, +] +""" +Lists transient statutes of the enum :class:`ServerPrivateNetworkServerStatus `. +""" SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES: List[ServerPrivateNetworkStatus] = [ ServerPrivateNetworkStatus.VPC_UPDATING, ] diff --git a/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py b/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py index 760bfa2e8..edbb4774b 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/marshalling.py @@ -8,6 +8,7 @@ from .types import ( ConnectivityDiagnosticActionType, OS, + ServerPrivateNetwork, ServerTypeCPU, ServerTypeDisk, ServerTypeGPU, @@ -18,10 +19,14 @@ ConnectivityDiagnosticServerHealth, ConnectivityDiagnostic, ListOSResponse, + ListServerPrivateNetworksResponse, ListServerTypesResponse, ListServersResponse, + SetServerPrivateNetworksResponse, StartConnectivityDiagnosticResponse, CreateServerRequest, + PrivateNetworkApiAddServerPrivateNetworkRequest, + PrivateNetworkApiSetServerPrivateNetworksRequest, ReinstallServerRequest, StartConnectivityDiagnosticRequest, UpdateServerRequest, @@ -75,6 +80,59 @@ def unmarshal_OS(data: Any) -> OS: return OS(**args) +def unmarshal_ServerPrivateNetwork(data: Any) -> ServerPrivateNetwork: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ServerPrivateNetwork' 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("project_id", None) + if field is not None: + args["project_id"] = field + + field = data.get("server_id", None) + if field is not None: + args["server_id"] = field + + field = data.get("private_network_id", None) + if field is not None: + args["private_network_id"] = field + + field = data.get("status", None) + if field is not None: + args["status"] = field + + field = data.get("ipam_ip_ids", None) + if field is not None: + args["ipam_ip_ids"] = field + + field = data.get("vlan", None) + if field is not None: + args["vlan"] = field + else: + args["vlan"] = None + + field = data.get("created_at", None) + if field is not None: + args["created_at"] = parser.isoparse(field) if isinstance(field, str) else field + else: + args["created_at"] = None + + field = data.get("updated_at", None) + if field is not None: + args["updated_at"] = parser.isoparse(field) if isinstance(field, str) else field + else: + args["updated_at"] = None + + return ServerPrivateNetwork(**args) + + def unmarshal_ServerTypeCPU(data: Any) -> ServerTypeCPU: if not isinstance(data, dict): raise TypeError( @@ -425,6 +483,31 @@ def unmarshal_ListOSResponse(data: Any) -> ListOSResponse: return ListOSResponse(**args) +def unmarshal_ListServerPrivateNetworksResponse( + data: Any, +) -> ListServerPrivateNetworksResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ListServerPrivateNetworksResponse' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("server_private_networks", None) + if field is not None: + args["server_private_networks"] = ( + [unmarshal_ServerPrivateNetwork(v) for v in field] + if field is not None + else None + ) + + field = data.get("total_count", None) + if field is not None: + args["total_count"] = field + + return ListServerPrivateNetworksResponse(**args) + + def unmarshal_ListServerTypesResponse(data: Any) -> ListServerTypesResponse: if not isinstance(data, dict): raise TypeError( @@ -463,6 +546,27 @@ def unmarshal_ListServersResponse(data: Any) -> ListServersResponse: return ListServersResponse(**args) +def unmarshal_SetServerPrivateNetworksResponse( + data: Any, +) -> SetServerPrivateNetworksResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'SetServerPrivateNetworksResponse' failed as data isn't a dictionary." + ) + + args: Dict[str, Any] = {} + + field = data.get("server_private_networks", None) + if field is not None: + args["server_private_networks"] = ( + [unmarshal_ServerPrivateNetwork(v) for v in field] + if field is not None + else None + ) + + return SetServerPrivateNetworksResponse(**args) + + def unmarshal_StartConnectivityDiagnosticResponse( data: Any, ) -> StartConnectivityDiagnosticResponse: @@ -504,6 +608,35 @@ def marshal_CreateServerRequest( return output +def marshal_PrivateNetworkApiAddServerPrivateNetworkRequest( + request: PrivateNetworkApiAddServerPrivateNetworkRequest, + defaults: ProfileDefaults, +) -> Dict[str, Any]: + output: Dict[str, Any] = {} + + if request.private_network_id is not None: + output["private_network_id"] = request.private_network_id + + if request.ipam_ip_ids is not None: + output["ipam_ip_ids"] = request.ipam_ip_ids + + return output + + +def marshal_PrivateNetworkApiSetServerPrivateNetworksRequest( + request: PrivateNetworkApiSetServerPrivateNetworksRequest, + defaults: ProfileDefaults, +) -> Dict[str, Any]: + output: Dict[str, Any] = {} + + if request.per_private_network_ipam_ip_ids is not None: + output["per_private_network_ipam_ip_ids"] = { + key: value for key, value in request.per_private_network_ipam_ip_ids.items() + } + + return output + + def marshal_ReinstallServerRequest( request: ReinstallServerRequest, defaults: ProfileDefaults, diff --git a/scaleway/scaleway/applesilicon/v1alpha1/types.py b/scaleway/scaleway/applesilicon/v1alpha1/types.py index 722bfc1e7..02fc9fc26 100644 --- a/scaleway/scaleway/applesilicon/v1alpha1/types.py +++ b/scaleway/scaleway/applesilicon/v1alpha1/types.py @@ -5,7 +5,7 @@ from dataclasses import dataclass from datetime import datetime from enum import Enum -from typing import List, Optional +from typing import Dict, List, Optional from scaleway_core.bridge import ( Zone, @@ -33,6 +33,16 @@ def __str__(self) -> str: return str(self.value) +class ListServerPrivateNetworksRequestOrderBy(str, Enum, metaclass=StrEnumMeta): + CREATED_AT_ASC = "created_at_asc" + CREATED_AT_DESC = "created_at_desc" + UPDATED_AT_ASC = "updated_at_asc" + UPDATED_AT_DESC = "updated_at_desc" + + 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" @@ -41,6 +51,18 @@ def __str__(self) -> str: return str(self.value) +class ServerPrivateNetworkServerStatus(str, Enum, metaclass=StrEnumMeta): + UNKNOWN_STATUS = "unknown_status" + ATTACHING = "attaching" + ATTACHED = "attached" + ERROR = "error" + DETACHING = "detaching" + LOCKED = "locked" + + def __str__(self) -> str: + return str(self.value) + + class ServerPrivateNetworkStatus(str, Enum, metaclass=StrEnumMeta): VPC_UNKNOWN_STATUS = "vpc_unknown_status" VPC_ENABLED = "vpc_enabled" @@ -174,6 +196,54 @@ class ConnectivityDiagnosticServerHealth: last_checkin_date: Optional[datetime] +@dataclass +class ServerPrivateNetwork: + id: str + """ + ID of the Server-to-Private Network mapping. + """ + + project_id: str + """ + Private Network Project ID. + """ + + server_id: str + """ + Apple silicon server ID. + """ + + private_network_id: str + """ + Private Network ID. + """ + + status: ServerPrivateNetworkServerStatus + """ + Configuration status of the Private Network. + """ + + ipam_ip_ids: List[str] + """ + IPAM IP IDs of the server, if it has any. + """ + + vlan: Optional[int] + """ + ID of the VLAN associated with the Private Network. + """ + + created_at: Optional[datetime] + """ + Private Network creation date. + """ + + updated_at: Optional[datetime] + """ + Date the Private Network was last modified. + """ + + @dataclass class ServerType: name: str @@ -471,6 +541,13 @@ class ListOSResponse: """ +@dataclass +class ListServerPrivateNetworksResponse: + server_private_networks: List[ServerPrivateNetwork] + + total_count: int + + @dataclass class ListServerTypesRequest: zone: Optional[Zone] @@ -533,6 +610,125 @@ class ListServersResponse: """ +@dataclass +class PrivateNetworkApiAddServerPrivateNetworkRequest: + server_id: str + """ + ID of the server. + """ + + private_network_id: str + """ + ID of the Private Network. + """ + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + ipam_ip_ids: Optional[List[str]] + """ + IPAM IDs of IPs to attach to the server. + """ + + +@dataclass +class PrivateNetworkApiDeleteServerPrivateNetworkRequest: + server_id: str + """ + ID of the server. + """ + + private_network_id: str + """ + ID of the Private Network. + """ + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + +@dataclass +class PrivateNetworkApiGetServerPrivateNetworkRequest: + server_id: str + + private_network_id: str + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + +@dataclass +class PrivateNetworkApiListServerPrivateNetworksRequest: + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + order_by: Optional[ListServerPrivateNetworksRequestOrderBy] + """ + Sort order for the returned Private Networks. + """ + + page: Optional[int] + """ + Page number for the returned Private Networks. + """ + + page_size: Optional[int] + """ + Maximum number of Private Networks per page. + """ + + server_id: Optional[str] + """ + Filter Private Networks by server ID. + """ + + private_network_id: Optional[str] + """ + Filter Private Networks by Private Network ID. + """ + + organization_id: Optional[str] + """ + Filter Private Networks by Organization ID. + """ + + project_id: Optional[str] + """ + Filter Private Networks by Project ID. + """ + + ipam_ip_ids: Optional[List[str]] + """ + Filter Private Networks by IPAM IP IDs. + """ + + +@dataclass +class PrivateNetworkApiSetServerPrivateNetworksRequest: + server_id: str + """ + ID of the server. + """ + + per_private_network_ipam_ip_ids: Dict[str, List[str]] + """ + Object where the keys are the IDs of Private Networks and the values are arrays of IPAM IDs representing the IPs to assign to this Apple silicon server on the Private Network. If the array supplied for a Private Network is empty, the next available IP from the Private Network's CIDR block will automatically be used for attachment. + """ + + zone: Optional[Zone] + """ + Zone to target. If none is passed will use default zone from the config. + """ + + @dataclass class RebootServerRequest: server_id: str @@ -564,6 +760,11 @@ class ReinstallServerRequest: """ +@dataclass +class SetServerPrivateNetworksResponse: + server_private_networks: List[ServerPrivateNetwork] + + @dataclass class StartConnectivityDiagnosticRequest: server_id: str