Skip to content

Commit 7f9e632

Browse files
authored
feat(vpc): add custom routes CRUD (scaleway#589)
1 parent c7566e4 commit 7f9e632

File tree

8 files changed

+926
-0
lines changed

8 files changed

+926
-0
lines changed

scaleway-async/scaleway_async/vpc/v2/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@
55
from .types import ListVPCsRequestOrderBy
66
from .types import Subnet
77
from .types import PrivateNetwork
8+
from .types import Route
89
from .types import VPC
910
from .types import AddSubnetsRequest
1011
from .types import AddSubnetsResponse
1112
from .types import CreatePrivateNetworkRequest
13+
from .types import CreateRouteRequest
1214
from .types import CreateVPCRequest
1315
from .types import DeletePrivateNetworkRequest
16+
from .types import DeleteRouteRequest
1417
from .types import DeleteSubnetsRequest
1518
from .types import DeleteSubnetsResponse
1619
from .types import DeleteVPCRequest
1720
from .types import EnableDHCPRequest
1821
from .types import EnableRoutingRequest
1922
from .types import GetPrivateNetworkRequest
23+
from .types import GetRouteRequest
2024
from .types import GetVPCRequest
2125
from .types import ListPrivateNetworksRequest
2226
from .types import ListPrivateNetworksResponse
@@ -28,6 +32,7 @@
2832
from .types import SetSubnetsRequest
2933
from .types import SetSubnetsResponse
3034
from .types import UpdatePrivateNetworkRequest
35+
from .types import UpdateRouteRequest
3136
from .types import UpdateVPCRequest
3237
from .api import VpcV2API
3338

@@ -37,18 +42,22 @@
3742
"ListVPCsRequestOrderBy",
3843
"Subnet",
3944
"PrivateNetwork",
45+
"Route",
4046
"VPC",
4147
"AddSubnetsRequest",
4248
"AddSubnetsResponse",
4349
"CreatePrivateNetworkRequest",
50+
"CreateRouteRequest",
4451
"CreateVPCRequest",
4552
"DeletePrivateNetworkRequest",
53+
"DeleteRouteRequest",
4654
"DeleteSubnetsRequest",
4755
"DeleteSubnetsResponse",
4856
"DeleteVPCRequest",
4957
"EnableDHCPRequest",
5058
"EnableRoutingRequest",
5159
"GetPrivateNetworkRequest",
60+
"GetRouteRequest",
5261
"GetVPCRequest",
5362
"ListPrivateNetworksRequest",
5463
"ListPrivateNetworksResponse",
@@ -60,6 +69,7 @@
6069
"SetSubnetsRequest",
6170
"SetSubnetsResponse",
6271
"UpdatePrivateNetworkRequest",
72+
"UpdateRouteRequest",
6373
"UpdateVPCRequest",
6474
"VpcV2API",
6575
]

scaleway-async/scaleway_async/vpc/v2/api.py

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
AddSubnetsRequest,
2020
AddSubnetsResponse,
2121
CreatePrivateNetworkRequest,
22+
CreateRouteRequest,
2223
CreateVPCRequest,
2324
DeleteSubnetsRequest,
2425
DeleteSubnetsResponse,
@@ -27,15 +28,18 @@
2728
ListVPCsResponse,
2829
MigrateZonalPrivateNetworksRequest,
2930
PrivateNetwork,
31+
Route,
3032
SetSubnetsRequest,
3133
SetSubnetsResponse,
3234
Subnet,
3335
UpdatePrivateNetworkRequest,
36+
UpdateRouteRequest,
3437
UpdateVPCRequest,
3538
VPC,
3639
)
3740
from .marshalling import (
3841
unmarshal_PrivateNetwork,
42+
unmarshal_Route,
3943
unmarshal_VPC,
4044
unmarshal_AddSubnetsResponse,
4145
unmarshal_DeleteSubnetsResponse,
@@ -45,11 +49,13 @@
4549
unmarshal_SetSubnetsResponse,
4650
marshal_AddSubnetsRequest,
4751
marshal_CreatePrivateNetworkRequest,
52+
marshal_CreateRouteRequest,
4853
marshal_CreateVPCRequest,
4954
marshal_DeleteSubnetsRequest,
5055
marshal_MigrateZonalPrivateNetworksRequest,
5156
marshal_SetSubnetsRequest,
5257
marshal_UpdatePrivateNetworkRequest,
58+
marshal_UpdateRouteRequest,
5359
marshal_UpdateVPCRequest,
5460
)
5561

