Skip to content

Commit 8ad8ff7

Browse files
authored
feat(ipam): allow publicly to set a custom reverse on their ip (#409)
1 parent cee9863 commit 8ad8ff7

File tree

8 files changed

+148
-0
lines changed

8 files changed

+148
-0
lines changed

scaleway-async/scaleway_async/ipam/v1/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .types import IP
66
from .types import ListIPsResponse
77
from .types import Resource
8+
from .types import Reverse
89
from .types import Source
910
from .api import IpamV1API
1011

@@ -14,6 +15,7 @@
1415
"IP",
1516
"ListIPsResponse",
1617
"Resource",
18+
"Reverse",
1719
"Source",
1820
"IpamV1API",
1921
]

scaleway-async/scaleway_async/ipam/v1/api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
ResourceType,
1919
IP,
2020
ListIPsResponse,
21+
Reverse,
2122
Source,
2223
BookIPRequest,
2324
UpdateIPRequest,
@@ -159,13 +160,15 @@ async def update_ip(
159160
ip_id: str,
160161
region: Optional[Region] = None,
161162
tags: Optional[List[str]] = None,
163+
reverses: Optional[List[Reverse]] = None,
162164
) -> IP:
163165
"""
164166
Update an IP.
165167
Update parameters including tags of the specified IP.
166168
:param region: Region to target. If none is passed will use default region from the config.
167169
:param ip_id: IP ID.
168170
:param tags: Tags for the IP.
171+
:param reverses: Array of reverse domain names associated with an IP in the subnet of the current IP.
169172
:return: :class:`IP <IP>`
170173
171174
Usage:
@@ -187,6 +190,7 @@ async def update_ip(
187190
ip_id=ip_id,
188191
region=region,
189192
tags=tags,
193+
reverses=reverses,
190194
),
191195
self.client,
192196
),

scaleway-async/scaleway_async/ipam/v1/marshalling.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
IP,
1414
ListIPsResponse,
1515
Resource,
16+
Reverse,
1617
Source,
1718
BookIPRequest,
1819
UpdateIPRequest,
@@ -42,6 +43,23 @@ def unmarshal_Resource(data: Any) -> Resource:
4243
return Resource(**args)
4344

4445

46+
def unmarshal_Reverse(data: Any) -> Reverse:
47+
if type(data) is not dict:
48+
raise TypeError(
49+
f"Unmarshalling the type 'Reverse' failed as data isn't a dictionary."
50+
)
51+
52+
args: Dict[str, Any] = {}
53+
54+
field = data.get("address", None)
55+
args["address"] = field
56+
57+
field = data.get("hostname", None)
58+
args["hostname"] = field
59+
60+
return Reverse(**args)
61+
62+
4563
def unmarshal_Source(data: Any) -> Source:
4664
if type(data) is not dict:
4765
raise TypeError(
@@ -91,6 +109,11 @@ def unmarshal_IP(data: Any) -> IP:
91109
field = data.get("resource", None)
92110
args["resource"] = unmarshal_Resource(field) if field is not None else None
93111

112+
field = data.get("reverses", None)
113+
args["reverses"] = (
114+
[unmarshal_Reverse(v) for v in field] if field is not None else None
115+
)
116+
94117
field = data.get("source", None)
95118
args["source"] = unmarshal_Source(field) if field is not None else None
96119

@@ -123,6 +146,21 @@ def unmarshal_ListIPsResponse(data: Any) -> ListIPsResponse:
123146
return ListIPsResponse(**args)
124147

125148

149+
def marshal_Reverse(
150+
request: Reverse,
151+
defaults: ProfileDefaults,
152+
) -> Dict[str, Any]:
153+
output: Dict[str, Any] = {}
154+
155+
if request.address is not None:
156+
output["address"] = request.address
157+
158+
if request.hostname is not None:
159+
output["hostname"] = request.hostname
160+
161+
return output
162+
163+
126164
def marshal_Source(
127165
request: Source,
128166
defaults: ProfileDefaults,
@@ -181,6 +219,9 @@ def marshal_UpdateIPRequest(
181219
) -> Dict[str, Any]:
182220
output: Dict[str, Any] = {}
183221

222+
if request.reverses is not None:
223+
output["reverses"] = [marshal_Reverse(v, defaults) for v in request.reverses]
224+
184225
if request.tags is not None:
185226
output["tags"] = request.tags
186227

scaleway-async/scaleway_async/ipam/v1/types.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ class IP:
9999
Tags for the IP.
100100
"""
101101

102+
reverses: List[Reverse]
103+
"""
104+
Array of reverses associated with the IP.
105+
"""
106+
102107
region: Region
103108
"""
104109
Region of the IP.
@@ -145,6 +150,23 @@ class Resource:
145150
"""
146151

147152

153+
@dataclass
154+
class Reverse:
155+
"""
156+
Reverse.
157+
"""
158+
159+
hostname: str
160+
"""
161+
Reverse domain name.
162+
"""
163+
164+
address: Optional[str]
165+
"""
166+
IP corresponding to the hostname.
167+
"""
168+
169+
148170
@dataclass
149171
class Source:
150172
"""
@@ -254,6 +276,11 @@ class UpdateIPRequest:
254276
Tags for the IP.
255277
"""
256278

