Skip to content

Commit 0442a86

Browse files
rammanojezilber-akamaizliang-akamaiCopilot
authored
Make NodePool optional for LKE-E in python sdk (#630)
* make nodepools optional in cluster_create * Update linode_api4/groups/lke.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * address feedback --------- Co-authored-by: Erik Zilber <ezilber@akamai.com> Co-authored-by: Zhiwei Liang <121905282+zliang-akamai@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent f08c0cd commit 0442a86

File tree

6 files changed

+71
-12
lines changed

6 files changed

+71
-12
lines changed

linode_api4/groups/lke.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ def cluster_create(
6262
self,
6363
region,
6464
label,
65-
node_pools,
6665
kube_version,
66+
node_pools: Optional[list] = None,
6767
control_plane: Union[
6868
LKEClusterControlPlaneOptions, Dict[str, Any]
6969
] = None,
@@ -119,6 +119,15 @@ def cluster_create(
119119
:returns: The new LKE Cluster
120120
:rtype: LKECluster
121121
"""
122+
if node_pools is None:
123+
node_pools = []
124+
125+
if len(node_pools) == 0 and (
126+
tier is None or tier.lower() != "enterprise"
127+
):
128+
raise ValueError(
129+
"LKE standard clusters must have at least one node pool."
130+
)
122131

123132
params = {
124133
"label": label,

test/integration/linode_client/test_linode_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,8 @@ def test_fails_to_create_cluster_with_invalid_version(test_linode_client):
350350
cluster = client.lke.cluster_create(
351351
region,
352352
"example-cluster",
353-
{"type": "g6-standard-1", "count": 3},
354353
invalid_version,
354+
{"type": "g6-standard-1", "count": 3},
355355
)
356356
except ApiError as e:
357357
assert "not valid" in str(e.json)

test/integration/models/lke/test_lke.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def lke_cluster(test_linode_client):
3838
label = get_test_label() + "_cluster"
3939

4040
cluster = test_linode_client.lke.cluster_create(
41-
region, label, node_pools, version
41+
region, label, version, node_pools
4242
)
4343

4444
yield cluster
@@ -57,8 +57,8 @@ def lke_cluster_with_acl(test_linode_client):
5757
cluster = test_linode_client.lke.cluster_create(
5858
region,
5959
label,
60-
node_pools,
6160
version,
61+
node_pools,
6262
control_plane=LKEClusterControlPlaneOptions(
6363
acl=LKEClusterControlPlaneACLOptions(
6464
enabled=True,
@@ -103,7 +103,7 @@ def lke_cluster_with_labels_and_taints(test_linode_client):
103103
label = get_test_label() + "_cluster"
104104

105105
cluster = test_linode_client.lke.cluster_create(
106-
region, label, node_pools, version
106+
region, label, version, node_pools
107107
)
108108

109109
yield cluster
@@ -124,8 +124,8 @@ def lke_cluster_with_apl(test_linode_client):
124124
cluster = test_linode_client.lke.cluster_create(
125125
region,
126126
label,
127-
node_pools,
128127
version,
128+
node_pools,
129129
control_plane=LKEClusterControlPlaneOptions(
130130
high_availability=True,
131131
),
@@ -160,8 +160,8 @@ def lke_cluster_enterprise(e2e_test_firewall, test_linode_client):
160160
cluster = test_linode_client.lke.cluster_create(
161161
region,
162162
label,
163-
node_pools,
164163
version,
164+
node_pools,
165165
tier="enterprise",
166166
)
167167

test/unit/groups/lke_test.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def test_cluster_create_with_acl(self):
2121
self.client.lke.cluster_create(
2222
"us-mia",
2323
"test-acl-cluster",
24-
[self.client.lke.node_pool("g6-nanode-1", 3)],
2524
"1.29",
25+
[self.client.lke.node_pool("g6-nanode-1", 3)],
2626
control_plane=LKEClusterControlPlaneOptions(
2727
acl=LKEClusterControlPlaneACLOptions(
2828
enabled=True,
@@ -41,3 +41,53 @@ def test_cluster_create_with_acl(self):
4141
assert m.call_data["control_plane"]["acl"]["addresses"]["ipv6"] == [
4242
"1234::5678"
4343
]
44+
45+
def test_cluster_create_enterprise_without_node_pools(self):
46+
"""
47+
Tests that an enterprise LKE cluster can be created without node pools.
48+
"""
49+
with self.mock_post("lke/clusters") as m:
50+
self.client.lke.cluster_create(
51+
"us-west",
52+
"test-enterprise-cluster",
53+
"1.29",
54+
tier="enterprise",
55+
)
56+
57+
assert m.call_data["region"] == "us-west"
58+
assert m.call_data["label"] == "test-enterprise-cluster"
59+
assert m.call_data["k8s_version"] == "1.29"
60+
assert m.call_data["tier"] == "enterprise"
61+
assert m.call_data["node_pools"] == []
62+
63+
def test_cluster_create_enterprise_case_insensitive(self):
64+
"""
65+
Tests that tier comparison is case-insensitive for enterprise tier.
66+
"""
67+
with self.mock_post("lke/clusters") as m:
68+
self.client.lke.cluster_create(
69+
"us-west",
70+
"test-enterprise-cluster",
71+
"1.29",
72+
tier="ENTERPRISE",
73+
)
74+
75+
assert m.call_data["tier"] == "ENTERPRISE"
76+
assert m.call_data["node_pools"] == []
77+
78+
def test_cluster_create_standard_without_node_pools_raises_error(self):
79+
"""
80+
Tests that creating a standard LKE cluster without node pools raises ValueError.
81+
"""
82+
with self.assertRaises(ValueError) as context:
83+
self.client.lke.cluster_create(
84+
"us-east",
85+
"test-standard-cluster",
86+
"1.29",
87+
tier="standard",
88+
)
89+
90+
self.assertIn(
91+
"LKE standard clusters must have at least one node pool",
92+
str(context.exception),
93+
)

test/unit/linode_client_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ def test_cluster_create_with_api_objects(self):
817817
node_pools = self.client.lke.node_pool(node_type, 3)
818818
with self.mock_post("lke/clusters") as m:
819819
cluster = self.client.lke.cluster_create(
820-
region, "example-cluster", node_pools, version
820+
region, "example-cluster", version, node_pools
821821
)
822822
self.assertEqual(m.call_data["region"], "ap-west")
823823
self.assertEqual(
@@ -850,8 +850,8 @@ def test_cluster_create_with_string_repr(self):
850850
cluster = self.client.lke.cluster_create(
851851
"ap-west",
852852
"example-cluster",
853-
{"type": "g6-standard-1", "count": 3},
854853
"1.19",
854+
{"type": "g6-standard-1", "count": 3},
855855
)
856856
self.assertEqual(m.call_data["region"], "ap-west")
857857
self.assertEqual(

test/unit/objects/lke_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ def test_cluster_create_with_labels_and_taints(self):
302302
self.client.lke.cluster_create(
303303
"us-mia",
304304
"test-acl-cluster",
305+
"1.29",
305306
[
306307
self.client.lke.node_pool(
307308
"g6-nanode-1",
@@ -317,7 +318,6 @@ def test_cluster_create_with_labels_and_taints(self):
317318
],
318319
)
319320
],
320-
"1.29",
321321
)
322322

323323
assert m.call_data["node_pools"][0] == {
@@ -339,13 +339,13 @@ def test_cluster_create_with_apl(self):
339339
cluster = self.client.lke.cluster_create(
340340
"us-mia",
341341
"test-aapl-cluster",
342+
"1.29",
342343
[
343344
self.client.lke.node_pool(
344345
"g6-dedicated-4",
345346
3,
346347
)
347348
],
348-
"1.29",
349349
apl_enabled=True,
350350
control_plane=LKEClusterControlPlaneOptions(
351351
high_availability=True,

0 commit comments

Comments
 (0)