Skip to content

Commit 31f1ed0

Browse files
feat(vpcgw): add support BastionAllowedIPs (scaleway#826)
Co-authored-by: Laure-di <[email protected]>
1 parent aa28d42 commit 31f1ed0

File tree

8 files changed

+626
-78
lines changed

8 files changed

+626
-78
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
from .types import Gateway
1616
from .types import PatRule
1717
from .types import SetPatRulesRequestRule
18+
from .types import AddBastionAllowedIPsRequest
19+
from .types import AddBastionAllowedIPsResponse
1820
from .types import CreateGatewayNetworkRequest
1921
from .types import CreateGatewayRequest
2022
from .types import CreateIPRequest
2123
from .types import CreatePatRuleRequest
24+
from .types import DeleteBastionAllowedIPsRequest
2225
from .types import DeleteGatewayNetworkRequest
2326
from .types import DeleteGatewayRequest
2427
from .types import DeleteIPRequest
@@ -38,6 +41,8 @@
3841
from .types import ListPatRulesRequest
3942
from .types import ListPatRulesResponse
4043
from .types import RefreshSSHKeysRequest
44+
from .types import SetBastionAllowedIPsRequest
45+
from .types import SetBastionAllowedIPsResponse
4146
from .types import SetPatRulesRequest
4247
from .types import SetPatRulesResponse
4348
from .types import UpdateGatewayNetworkRequest
@@ -63,10 +68,13 @@
6368
"Gateway",
6469
"PatRule",
6570
"SetPatRulesRequestRule",
71+
"AddBastionAllowedIPsRequest",
72+
"AddBastionAllowedIPsResponse",
6673
"CreateGatewayNetworkRequest",
6774
"CreateGatewayRequest",
6875
"CreateIPRequest",
6976
"CreatePatRuleRequest",
77+
"DeleteBastionAllowedIPsRequest",
7078
"DeleteGatewayNetworkRequest",
7179
"DeleteGatewayRequest",
7280
"DeleteIPRequest",
@@ -86,6 +94,8 @@
8694
"ListPatRulesRequest",
8795
"ListPatRulesResponse",
8896
"RefreshSSHKeysRequest",
97+
"SetBastionAllowedIPsRequest",
98+
"SetBastionAllowedIPsResponse",
8999
"SetPatRulesRequest",
90100
"SetPatRulesResponse",
91101
"UpdateGatewayNetworkRequest",

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

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
ListIPsRequestOrderBy,
2323
ListPatRulesRequestOrderBy,
2424
PatRuleProtocol,
25+
AddBastionAllowedIPsRequest,
26+
AddBastionAllowedIPsResponse,
2527
CreateGatewayNetworkRequest,
2628
CreateGatewayRequest,
2729
CreateIPRequest,
@@ -35,6 +37,8 @@
3537
ListIPsResponse,
3638
ListPatRulesResponse,
3739
PatRule,
40+
SetBastionAllowedIPsRequest,
41+
SetBastionAllowedIPsResponse,
3842
SetPatRulesRequest,
3943
SetPatRulesRequestRule,
4044
SetPatRulesResponse,
@@ -53,16 +57,20 @@
5357
unmarshal_IP,
5458
unmarshal_Gateway,
5559
unmarshal_PatRule,
60+
unmarshal_AddBastionAllowedIPsResponse,
5661
unmarshal_ListGatewayNetworksResponse,
5762
unmarshal_ListGatewayTypesResponse,
5863
unmarshal_ListGatewaysResponse,
5964
unmarshal_ListIPsResponse,
6065
unmarshal_ListPatRulesResponse,
66+
unmarshal_SetBastionAllowedIPsResponse,
6167
unmarshal_SetPatRulesResponse,
68+
marshal_AddBastionAllowedIPsRequest,
6269
marshal_CreateGatewayNetworkRequest,
6370
marshal_CreateGatewayRequest,
6471
marshal_CreateIPRequest,
6572
marshal_CreatePatRuleRequest,
73+
marshal_SetBastionAllowedIPsRequest,
6674
marshal_SetPatRulesRequest,
6775
marshal_UpdateGatewayNetworkRequest,
6876
marshal_UpdateGatewayRequest,
@@ -1383,3 +1391,122 @@ async def refresh_ssh_keys(
13831391

13841392
self._throw_on_error(res)
13851393
return unmarshal_Gateway(res.json())
1394+
1395+
async def add_bastion_allowed_i_ps(
1396+
self,
1397+
*,
1398+
gateway_id: str,
1399+
ip_range: str,
1400+
zone: Optional[Zone] = None,
1401+
) -> AddBastionAllowedIPsResponse:
1402+
"""
1403+
Add allowed IP range to SSH bastion.
1404+
Add an IP range (in CIDR notation) to be allowed to connect to the SSH bastion.
1405+
:param gateway_id: ID of the gateway to add the allowed IP range to.
1406+
:param ip_range: IP range allowed to connect to the SSH bastion.
1407+
:param zone: Zone to target. If none is passed will use default zone from the config.
1408+
:return: :class:`AddBastionAllowedIPsResponse <AddBastionAllowedIPsResponse>`
1409+
1410+
Usage:
1411+
::
1412+
1413+
result = await api.add_bastion_allowed_i_ps(
1414+
gateway_id="example",
1415+
ip_range="example",
1416+
)
1417+
"""
1418+
1419+
param_zone = validate_path_param("zone", zone or self.client.default_zone)
1420+
param_gateway_id = validate_path_param("gateway_id", gateway_id)
1421+
1422+
res = self._request(
1423+
"POST",
1424+
f"/vpc-gw/v2/zones/{param_zone}/gateways/{param_gateway_id}/bastion-allowed-ips",
1425+
body=marshal_AddBastionAllowedIPsRequest(
1426+
AddBastionAllowedIPsRequest(
1427+
gateway_id=gateway_id,
1428+
ip_range=ip_range,
1429+
zone=zone,
1430+
),
1431+
self.client,
1432+
),
1433+
)
1434+
1435+
self._throw_on_error(res)
1436+
return unmarshal_AddBastionAllowedIPsResponse(res.json())
1437+
1438+
async def set_bastion_allowed_i_ps(
1439+
self,
1440+
*,
1441+
gateway_id: str,
1442+
zone: Optional[Zone] = None,
1443+
ip_ranges: Optional[List[str]] = None,
1444+
) -> SetBastionAllowedIPsResponse:
1445+
"""
1446+
Set all IP ranges allowed for SSH bastion.
1447+
Set a definitive list of IP ranges (in CIDR notation) allowed to connect to the SSH bastion.
1448+
:param gateway_id: ID of the gateway on which to set the allowed IP range.
1449+
:param zone: Zone to target. If none is passed will use default zone from the config.
1450+
:param ip_ranges: New list of IP ranges (each range in CIDR notation) allowed to connect to the SSH bastion.
1451+
:return: :class:`SetBastionAllowedIPsResponse <SetBastionAllowedIPsResponse>`
1452+
1453+
Usage:
1454+
::
1455+
1456+
result = await api.set_bastion_allowed_i_ps(
1457+
gateway_id="example",
1458+
)
1459+
"""
1460+
1461+
param_zone = validate_path_param("zone", zone or self.client.default_zone)
1462+
param_gateway_id = validate_path_param("gateway_id", gateway_id)
1463+
1464+
res = self._request(
1465+
"PUT",
1466+
f"/vpc-gw/v2/zones/{param_zone}/gateways/{param_gateway_id}/bastion-allowed-ips",
1467+
body=marshal_SetBastionAllowedIPsRequest(
1468+
SetBastionAllowedIPsRequest(
1469+
gateway_id=gateway_id,
1470+
zone=zone,
1471+
ip_ranges=ip_ranges,
1472+
),
1473+
self.client,
1474+
),
1475+
)
1476+
1477+
self._throw_on_error(res)
1478+
return unmarshal_SetBastionAllowedIPsResponse(res.json())
1479+
1480+
async def delete_bastion_allowed_i_ps(
1481+
self,
1482+
*,
1483+
gateway_id: str,
1484+
ip_range: str,
1485+
zone: Optional[Zone] = None,
1486+
) -> None:
1487+
"""
1488+
Delete allowed IP range from SSH bastion.
1489+
Delete an IP range (defined in CIDR notation) from SSH bastion, so that it is no longer allowed to connect.
1490+
:param gateway_id: ID of the gateway on which to delete the allowed IP range.
1491+
:param ip_range: IP range to delete from SSH bastion's list of allowed IPs.
1492+
:param zone: Zone to target. If none is passed will use default zone from the config.
1493+
1494+
Usage:
1495+
::
1496+
1497+
result = await api.delete_bastion_allowed_i_ps(
1498+
gateway_id="example",
1499+
ip_range="example",
1500+
)
1501+
"""
1502+
1503+
param_zone = validate_path_param("zone", zone or self.client.default_zone)
1504+
param_gateway_id = validate_path_param("gateway_id", gateway_id)
1505+
param_ip_range = validate_path_param("ip_range", ip_range)
1506+
1507+
res = self._request(
1508+
"DELETE",
1509+
f"/vpc-gw/v2/zones/{param_zone}/gateways/{param_gateway_id}/bastion-allowed-ips/{param_ip_range}",
1510+
)
1511+
1512+
self._throw_on_error(res)

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

Lines changed: 82 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@
1010
IP,
1111
Gateway,
1212
PatRule,
13+
AddBastionAllowedIPsResponse,
1314
ListGatewayNetworksResponse,
1415
GatewayType,
1516
ListGatewayTypesResponse,
1617
ListGatewaysResponse,
1718
ListIPsResponse,
1819
ListPatRulesResponse,
20+
SetBastionAllowedIPsResponse,
1921
SetPatRulesResponse,
22+
AddBastionAllowedIPsRequest,
2023
CreateGatewayNetworkRequest,
2124
CreateGatewayRequest,
2225
CreateIPRequest,
2326
CreatePatRuleRequest,
27+
SetBastionAllowedIPsRequest,
2428
SetPatRulesRequestRule,
2529
SetPatRulesRequest,
2630
UpdateGatewayNetworkRequest,
@@ -183,6 +187,10 @@ def unmarshal_Gateway(data: Any) -> Gateway:
183187
if field is not None:
184188
args["status"] = field
185189

190+
field = data.get("name", None)
191+
if field is not None:
192+
args["name"] = field
193+
186194
field = data.get("created_at", None)
187195
if field is not None:
188196
args["created_at"] = parser.isoparse(field) if isinstance(field, str) else field
@@ -195,10 +203,6 @@ def unmarshal_Gateway(data: Any) -> Gateway:
195203
else:
196204
args["updated_at"] = None
197205

198-
field = data.get("name", None)
199-
if field is not None:
200-
args["name"] = field
201-
202206
field = data.get("tags", None)
203207
if field is not None:
204208
args["tags"] = field
@@ -213,22 +217,6 @@ def unmarshal_Gateway(data: Any) -> Gateway:
213217
if field is not None:
214218
args["bastion_enabled"] = field
215219

216-
field = data.get("bastion_port", None)
217-
if field is not None:
218-
args["bastion_port"] = field
219-
220-
field = data.get("smtp_enabled", None)
221-
if field is not None:
222-
args["smtp_enabled"] = field
223-
224-
field = data.get("is_legacy", None)
225-
if field is not None:
226-
args["is_legacy"] = field
227-
228-
field = data.get("zone", None)
229-
if field is not None:
230-
args["zone"] = field
231-
232220
field = data.get("ipv4", None)
233221
if field is not None:
234222
args["ipv4"] = unmarshal_IP(field)
@@ -247,6 +235,26 @@ def unmarshal_Gateway(data: Any) -> Gateway:
247235
else:
248236
args["can_upgrade_to"] = None
249237

238+
field = data.get("bastion_port", None)
239+
if field is not None:
240+
args["bastion_port"] = field
241+
242+
field = data.get("smtp_enabled", None)
243+
if field is not None:
244+
args["smtp_enabled"] = field
245+
246+
field = data.get("is_legacy", None)
247+
if field is not None:
248+
args["is_legacy"] = field
249+
250+
field = data.get("bastion_allowed_ips", None)
251+
if field is not None:
252+
args["bastion_allowed_ips"] = field
253+
254+
field = data.get("zone", None)
255+
if field is not None:
256+
args["zone"] = field
257+
250258
return Gateway(**args)
251259

252260

@@ -301,6 +309,21 @@ def unmarshal_PatRule(data: Any) -> PatRule:
301309
return PatRule(**args)
302310

303311

312+
def unmarshal_AddBastionAllowedIPsResponse(data: Any) -> AddBastionAllowedIPsResponse:
313+
if not isinstance(data, dict):
314+
raise TypeError(
315+
"Unmarshalling the type 'AddBastionAllowedIPsResponse' failed as data isn't a dictionary."
316+
)
317+
318+
args: Dict[str, Any] = {}
319+
320+
field = data.get("ip_ranges", None)
321+
if field is not None:
322+
args["ip_ranges"] = field
323+
324+
return AddBastionAllowedIPsResponse(**args)
325+
326+
304327
def unmarshal_ListGatewayNetworksResponse(data: Any) -> ListGatewayNetworksResponse:
305328
if not isinstance(data, dict):
306329
raise TypeError(
@@ -423,6 +446,21 @@ def unmarshal_ListPatRulesResponse(data: Any) -> ListPatRulesResponse:
423446
return ListPatRulesResponse(**args)
424447

425448

449+
def unmarshal_SetBastionAllowedIPsResponse(data: Any) -> SetBastionAllowedIPsResponse:
450+
if not isinstance(data, dict):
451+
raise TypeError(
452+
"Unmarshalling the type 'SetBastionAllowedIPsResponse' failed as data isn't a dictionary."
453+
)
454+
455+
args: Dict[str, Any] = {}
456+
457+
field = data.get("ip_ranges", None)
458+
if field is not None:
459+
args["ip_ranges"] = field
460+
461+
return SetBastionAllowedIPsResponse(**args)
462+
463+
426464
def unmarshal_SetPatRulesResponse(data: Any) -> SetPatRulesResponse:
427465
if not isinstance(data, dict):
428466
raise TypeError(
@@ -440,6 +478,18 @@ def unmarshal_SetPatRulesResponse(data: Any) -> SetPatRulesResponse:
440478
return SetPatRulesResponse(**args)
441479

442480

481+
def marshal_AddBastionAllowedIPsRequest(
482+
request: AddBastionAllowedIPsRequest,
483+
defaults: ProfileDefaults,
484+
) -> Dict[str, Any]:
485+
output: Dict[str, Any] = {}
486+
487+
if request.ip_range is not None:
488+
output["ip_range"] = request.ip_range
489+
490+
return output
491+
492+
443493
def marshal_CreateGatewayNetworkRequest(
444494
request: CreateGatewayNetworkRequest,
445495
defaults: ProfileDefaults,
@@ -536,6 +586,18 @@ def marshal_CreatePatRuleRequest(
536586
return output
537587

538588

589+
def marshal_SetBastionAllowedIPsRequest(
590+
request: SetBastionAllowedIPsRequest,
591+
defaults: ProfileDefaults,
592+
) -> Dict[str, Any]:
593+
output: Dict[str, Any] = {}
594+
595+
if request.ip_ranges is not None:
596+
output["ip_ranges"] = request.ip_ranges
597+
598+
return output
599+
600+
539601
def marshal_SetPatRulesRequestRule(
540602
request: SetPatRulesRequestRule,
541603
defaults: ProfileDefaults,

0 commit comments

Comments
 (0)