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
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,37 @@ docker run -it --rm --name pydo -v $PWD/tests:/tests pydo:dev pytest tests/mocke

>This selection lists the known issues of the client generator.

#### `kubernetes.create_cluster` does not accept `registry_enabled` parameter

The `registry_enabled` field in Kubernetes cluster responses is read-only and cannot be set during cluster creation. To enable container registry integration with a Kubernetes cluster, you must use the `add_registry` operation after creating the cluster.

**Correct approach:**

```python
# Create cluster
cluster = client.kubernetes.create_cluster({
'name': 'my-cluster',
'region': 'nyc3',
'version': '1.32',
'node_pools': [{
'size': 's-1vcpu-2gb',
'count': 2,
'name': 'worker-pool'
}]
})

cluster_id = cluster['kubernetes_cluster']['id']

# Enable registry integration
client.kubernetes.add_registry({'cluster_uuids': [cluster_id]})

# Verify registry is enabled
updated_cluster = client.kubernetes.get_cluster(cluster_id)
assert updated_cluster['kubernetes_cluster']['registry_enabled'] is True
```

See [issue #433](https://github.com/digitalocean/pydo/issues/433) for more details.

#### `kubernetes.get_kubeconfig` Does not serialize response content

In the generated python client, when calling client.kubernetes.get_kubeconfig(clust_id), the deserialization logic raises an error when the response content-type is applicaiton/yaml. We need to determine if the spec/schema can be configured such that the generator results in functions that properly handle the content. We will likely need to report the issue upstream to request support for the content-type.
Expand Down
60 changes: 60 additions & 0 deletions tests/integration/test_kubernetes.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,3 +312,63 @@ def test_kubernetes_upgrade_cluster(integration_client: Client, existing_cluster
cluster_id, {"version": next_version}
)
assert resp is None


def test_kubernetes_cluster_registry_integration(
integration_client: Client, existing_cluster_id
):
"""Tests container registry integration with Kubernetes cluster.

This test demonstrates the correct approach for enabling container registry
integration with a Kubernetes cluster. The registry_enabled field is read-only
in the cluster response, so registry integration must be enabled using the
add_registry operation after cluster creation.

This test covers:
1. Creating a cluster (registry_enabled is False by default)
2. Enabling registry integration using add_registry
3. Verifying registry_enabled is True
4. Removing registry integration
5. Verifying registry_enabled is False

Related to: https://github.com/digitalocean/pydo/issues/433
"""
create_req = {
"name": f"{defaults.PREFIX}-registry-test-{uuid.uuid4().hex}",
"region": defaults.REGION,
"version": defaults.K8S_VERSION,
"node_pools": [{"size": defaults.K8S_NODE_SIZE, "count": 2, "name": "workers"}],
}

with shared.with_test_kubernetes_cluster(
integration_client,
wait=True,
existing_cluster_id=existing_cluster_id,
**create_req,
) as cluster:
cluster_id = cluster["kubernetes_cluster"]["id"]
assert cluster_id != ""

# Verify registry is not enabled by default
cluster_details = integration_client.kubernetes.get_cluster(cluster_id)
assert (
cluster_details["kubernetes_cluster"]["registry_enabled"] is False
), "Registry should not be enabled by default"

# Enable registry integration
integration_client.kubernetes.add_registry({"cluster_uuids": [cluster_id]})

# Verify registry is now enabled
cluster_details = integration_client.kubernetes.get_cluster(cluster_id)
assert (
cluster_details["kubernetes_cluster"]["registry_enabled"] is True
), "Registry should be enabled after add_registry call"

# Disable registry integration
integration_client.kubernetes.remove_registry({"cluster_uuids": [cluster_id]})

# Verify registry is now disabled
cluster_details = integration_client.kubernetes.get_cluster(cluster_id)
assert (
cluster_details["kubernetes_cluster"]["registry_enabled"] is False
), "Registry should be disabled after remove_registry call"
66 changes: 66 additions & 0 deletions tests/mocked/test_kubernetes.py
Original file line number Diff line number Diff line change
Expand Up @@ -531,3 +531,69 @@ def test_kubernetes_remove_container_registry(mock_client: Client, mock_client_u
}
)
assert add_reg_resp is None


@responses.activate
def test_kubernetes_cluster_with_registry_integration(
mock_client: Client, mock_client_url
):
"""Test demonstrating correct approach for registry integration.

This test shows that registry_enabled cannot be set during cluster creation.
Instead, the add_registry operation must be used after cluster creation.

Related to: https://github.com/digitalocean/pydo/issues/433
"""
cluster_id = "bd5f5959-5e1e-4205-a714-a914373942af"

# Create cluster - registry_enabled will be False by default
cluster_without_registry = data.CLUSTER.copy()
responses.add(
responses.POST,
f"{mock_client_url}/{BASE_PATH}",
json=cluster_without_registry,
status=201,
)

cluster = mock_client.kubernetes.create_cluster(
{
"name": "registry-test-cluster",
"region": "ams3",
"version": "1.32",
"node_pools": [
{
"size": "s-1vcpu-2gb",
"count": 2,
"name": "worker-pool",
}
],
}
)

# Verify cluster was created with registry_enabled=False
assert cluster["kubernetes_cluster"]["registry_enabled"] is False

# Add registry integration
responses.add(
responses.POST,
f"{mock_client_url}/v2/kubernetes/registry",
status=204,
)

mock_client.kubernetes.add_registry({"cluster_uuids": [cluster_id]})

# Get cluster details - now registry should be enabled
cluster_with_registry = data.CLUSTER.copy()
cluster_with_registry["kubernetes_cluster"]["registry_enabled"] = True

responses.add(
responses.GET,
f"{mock_client_url}/{BASE_PATH}/{cluster_id}",
json=cluster_with_registry,
status=200,
)

updated_cluster = mock_client.kubernetes.get_cluster(cluster_id)
assert (
updated_cluster["kubernetes_cluster"]["registry_enabled"] is True
), "Expected registry to be enabled after add_registry call"