Skip to content

Commit 1efff0a

Browse files
authored
feat(kafka): add a multi-az option on clusters (#1654)
1 parent a32b861 commit 1efff0a

File tree

8 files changed

+250
-4
lines changed

8 files changed

+250
-4
lines changed

scaleway-async/scaleway_async/kafka/v1alpha1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from .types import VersionAvailableSettingStringProperty
1515
from .types import EndpointSpecPrivateNetworkDetails
1616
from .types import EndpointSpecPublicDetails
17+
from .types import ClusterMonoAZDetails
18+
from .types import ClusterMultiAZDetails
1719
from .types import ClusterSetting
1820
from .types import Endpoint
1921
from .types import Volume
@@ -59,6 +61,8 @@
5961
"VersionAvailableSettingStringProperty",
6062
"EndpointSpecPrivateNetworkDetails",
6163
"EndpointSpecPublicDetails",
64+
"ClusterMonoAZDetails",
65+
"ClusterMultiAZDetails",
6266
"ClusterSetting",
6367
"Endpoint",
6468
"Volume",

scaleway-async/scaleway_async/kafka/v1alpha1/api.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
ListClustersRequestOrderBy,
2121
ListUsersRequestOrderBy,
2222
Cluster,
23+
ClusterMonoAZDetails,
24+
ClusterMultiAZDetails,
2325
CreateClusterRequest,
2426
CreateClusterRequestVolumeSpec,
2527
CreateEndpointRequest,
@@ -382,30 +384,36 @@ async def create_cluster(
382384
*,
383385
version: str,
384386
node_amount: int,
385-
node_type: str,
386387
region: Optional[ScwRegion] = None,
387388
project_id: Optional[str] = None,
388389
name: Optional[str] = None,
389390
tags: Optional[list[str]] = None,
391+
node_type: str,
390392
volume: Optional[CreateClusterRequestVolumeSpec] = None,
391393
endpoints: Optional[list[EndpointSpec]] = None,
392394
user_name: Optional[str] = None,
393395
password: Optional[str] = None,
396+
multi_az: Optional[ClusterMultiAZDetails] = None,
397+
mono_az: Optional[ClusterMonoAZDetails] = None,
394398
) -> Cluster:
395399
"""
396400
Create a Kafka cluster.
397401
Create a new Kafka cluster.
398402
:param version: Version of Kafka.
399403
:param node_amount: Number of nodes to use for the Kafka cluster.
400-
:param node_type: Type of node to use for the Kafka cluster.
401404
:param region: Region to target. If none is passed will use default region from the config.
402405
:param project_id: The ID of the Project in which the Kafka cluster will be created.
403406
:param name: Name of the Kafka cluster.
404407
:param tags: Tags to apply to the Kafka cluster.
408+
:param node_type: Type of node to use for the Kafka cluster.
405409
:param volume: Kafka volume information.
406410
:param endpoints: One or multiple EndpointSpec used to expose your Kafka cluster.
407411
:param user_name: Username for the kafka user.
408412
:param password: Password for the kafka user.
413+
:param multi_az: MultiAZ tell the cluster is deployed on multiple availability zones in the region.
414+
One-Of ('availability'): at most one of 'multi_az', 'mono_az' could be set.
415+
:param mono_az: MonoAZ details.
416+
One-Of ('availability'): at most one of 'multi_az', 'mono_az' could be set.
409417
:return: :class:`Cluster <Cluster>`
410418
411419
Usage:
@@ -438,6 +446,8 @@ async def create_cluster(
438446
endpoints=endpoints,
439447
user_name=user_name,
440448
password=password,
449+
multi_az=multi_az,
450+
mono_az=mono_az,
441451
),
442452
self.client,
443453
),

scaleway-async/scaleway_async/kafka/v1alpha1/marshalling.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
EndpointPrivateNetworkDetails,
1717
EndpointPublicDetails,
1818
Endpoint,
19+
ClusterMonoAZDetails,
20+
ClusterMultiAZDetails,
1921
ClusterSetting,
2022
Volume,
2123
Cluster,
@@ -112,6 +114,34 @@ def unmarshal_Endpoint(data: Any) -> Endpoint:
112114
return Endpoint(**args)
113115

114116

117+
def unmarshal_ClusterMonoAZDetails(data: Any) -> ClusterMonoAZDetails:
118+
if not isinstance(data, dict):
119+
raise TypeError(
120+
"Unmarshalling the type 'ClusterMonoAZDetails' failed as data isn't a dictionary."
121+
)
122+
123+
args: dict[str, Any] = {}
124+
125+
field = data.get("zone", None)
126+
if field is not None:
127+
args["zone"] = field
128+
else:
129+
args["zone"] = None
130+
131+
return ClusterMonoAZDetails(**args)
132+
133+
134+
def unmarshal_ClusterMultiAZDetails(data: Any) -> ClusterMultiAZDetails:
135+
if not isinstance(data, dict):
136+
raise TypeError(
137+
"Unmarshalling the type 'ClusterMultiAZDetails' failed as data isn't a dictionary."
138+
)
139+
140+
args: dict[str, Any] = {}
141+
142+
return ClusterMultiAZDetails(**args)
143+
144+
115145
def unmarshal_ClusterSetting(data: Any) -> ClusterSetting:
116146
if not isinstance(data, dict):
117147
raise TypeError(
@@ -278,6 +308,18 @@ def unmarshal_Cluster(data: Any) -> Cluster:
278308
else:
279309
args["updated_at"] = None
280310

311+
field = data.get("multi_az", None)
312+
if field is not None:
313+
args["multi_az"] = unmarshal_ClusterMultiAZDetails(field)
314+
else:
315+
args["multi_az"] = None
316+
317+
field = data.get("mono_az", None)
318+
if field is not None:
319+
args["mono_az"] = unmarshal_ClusterMonoAZDetails(field)
320+
else:
321+
args["mono_az"] = None
322+
281323
return Cluster(**args)
282324

283325

@@ -735,6 +777,27 @@ def marshal_EndpointSpecPublicDetails(
735777
return output
736778

737779

780+
def marshal_ClusterMonoAZDetails(
781+
request: ClusterMonoAZDetails,
782+
defaults: ProfileDefaults,
783+
) -> dict[str, Any]:
784+
output: dict[str, Any] = {}
785+
786+
if request.zone is not None:
787+
output["zone"] = request.zone
788+
789+
return output
790+
791+
792+
def marshal_ClusterMultiAZDetails(
793+
request: ClusterMultiAZDetails,
794+
defaults: ProfileDefaults,
795+
) -> dict[str, Any]:
796+
output: dict[str, Any] = {}
797+
798+
return output
799+
800+
738801
def marshal_CreateClusterRequestVolumeSpec(
739802
request: CreateClusterRequestVolumeSpec,
740803
defaults: ProfileDefaults,
@@ -780,6 +843,22 @@ def marshal_CreateClusterRequest(
780843
defaults: ProfileDefaults,
781844
) -> dict[str, Any]:
782845
output: dict[str, Any] = {}
846+
output.update(
847+
resolve_one_of(
848+
[
849+
OneOfPossibility(
850+
param="multi_az",
851+
value=request.multi_az,
852+
marshal_func=marshal_ClusterMultiAZDetails,
853+
),
854+
OneOfPossibility(
855+
param="mono_az",
856+
value=request.mono_az,
857+
marshal_func=marshal_ClusterMonoAZDetails,
858+
),
859+
]
860+
),
861+
)
783862

784863
if request.version is not None:
785864
output["version"] = request.version

scaleway-async/scaleway_async/kafka/v1alpha1/types.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
from scaleway_core.bridge import (
1111
Region as ScwRegion,
12+
Zone as ScwZone,
1213
)
1314
from scaleway_core.utils import (
1415
StrEnumMeta,
@@ -129,6 +130,27 @@ class EndpointSpecPublicDetails:
129130
pass
130131

131132

133+
@dataclass
134+
class ClusterMonoAZDetails:
135+
"""
136+
MonoAZ details.
137+
"""
138+
139+
zone: Optional[ScwZone] = None
140+
"""
141+
Zone is the zone on which the cluster nodes are deployed.
142+
"""
143+
144+
145+
@dataclass
146+
class ClusterMultiAZDetails:
147+
"""
148+
MultiAZ details.
149+
"""
150+
151+
pass
152+
153+
132154
@dataclass
133155
class ClusterSetting:
134156
name: str
@@ -331,6 +353,10 @@ class Cluster:
331353
Last update date (must follow the ISO 8601 format).
332354
"""
333355

356+
multi_az: Optional[ClusterMultiAZDetails] = None
357+
358+
mono_az: Optional[ClusterMonoAZDetails] = None
359+
334360

335361
@dataclass
336362
class NodeType:
@@ -460,6 +486,10 @@ class CreateClusterRequest:
460486
Password for the kafka user.
461487
"""
462488

489+
multi_az: Optional[ClusterMultiAZDetails] = None
490+
491+
mono_az: Optional[ClusterMonoAZDetails] = None
492+
463493

464494
@dataclass
465495
class CreateEndpointRequest:

scaleway/scaleway/kafka/v1alpha1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from .types import VersionAvailableSettingStringProperty
1515
from .types import EndpointSpecPrivateNetworkDetails
1616
from .types import EndpointSpecPublicDetails
17+
from .types import ClusterMonoAZDetails
18+
from .types import ClusterMultiAZDetails
1719
from .types import ClusterSetting
1820
from .types import Endpoint
1921
from .types import Volume
@@ -59,6 +61,8 @@
5961
"VersionAvailableSettingStringProperty",
6062
"EndpointSpecPrivateNetworkDetails",
6163
"EndpointSpecPublicDetails",
64+
"ClusterMonoAZDetails",
65+
"ClusterMultiAZDetails",
6266
"ClusterSetting",
6367
"Endpoint",
6468
"Volume",

scaleway/scaleway/kafka/v1alpha1/api.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
ListClustersRequestOrderBy,
2121
ListUsersRequestOrderBy,
2222
Cluster,
23+
ClusterMonoAZDetails,
24+
ClusterMultiAZDetails,
2325
CreateClusterRequest,
2426
CreateClusterRequestVolumeSpec,
2527
CreateEndpointRequest,
@@ -382,30 +384,36 @@ def create_cluster(
382384
*,
383385
version: str,
384386
node_amount: int,
385-
node_type: str,
386387
region: Optional[ScwRegion] = None,
387388
project_id: Optional[str] = None,
388389
name: Optional[str] = None,
389390
tags: Optional[list[str]] = None,
391+
node_type: str,
390392
volume: Optional[CreateClusterRequestVolumeSpec] = None,
391393
endpoints: Optional[list[EndpointSpec]] = None,
392394
user_name: Optional[str] = None,
393395
password: Optional[str] = None,
396+
multi_az: Optional[ClusterMultiAZDetails] = None,
397+
mono_az: Optional[ClusterMonoAZDetails] = None,
394398
) -> Cluster:
395399
"""
396400
Create a Kafka cluster.
397401
Create a new Kafka cluster.
398402
:param version: Version of Kafka.
399403
:param node_amount: Number of nodes to use for the Kafka cluster.
400-
:param node_type: Type of node to use for the Kafka cluster.
401404
:param region: Region to target. If none is passed will use default region from the config.
402405
:param project_id: The ID of the Project in which the Kafka cluster will be created.
403406
:param name: Name of the Kafka cluster.
404407
:param tags: Tags to apply to the Kafka cluster.
408+
:param node_type: Type of node to use for the Kafka cluster.
405409
:param volume: Kafka volume information.
406410
:param endpoints: One or multiple EndpointSpec used to expose your Kafka cluster.
407411
:param user_name: Username for the kafka user.
408412
:param password: Password for the kafka user.
413+
:param multi_az: MultiAZ tell the cluster is deployed on multiple availability zones in the region.
414+
One-Of ('availability'): at most one of 'multi_az', 'mono_az' could be set.
415+
:param mono_az: MonoAZ details.
416+
One-Of ('availability'): at most one of 'multi_az', 'mono_az' could be set.
409417
:return: :class:`Cluster <Cluster>`
410418
411419
Usage:
@@ -438,6 +446,8 @@ def create_cluster(
438446
endpoints=endpoints,
439447
user_name=user_name,
440448
password=password,
449+
multi_az=multi_az,
450+
mono_az=mono_az,
441451
),
442452
self.client,
443453
),

0 commit comments

Comments
 (0)