279+
reverses: Optional[List[Reverse]]
280+
"""
281+
Array of reverse domain names associated with an IP in the subnet of the current IP.
282+
"""
283+
257284

258285
@dataclass
259286
class ListIPsRequest:

scaleway/scaleway/ipam/v1/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .types import IP
66
from .types import ListIPsResponse
77
from .types import Resource
8+
from .types import Reverse
89
from .types import Source
910
from .api import IpamV1API
1011

@@ -14,6 +15,7 @@
1415
"IP",
1516
"ListIPsResponse",
1617
"Resource",
18+
"Reverse",
1719
"Source",
1820
"IpamV1API",
1921
]

scaleway/scaleway/ipam/v1/api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
ResourceType,
1919
IP,
2020
ListIPsResponse,
21+
Reverse,
2122
Source,
2223
BookIPRequest,
2324
UpdateIPRequest,
@@ -159,13 +160,15 @@ def update_ip(
159160
ip_id: str,
160161
region: Optional[Region] = None,
161162
tags: Optional[List[str]] = None,
163+
reverses: Optional[List[Reverse]] = None,
162164
) -> IP:
163165
"""
164166
Update an IP.
165167
Update parameters including tags of the specified IP.
166168
:param region: Region to target. If none is passed will use default region from the config.
167169
:param ip_id: IP ID.
168170
:param tags: Tags for the IP.
171+
:param reverses: Array of reverse domain names associated with an IP in the subnet of the current IP.
169172
:return: :class:`IP <IP>`
170173
171174
Usage:
@@ -187,6 +190,7 @@ def update_ip(
187190
ip_id=ip_id,
188191
region=region,
189192
tags=tags,
193+
reverses=reverses,
190194
),
191195
self.client,
192196
),

scaleway/scaleway/ipam/v1/marshalling.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
IP,
1414
ListIPsResponse,
1515
Resource,
16+
Reverse,
1617
Source,
1718
BookIPRequest,
1819
UpdateIPRequest,
@@ -42,6 +43,23 @@ def unmarshal_Resource(data: Any) -> Resource:
4243
return Resource(**args)
4344

4445

46+
def unmarshal_Reverse(data: Any) -> Reverse:
47+
if type(data) is not dict:
48+
raise TypeError(
49+
f"Unmarshalling the type 'Reverse' failed as data isn't a dictionary."
50+
)
51+
52+
args: Dict[str, Any] = {}
53+
54+
field = data.get("address", None)
55+
args["address"] = field
56+
57+
field = data.get("hostname", None)
58+
args["hostname"] = field
59+
60+
return Reverse(**args)
61+
62+
4563
def unmarshal_Source(data: Any) -> Source:
4664
if type(data) is not dict:
4765
raise TypeError(
@@ -91,6 +109,11 @@ def unmarshal_IP(data: Any) -> IP:
91109
field = data.get("resource", None)
92110
args["resource"] = unmarshal_Resource(field) if field is not None else None
93111

112+
field = data.get("reverses", None)
113+
args["reverses"] = (
114+
[unmarshal_Reverse(v) for v in field] if field is not None else None
115+
)
116+
94117
field = data.get("source", None)
95118
args["source"] = unmarshal_Source(field) if field is not None else None
96119

@@ -123,6 +146,21 @@ def unmarshal_ListIPsResponse(data: Any) -> ListIPsResponse:
123146
return ListIPsResponse(**args)
124147

125148

149+
def marshal_Reverse(
150+
request: Reverse,
151+
defaults: ProfileDefaults,
152+
) -> Dict[str, Any]:
153+
output: Dict[str, Any] = {}
154+
155+
if request.address is not None:
156+
output["address"] = request.address
157+
158+
if request.hostname is not None:
159+
output["hostname"] = request.hostname
160+
161+
return output
162+
163+
126164
def marshal_Source(
127165
request: Source,
128166
defaults: ProfileDefaults,
@@ -181,6 +219,9 @@ def marshal_UpdateIPRequest(
181219
) -> Dict[str, Any]:
182220
output: Dict[str, Any] = {}
183221

222+
if request.reverses is not None:
223+
output["reverses"] = [marshal_Reverse(v, defaults) for v in request.reverses]
224+
184225
if request.tags is not None:
185226
output["tags"] = request.tags
186227

scaleway/scaleway/ipam/v1/types.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ class IP:
9999
Tags for the IP.
100100
"""
101101

102+
reverses: List[Reverse]
103+
"""
104+
Array of reverses associated with the IP.
105+
"""
106+
102107
region: Region
103108
"""
104109
Region of the IP.
@@ -145,6 +150,23 @@ class Resource:
145150
"""
146151

147152

153+
@dataclass
154+
class Reverse:
155+
"""
156+
Reverse.
157+
"""
158+
159+
hostname: str
160+
"""
161+
Reverse domain name.
162+
"""
163+
164+
address: Optional[str]
165+
"""
166+
IP corresponding to the hostname.
167+
"""
168+
169+
148170
@dataclass
149171
class Source:
150172
"""
@@ -254,6 +276,11 @@ class UpdateIPRequest:
254276
Tags for the IP.
255277
"""
256278

279+
reverses: Optional[List[Reverse]]
280+
"""
281+
Array of reverse domain names associated with an IP in the subnet of the current IP.
282+
"""
283+
257284

258285
@dataclass
259286
class ListIPsRequest:

0 commit comments

Comments
 (0)