@@ -973,3 +979,182 @@ async def delete_subnets(
973979

974980
self._throw_on_error(res)
975981
return unmarshal_DeleteSubnetsResponse(res.json())
982+
983+
async def create_route(
984+
self,
985+
*,
986+
description: str,
987+
vpc_id: str,
988+
destination: str,
989+
region: Optional[Region] = None,
990+
tags: Optional[List[str]] = None,
991+
nexthop_resource_id: Optional[str] = None,
992+
nexthop_private_network_id: Optional[str] = None,
993+
) -> Route:
994+
"""
995+
Create a Route.
996+
Create a new custom Route.
997+
:param description: Route description.
998+
:param vpc_id: VPC the Route belongs to.
999+
:param destination: Destination of the Route.
1000+
:param region: Region to target. If none is passed will use default region from the config.
1001+
:param tags: Tags of the Route.
1002+
:param nexthop_resource_id: ID of the nexthop resource.
1003+
:param nexthop_private_network_id: ID of the nexthop private network.
1004+
:return: :class:`Route <Route>`
1005+
1006+
Usage:
1007+
::
1008+
1009+
result = await api.create_route(
1010+
description="example",
1011+
vpc_id="example",
1012+
destination="example",
1013+
)
1014+
"""
1015+
1016+
param_region = validate_path_param(
1017+
"region", region or self.client.default_region
1018+
)
1019+
1020+
res = self._request(
1021+
"POST",
1022+
f"/vpc/v2/regions/{param_region}/routes",
1023+
body=marshal_CreateRouteRequest(
1024+
CreateRouteRequest(
1025+
description=description,
1026+
vpc_id=vpc_id,
1027+
destination=destination,
1028+
region=region,
1029+
tags=tags,
1030+
nexthop_resource_id=nexthop_resource_id,
1031+
nexthop_private_network_id=nexthop_private_network_id,
1032+
),
1033+
self.client,
1034+
),
1035+
)
1036+
1037+
self._throw_on_error(res)
1038+
return unmarshal_Route(res.json())
1039+
1040+
async def get_route(
1041+
self,
1042+
*,
1043+
route_id: str,
1044+
region: Optional[Region] = None,
1045+
) -> Route:
1046+
"""
1047+
Get a Route.
1048+
Retrieve details of an existing Route, specified by its Route ID.
1049+
:param route_id: Route ID.
1050+
:param region: Region to target. If none is passed will use default region from the config.
1051+
:return: :class:`Route <Route>`
1052+
1053+
Usage:
1054+
::
1055+
1056+
result = await api.get_route(
1057+
route_id="example",
1058+
)
1059+
"""
1060+
1061+
param_region = validate_path_param(
1062+
"region", region or self.client.default_region
1063+
)
1064+
param_route_id = validate_path_param("route_id", route_id)
1065+
1066+
res = self._request(
1067+
"GET",
1068+
f"/vpc/v2/regions/{param_region}/routes/{param_route_id}",
1069+
)
1070+
1071+
self._throw_on_error(res)
1072+
return unmarshal_Route(res.json())
1073+
1074+
async def update_route(
1075+
self,
1076+
*,
1077+
route_id: str,
1078+
region: Optional[Region] = None,
1079+
description: Optional[str] = None,
1080+
tags: Optional[List[str]] = None,
1081+
destination: Optional[str] = None,
1082+
nexthop_resource_id: Optional[str] = None,
1083+
nexthop_private_network_id: Optional[str] = None,
1084+
) -> Route:
1085+
"""
1086+
Update Route.
1087+
Update parameters of the specified Route.
1088+
:param route_id: Route ID.
1089+
:param region: Region to target. If none is passed will use default region from the config.
1090+
:param description: Route description.
1091+
:param tags: Tags of the Route.
1092+
:param destination: Destination of the Route.
1093+
:param nexthop_resource_id: ID of the nexthop resource.
1094+
:param nexthop_private_network_id: ID of the nexthop private network.
1095+
:return: :class:`Route <Route>`
1096+
1097+
Usage:
1098+
::
1099+
1100+
result = await api.update_route(
1101+
route_id="example",
1102+
)
1103+
"""
1104+
1105+
param_region = validate_path_param(
1106+
"region", region or self.client.default_region
1107+
)
1108+
param_route_id = validate_path_param("route_id", route_id)
1109+
1110+
res = self._request(
1111+
"PATCH",
1112+
f"/vpc/v2/regions/{param_region}/routes/{param_route_id}",
1113+
body=marshal_UpdateRouteRequest(
1114+
UpdateRouteRequest(
1115+
route_id=route_id,
1116+
region=region,
1117+
description=description,
1118+
tags=tags,
1119+
destination=destination,
1120+
nexthop_resource_id=nexthop_resource_id,
1121+
nexthop_private_network_id=nexthop_private_network_id,
1122+
),
1123+
self.client,
1124+
),
1125+
)
1126+
1127+
self._throw_on_error(res)
1128+
return unmarshal_Route(res.json())
1129+
1130+
async def delete_route(
1131+
self,
1132+
*,
1133+
route_id: str,
1134+
region: Optional[Region] = None,
1135+
) -> None:
1136+
"""
1137+
Delete a Route.
1138+
Delete a Route specified by its Route ID.
1139+
:param route_id: Route ID.
1140+
:param region: Region to target. If none is passed will use default region from the config.
1141+
1142+
Usage:
1143+
::
1144+
1145+
result = await api.delete_route(
1146+
route_id="example",
1147+
)
1148+
"""
1149+
1150+
param_region = validate_path_param(
1151+
"region", region or self.client.default_region
1152+
)
1153+
param_route_id = validate_path_param("route_id", route_id)
1154+
1155+
res = self._request(
1156+
"DELETE",
1157+
f"/vpc/v2/regions/{param_region}/routes/{param_route_id}",
1158+
)
1159+
1160+
self._throw_on_error(res)

0 commit comments

Comments
 (0)