Skip to content

Commit e3062c0

Browse files
feat(vpc): set acl calls to public visibility (#913)
Co-authored-by: Jonathan R. <jremy@scaleway.com>
1 parent c96da69 commit e3062c0

File tree

8 files changed

+782
-0
lines changed

8 files changed

+782
-0
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
# This file was automatically generated. DO NOT EDIT.
22
# If you have any remark or suggestion do not hesitate to open an issue.
3+
from .types import AclRuleProtocol
4+
from .types import Action
35
from .types import ListPrivateNetworksRequestOrderBy
46
from .types import ListSubnetsRequestOrderBy
57
from .types import ListVPCsRequestOrderBy
68
from .types import Subnet
79
from .types import PrivateNetwork
810
from .types import Route
11+
from .types import AclRule
912
from .types import VPC
1013
from .types import AddSubnetsRequest
1114
from .types import AddSubnetsResponse
@@ -19,6 +22,8 @@
1922
from .types import DeleteVPCRequest
2023
from .types import EnableDHCPRequest
2124
from .types import EnableRoutingRequest
25+
from .types import GetAclRequest
26+
from .types import GetAclResponse
2227
from .types import GetPrivateNetworkRequest
2328
from .types import GetRouteRequest
2429
from .types import GetVPCRequest
@@ -28,6 +33,8 @@
2833
from .types import ListSubnetsResponse
2934
from .types import ListVPCsRequest
3035
from .types import ListVPCsResponse
36+
from .types import SetAclRequest
37+
from .types import SetAclResponse
3138
from .types import SetSubnetsRequest
3239
from .types import SetSubnetsResponse
3340
from .types import UpdatePrivateNetworkRequest
@@ -36,12 +43,15 @@
3643
from .api import VpcV2API
3744

3845
__all__ = [
46+
"AclRuleProtocol",
47+
"Action",
3948
"ListPrivateNetworksRequestOrderBy",
4049
"ListSubnetsRequestOrderBy",
4150
"ListVPCsRequestOrderBy",
4251
"Subnet",
4352
"PrivateNetwork",
4453
"Route",
54+
"AclRule",
4555
"VPC",
4656
"AddSubnetsRequest",
4757
"AddSubnetsResponse",
@@ -55,6 +65,8 @@
5565
"DeleteVPCRequest",
5666
"EnableDHCPRequest",
5767
"EnableRoutingRequest",
68+
"GetAclRequest",
69+
"GetAclResponse",
5870
"GetPrivateNetworkRequest",
5971
"GetRouteRequest",
6072
"GetVPCRequest",
@@ -64,6 +76,8 @@
6476
"ListSubnetsResponse",
6577
"ListVPCsRequest",
6678
"ListVPCsResponse",
79+
"SetAclRequest",
80+
"SetAclResponse",
6781
"SetSubnetsRequest",
6882
"SetSubnetsResponse",
6983
"UpdatePrivateNetworkRequest",

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

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,26 @@
1313
fetch_all_pages_async,
1414
)
1515
from .types import (
16+
Action,
1617
ListPrivateNetworksRequestOrderBy,
1718
ListSubnetsRequestOrderBy,
1819
ListVPCsRequestOrderBy,
20+
AclRule,
1921
AddSubnetsRequest,
2022
AddSubnetsResponse,
2123
CreatePrivateNetworkRequest,
2224
CreateRouteRequest,
2325
CreateVPCRequest,
2426
DeleteSubnetsRequest,
2527
DeleteSubnetsResponse,
28+
GetAclResponse,
2629
ListPrivateNetworksResponse,
2730
ListSubnetsResponse,
2831
ListVPCsResponse,
2932
PrivateNetwork,
3033
Route,
34+
SetAclRequest,
35+
SetAclResponse,
3136
SetSubnetsRequest,
3237
SetSubnetsResponse,
3338
Subnet,
@@ -42,15 +47,18 @@
4247
unmarshal_VPC,
4348
unmarshal_AddSubnetsResponse,
4449
unmarshal_DeleteSubnetsResponse,
50+
unmarshal_GetAclResponse,
4551
unmarshal_ListPrivateNetworksResponse,
4652
unmarshal_ListSubnetsResponse,
4753
unmarshal_ListVPCsResponse,
54+
unmarshal_SetAclResponse,
4855
unmarshal_SetSubnetsResponse,
4956
marshal_AddSubnetsRequest,
5057
marshal_CreatePrivateNetworkRequest,
5158
marshal_CreateRouteRequest,
5259
marshal_CreateVPCRequest,
5360
marshal_DeleteSubnetsRequest,
61+
marshal_SetAclRequest,
5462
marshal_SetSubnetsRequest,
5563
marshal_UpdatePrivateNetworkRequest,
5664
marshal_UpdateRouteRequest,
@@ -1112,3 +1120,96 @@ async def delete_route(
11121120
)
11131121

11141122
self._throw_on_error(res)
1123+
1124+
async def get_acl(
1125+
self,
1126+
*,
1127+
vpc_id: str,
1128+
is_ipv6: bool,
1129+
region: Optional[ScwRegion] = None,
1130+
) -> GetAclResponse:
1131+
"""
1132+
Get Acl Rules for VPC.
1133+
Retrieve a list of ACL rules for a VPC, specified by its VPC ID.
1134+
:param vpc_id: ID of the Network ACL's VPC.
1135+
:param is_ipv6: Defines whether this set of ACL rules is for IPv6 (false = IPv4). Each Network ACL can have rules for only one IP type.
1136+
:param region: Region to target. If none is passed will use default region from the config.
1137+
:return: :class:`GetAclResponse <GetAclResponse>`
1138+
1139+
Usage:
1140+
::
1141+
1142+
result = await api.get_acl(
1143+
vpc_id="example",
1144+
is_ipv6=False,
1145+
)
1146+
"""
1147+
1148+
param_region = validate_path_param(
1149+
"region", region or self.client.default_region
1150+
)
1151+
param_vpc_id = validate_path_param("vpc_id", vpc_id)
1152+
1153+
res = self._request(
1154+
"GET",
1155+
f"/vpc/v2/regions/{param_region}/vpc/{param_vpc_id}/acl-rules",
1156+
params={
1157+
"is_ipv6": is_ipv6,
1158+
},
1159+
)
1160+
1161+
self._throw_on_error(res)
1162+
return unmarshal_GetAclResponse(res.json())
1163+
1164+
async def set_acl(
1165+
self,
1166+
*,
1167+
vpc_id: str,
1168+
rules: List[AclRule],
1169+
is_ipv6: bool,
1170+
default_policy: Action,
1171+
region: Optional[ScwRegion] = None,
1172+
) -> SetAclResponse:
1173+
"""
1174+
Set VPC ACL rules.
1175+
Set the list of ACL rules and the default routing policy for a VPC.
1176+
:param vpc_id: ID of the Network ACL's VPC.
1177+
:param rules: List of Network ACL rules.
1178+
:param is_ipv6: Defines whether this set of ACL rules is for IPv6 (false = IPv4). Each Network ACL can have rules for only one IP type.
1179+
:param default_policy: Action to take for packets which do not match any rules.
1180+
:param region: Region to target. If none is passed will use default region from the config.
1181+
:return: :class:`SetAclResponse <SetAclResponse>`
1182+
1183+
Usage:
1184+
::
1185+
1186+
result = await api.set_acl(
1187+
vpc_id="example",
1188+
rules=[],
1189+
is_ipv6=False,
1190+
default_policy=Action.unknown_action,
1191+
)
1192+
"""
1193+
1194+
param_region = validate_path_param(
1195+
"region", region or self.client.default_region
1196+
)
1197+
param_vpc_id = validate_path_param("vpc_id", vpc_id)
1198+
1199+
res = self._request(
1200+
"PUT",
1201+
f"/vpc/v2/regions/{param_region}/vpc/{param_vpc_id}/acl-rules",
1202+
body=marshal_SetAclRequest(
1203+
SetAclRequest(
1204+
vpc_id=vpc_id,
1205+
rules=rules,
1206+
is_ipv6=is_ipv6,
1207+
default_policy=default_policy,
1208+
region=region,
1209+
),
1210+
self.client,
1211+
),
1212+
)
1213+
1214+
self._throw_on_error(res)
1215+
return unmarshal_SetAclResponse(res.json())

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

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,19 @@
1212
VPC,
1313
AddSubnetsResponse,
1414
DeleteSubnetsResponse,
15+
AclRule,
16+
GetAclResponse,
1517
ListPrivateNetworksResponse,
1618
ListSubnetsResponse,
1719
ListVPCsResponse,
20+
SetAclResponse,
1821
SetSubnetsResponse,
1922
AddSubnetsRequest,
2023
CreatePrivateNetworkRequest,
2124
CreateRouteRequest,
2225
CreateVPCRequest,
2326
DeleteSubnetsRequest,
27+
SetAclRequest,
2428
SetSubnetsRequest,
2529
UpdatePrivateNetworkRequest,
2630
UpdateRouteRequest,
@@ -284,6 +288,76 @@ def unmarshal_DeleteSubnetsResponse(data: Any) -> DeleteSubnetsResponse:
284288
return DeleteSubnetsResponse(**args)
285289

286290

291+
def unmarshal_AclRule(data: Any) -> AclRule:
292+
if not isinstance(data, dict):
293+
raise TypeError(
294+
"Unmarshalling the type 'AclRule' failed as data isn't a dictionary."
295+
)
296+
297+
args: Dict[str, Any] = {}
298+
299+
field = data.get("protocol", None)
300+
if field is not None:
301+
args["protocol"] = field
302+
303+
field = data.get("source", None)
304+
if field is not None:
305+
args["source"] = field
306+
307+
field = data.get("src_port_low", None)
308+
if field is not None:
309+
args["src_port_low"] = field
310+
311+
field = data.get("src_port_high", None)
312+
if field is not None:
313+
args["src_port_high"] = field
314+
315+
field = data.get("destination", None)
316+
if field is not None:
317+
args["destination"] = field
318+
319+
field = data.get("dst_port_low", None)
320+
if field is not None:
321+
args["dst_port_low"] = field
322+
323+
field = data.get("dst_port_high", None)
324+
if field is not None:
325+
args["dst_port_high"] = field
326+
327+
field = data.get("action", None)
328+
if field is not None:
329+
args["action"] = field
330+
331+
field = data.get("description", None)
332+
if field is not None:
333+
args["description"] = field
334+
else:
335+
args["description"] = None
336+
337+
return AclRule(**args)
338+
339+
340+
def unmarshal_GetAclResponse(data: Any) -> GetAclResponse:
341+
if not isinstance(data, dict):
342+
raise TypeError(
343+
"Unmarshalling the type 'GetAclResponse' failed as data isn't a dictionary."
344+
)
345+
346+
args: Dict[str, Any] = {}
347+
348+
field = data.get("rules", None)
349+
if field is not None:
350+
args["rules"] = (
351+
[unmarshal_AclRule(v) for v in field] if field is not None else None
352+
)
353+
354+
field = data.get("default_policy", None)
355+
if field is not None:
356+
args["default_policy"] = field
357+
358+
return GetAclResponse(**args)
359+
360+
287361
def unmarshal_ListPrivateNetworksResponse(data: Any) -> ListPrivateNetworksResponse:
288362
if not isinstance(data, dict):
289363
raise TypeError(
@@ -345,6 +419,27 @@ def unmarshal_ListVPCsResponse(data: Any) -> ListVPCsResponse:
345419
return ListVPCsResponse(**args)
346420

347421

422+
def unmarshal_SetAclResponse(data: Any) -> SetAclResponse:
423+
if not isinstance(data, dict):
424+
raise TypeError(
425+
"Unmarshalling the type 'SetAclResponse' failed as data isn't a dictionary."
426+
)
427+
428+
args: Dict[str, Any] = {}
429+
430+
field = data.get("rules", None)
431+
if field is not None:
432+
args["rules"] = (
433+
[unmarshal_AclRule(v) for v in field] if field is not None else None
434+
)
435+
436+
field = data.get("default_policy", None)
437+
if field is not None:
438+
args["default_policy"] = field
439+
440+
return SetAclResponse(**args)
441+
442+
348443
def unmarshal_SetSubnetsResponse(data: Any) -> SetSubnetsResponse:
349444
if not isinstance(data, dict):
350445
raise TypeError(
@@ -456,6 +551,60 @@ def marshal_DeleteSubnetsRequest(
456551
return output
457552

458553

554+
def marshal_AclRule(
555+
request: AclRule,
556+
defaults: ProfileDefaults,
557+
) -> Dict[str, Any]:
558+
output: Dict[str, Any] = {}
559+
560+
if request.protocol is not None:
561+
output["protocol"] = str(request.protocol)
562+
563+
if request.source is not None:
564+
output["source"] = request.source
565+
566+
if request.src_port_low is not None:
567+
output["src_port_low"] = request.src_port_low
568+
569+
if request.src_port_high is not None:
570+
output["src_port_high"] = request.src_port_high
571+
572+
if request.destination is not None:
573+
output["destination"] = request.destination
574+
575+
if request.dst_port_low is not None:
576+
output["dst_port_low"] = request.dst_port_low
577+
578+
if request.dst_port_high is not None:
579+
output["dst_port_high"] = request.dst_port_high
580+
581+
if request.action is not None:
582+
output["action"] = str(request.action)
583+
584+
if request.description is not None:
585+
output["description"] = request.description
586+
587+
return output
588+
589+
590+
def marshal_SetAclRequest(
591+
request: SetAclRequest,
592+
defaults: ProfileDefaults,
593+
) -> Dict[str, Any]:
594+
output: Dict[str, Any] = {}
595+
596+
if request.rules is not None:
597+
output["rules"] = [marshal_AclRule(item, defaults) for item in request.rules]
598+
599+
if request.is_ipv6 is not None:
600+
output["is_ipv6"] = request.is_ipv6
601+
602+
if request.default_policy is not None:
603+
output["default_policy"] = str(request.default_policy)
604+
605+
return output
606+
607+
459608
def marshal_SetSubnetsRequest(
460609
request: SetSubnetsRequest,
461610
defaults: ProfileDefaults,

0 commit comments

Comments
 (0)