Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion linode_api4/groups/lke.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ def cluster_create(
self,
region,
label,
node_pools,
kube_version,
node_pools: Optional[list] = [],
control_plane: Union[
LKEClusterControlPlaneOptions, Dict[str, Any]
] = None,
Expand Down Expand Up @@ -120,6 +120,13 @@ def cluster_create(
:rtype: LKECluster
"""

if len(node_pools) == 0 and (
(tier is not None and tier.lower() != "enterprise") or tier is None
):
raise ValueError(
"LKE standard clusters must have at least one node pool."
)

params = {
"label": label,
"region": region,
Expand Down
2 changes: 1 addition & 1 deletion test/integration/linode_client/test_linode_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,8 +354,8 @@ def test_fails_to_create_cluster_with_invalid_version(test_linode_client):
cluster = client.lke.cluster_create(
region,
"example-cluster",
{"type": "g6-standard-1", "count": 3},
invalid_version,
{"type": "g6-standard-1", "count": 3},
)
except ApiError as e:
assert "not valid" in str(e.json)
Expand Down
10 changes: 5 additions & 5 deletions test/integration/models/lke/test_lke.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def lke_cluster(test_linode_client):
label = get_test_label() + "_cluster"

cluster = test_linode_client.lke.cluster_create(
region, label, node_pools, version
region, label, version, node_pools
)

yield cluster
Expand All @@ -57,8 +57,8 @@ def lke_cluster_with_acl(test_linode_client):
cluster = test_linode_client.lke.cluster_create(
region,
label,
node_pools,
version,
node_pools,
control_plane=LKEClusterControlPlaneOptions(
acl=LKEClusterControlPlaneACLOptions(
enabled=True,
Expand Down Expand Up @@ -103,7 +103,7 @@ def lke_cluster_with_labels_and_taints(test_linode_client):
label = get_test_label() + "_cluster"

cluster = test_linode_client.lke.cluster_create(
region, label, node_pools, version
region, label, version, node_pools
)

yield cluster
Expand All @@ -124,8 +124,8 @@ def lke_cluster_with_apl(test_linode_client):
cluster = test_linode_client.lke.cluster_create(
region,
label,
node_pools,
version,
node_pools,
control_plane=LKEClusterControlPlaneOptions(
high_availability=True,
),
Expand Down Expand Up @@ -160,8 +160,8 @@ def lke_cluster_enterprise(e2e_test_firewall, test_linode_client):
cluster = test_linode_client.lke.cluster_create(
region,
label,
node_pools,
version,
node_pools,
tier="enterprise",
)

Expand Down
52 changes: 51 additions & 1 deletion test/unit/groups/lke_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ def test_cluster_create_with_acl(self):
self.client.lke.cluster_create(
"us-mia",
"test-acl-cluster",
[self.client.lke.node_pool("g6-nanode-1", 3)],
"1.29",
[self.client.lke.node_pool("g6-nanode-1", 3)],
control_plane=LKEClusterControlPlaneOptions(
acl=LKEClusterControlPlaneACLOptions(
enabled=True,
Expand All @@ -41,3 +41,53 @@ def test_cluster_create_with_acl(self):
assert m.call_data["control_plane"]["acl"]["addresses"]["ipv6"] == [
"1234::5678"
]

def test_cluster_create_enterprise_without_node_pools(self):
"""
Tests that an enterprise LKE cluster can be created without node pools.
"""
with self.mock_post("lke/clusters") as m:
self.client.lke.cluster_create(
"us-west",
"test-enterprise-cluster",
"1.29",
tier="enterprise",
)

assert m.call_data["region"] == "us-west"
assert m.call_data["label"] == "test-enterprise-cluster"
assert m.call_data["k8s_version"] == "1.29"
assert m.call_data["tier"] == "enterprise"
assert m.call_data["node_pools"] == []

def test_cluster_create_enterprise_case_insensitive(self):
"""
Tests that tier comparison is case-insensitive for enterprise tier.
"""
with self.mock_post("lke/clusters") as m:
self.client.lke.cluster_create(
"us-west",
"test-enterprise-cluster",
"1.29",
tier="ENTERPRISE",
)

assert m.call_data["tier"] == "ENTERPRISE"
assert m.call_data["node_pools"] == []

def test_cluster_create_standard_without_node_pools_raises_error(self):
"""
Tests that creating a standard LKE cluster without node pools raises ValueError.
"""
with self.assertRaises(ValueError) as context:
self.client.lke.cluster_create(
"us-east",
"test-standard-cluster",
"1.29",
tier="standard",
)

self.assertIn(
"LKE standard clusters must have at least one node pool",
str(context.exception),
)
4 changes: 2 additions & 2 deletions test/unit/linode_client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -817,7 +817,7 @@ def test_cluster_create_with_api_objects(self):
node_pools = self.client.lke.node_pool(node_type, 3)
with self.mock_post("lke/clusters") as m:
cluster = self.client.lke.cluster_create(
region, "example-cluster", node_pools, version
region, "example-cluster", version, node_pools
)
self.assertEqual(m.call_data["region"], "ap-west")
self.assertEqual(
Expand Down Expand Up @@ -850,8 +850,8 @@ def test_cluster_create_with_string_repr(self):
cluster = self.client.lke.cluster_create(
"ap-west",
"example-cluster",
{"type": "g6-standard-1", "count": 3},
"1.19",
{"type": "g6-standard-1", "count": 3},
)
self.assertEqual(m.call_data["region"], "ap-west")
self.assertEqual(
Expand Down
4 changes: 2 additions & 2 deletions test/unit/objects/lke_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ def test_cluster_create_with_labels_and_taints(self):
self.client.lke.cluster_create(
"us-mia",
"test-acl-cluster",
"1.29",
[
self.client.lke.node_pool(
"g6-nanode-1",
Expand All @@ -317,7 +318,6 @@ def test_cluster_create_with_labels_and_taints(self):
],
)
],
"1.29",
)

assert m.call_data["node_pools"][0] == {
Expand All @@ -339,13 +339,13 @@ def test_cluster_create_with_apl(self):
cluster = self.client.lke.cluster_create(
"us-mia",
"test-aapl-cluster",
"1.29",
[
self.client.lke.node_pool(
"g6-dedicated-4",
3,
)
],
"1.29",
apl_enabled=True,
control_plane=LKEClusterControlPlaneOptions(
high_availability=True,
Expand Down