From 7715d7a995a39721e0f336a8f2ac15d0ebb7bd5e Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Tue, 12 Dec 2023 22:28:39 +0100 Subject: [PATCH 1/9] disabling enable/disable-feature for provisioned clusters --- src/connectedk8s/azext_connectedk8s/custom.py | 12 ++++++++++++ .../preview_2023_11_01/models/_models_py3.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index 56bed96acd0..4cb6c03d9a8 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -871,6 +871,12 @@ def get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name): return client.get(resource_group_name, cluster_name) +def get_connectedk8s_2023_11_01(cmd, client, resource_group_name, cluster_name): + # Override preview client to show private link properties to customers + client = cf_connected_cluster_prev_2022_10_01(cmd.cli_ctx, None) + return client.get(resource_group_name, cluster_name) + + def list_connectedk8s(cmd, client, resource_group_name=None): # Override preview client to show private link properties and cluster kind to customers client = cf_connected_cluster_prev_2023_11_01(cmd.cli_ctx, None) @@ -1609,6 +1615,12 @@ def disable_features(cmd, client, resource_group_name, cluster_name, features, k release_namespace = validate_release_namespace(client, cluster_name, resource_group_name, kube_config, kube_context, helm_client_location) + # Fetch Connected Cluster for agent version + connected_cluster = get_connectedk8s_2023_11_01(cmd, client, resource_group_name, cluster_name) + + if connected_cluster.kind == "provisionedCluster": + raise InvalidArgumentValueError("Features cannot be enabled for provisioned clusters.") + kubernetes_properties = {'Context.Default.AzureCLI.KubernetesVersion': kubernetes_version} if hasattr(connected_cluster, 'distribution') and (connected_cluster.distribution is not None): diff --git a/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py b/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py index 2d8e5d68185..dbf09a686d0 100644 --- a/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py +++ b/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py @@ -220,7 +220,7 @@ class ConnectedCluster(TrackedResource): # pylint: disable=too-many-instance-at "private_link_scope_resource_id": {"key": "properties.privateLinkScopeResourceId", "type": "str"}, "azure_hybrid_benefit": {"key": "properties.azureHybridBenefit", "type": "str"}, "miscellaneous_properties": {"key": "properties.miscellaneousProperties", "type": "{str}"}, - "kind": {"key": "kind", "type": "str"}, + "kind": {"key": "properties.kind", "type": "{str}"}, } def __init__( # pylint: disable=too-many-locals From e87bc2bb877eb0d31f7cf3366e373f649b3af0d5 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Thu, 14 Dec 2023 01:38:48 +0100 Subject: [PATCH 2/9] disable additional unsupported subcommands for provisioned clusters --- src/connectedk8s/azext_connectedk8s/custom.py | 12 +++--------- .../preview_2023_11_01/models/_models_py3.py | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index 4cb6c03d9a8..c70e3d51fe3 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -871,9 +871,9 @@ def get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name): return client.get(resource_group_name, cluster_name) -def get_connectedk8s_2023_11_01(cmd, client, resource_group_name, cluster_name): - # Override preview client to show private link properties to customers - client = cf_connected_cluster_prev_2022_10_01(cmd.cli_ctx, None) +def get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name): + # Override preview client to show private link properties and cluster kind to customers + client = cf_connected_cluster_prev_2023_11_01(cmd.cli_ctx, None) return client.get(resource_group_name, cluster_name) @@ -1615,12 +1615,6 @@ def disable_features(cmd, client, resource_group_name, cluster_name, features, k release_namespace = validate_release_namespace(client, cluster_name, resource_group_name, kube_config, kube_context, helm_client_location) - # Fetch Connected Cluster for agent version - connected_cluster = get_connectedk8s_2023_11_01(cmd, client, resource_group_name, cluster_name) - - if connected_cluster.kind == "provisionedCluster": - raise InvalidArgumentValueError("Features cannot be enabled for provisioned clusters.") - kubernetes_properties = {'Context.Default.AzureCLI.KubernetesVersion': kubernetes_version} if hasattr(connected_cluster, 'distribution') and (connected_cluster.distribution is not None): diff --git a/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py b/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py index dbf09a686d0..2d8e5d68185 100644 --- a/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py +++ b/src/connectedk8s/azext_connectedk8s/vendored_sdks/preview_2023_11_01/models/_models_py3.py @@ -220,7 +220,7 @@ class ConnectedCluster(TrackedResource): # pylint: disable=too-many-instance-at "private_link_scope_resource_id": {"key": "properties.privateLinkScopeResourceId", "type": "str"}, "azure_hybrid_benefit": {"key": "properties.azureHybridBenefit", "type": "str"}, "miscellaneous_properties": {"key": "properties.miscellaneousProperties", "type": "{str}"}, - "kind": {"key": "properties.kind", "type": "{str}"}, + "kind": {"key": "kind", "type": "str"}, } def __init__( # pylint: disable=too-many-locals From 642cecc0eb4a545a66e81bb1030ba8a3176feefd Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Thu, 14 Dec 2023 01:58:27 +0100 Subject: [PATCH 3/9] update extension version --- src/connectedk8s/HISTORY.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/connectedk8s/HISTORY.rst b/src/connectedk8s/HISTORY.rst index ba458addb21..2ba8dbcd8ff 100644 --- a/src/connectedk8s/HISTORY.rst +++ b/src/connectedk8s/HISTORY.rst @@ -13,6 +13,11 @@ Release History * Updated Helm from 3.6.3 to 3.12.2 +1.6.0 +++++++ +* Added support for reading ARM metadata 2023-11-01. +* Enable connectedk8s CLI extension to be used for new cluster kind of provisioned clusters. + 1.5.6 ++++++ * Deprecate '--app-id' and '--app-secret' RBAC params. From df3d696046fb8d37be670eabe85df1adee477070 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Fri, 15 Dec 2023 02:28:36 +0100 Subject: [PATCH 4/9] update error messages for disabled subcommands for provisioned clsuters --- src/connectedk8s/azext_connectedk8s/custom.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index c70e3d51fe3..7489449a8bf 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -340,6 +340,9 @@ def create_connectedk8s(cmd, client, resource_group_name, cluster_name, correlat disable_cluster_connect(cmd, client, resource_group_name, cluster_name, kube_config, kube_context, values_file, release_namespace, helm_client_location) return cc_response else: + # If cluster is of kind provisioned cluster, there are several properties that cannot be updated + validate_existing_provisioned_cluster_for_reput(preview_cluster_resource, kubernetes_distro, kubernetes_infra, enable_private_link, private_link_scope_resource_id, distribution_version, azure_hybrid_benefit, location) + telemetry.set_exception(exception='The kubernetes cluster is already onboarded', fault_type=consts.Cluster_Already_Onboarded_Fault_Type, summary='Kubernetes cluster already onboarded') raise ArgumentUsageError("The kubernetes cluster you are trying to onboard " + @@ -443,7 +446,7 @@ def validate_existing_provisioned_cluster_for_reput(cluster_resource, kubernetes ] for value in validation_values: - if value is not None: + if not value is None: raise InvalidArgumentValueError("Updating the following properties of a Provisioned Cluster are not supported from the Connected Cluster CLI: kubernetes_distro, kubernetes_infra, enable_private_link, private_link_scope_resource_id, distribution_version, azure_hybrid_benefit, location, public_key.\n\nPlease use the 'az aksarc update' CLI command. https://learn.microsoft.com/en-us/cli/azure/aksarc?view=azure-cli-latest#az-aksarc-update") From 115c1d21620f4b626d480e85512d1b9c9f0f6eb2 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Tue, 19 Dec 2023 21:29:30 +0100 Subject: [PATCH 5/9] address PR comments --- src/connectedk8s/azext_connectedk8s/custom.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index 7489449a8bf..65c82d98336 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -340,9 +340,6 @@ def create_connectedk8s(cmd, client, resource_group_name, cluster_name, correlat disable_cluster_connect(cmd, client, resource_group_name, cluster_name, kube_config, kube_context, values_file, release_namespace, helm_client_location) return cc_response else: - # If cluster is of kind provisioned cluster, there are several properties that cannot be updated - validate_existing_provisioned_cluster_for_reput(preview_cluster_resource, kubernetes_distro, kubernetes_infra, enable_private_link, private_link_scope_resource_id, distribution_version, azure_hybrid_benefit, location) - telemetry.set_exception(exception='The kubernetes cluster is already onboarded', fault_type=consts.Cluster_Already_Onboarded_Fault_Type, summary='Kubernetes cluster already onboarded') raise ArgumentUsageError("The kubernetes cluster you are trying to onboard " + From f6358e70fb2112459cb0b081003d43652c6e8313 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Wed, 20 Dec 2023 09:33:40 +0100 Subject: [PATCH 6/9] address more PR comments --- src/connectedk8s/azext_connectedk8s/custom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index 65c82d98336..c70e3d51fe3 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -443,7 +443,7 @@ def validate_existing_provisioned_cluster_for_reput(cluster_resource, kubernetes ] for value in validation_values: - if not value is None: + if value is not None: raise InvalidArgumentValueError("Updating the following properties of a Provisioned Cluster are not supported from the Connected Cluster CLI: kubernetes_distro, kubernetes_infra, enable_private_link, private_link_scope_resource_id, distribution_version, azure_hybrid_benefit, location, public_key.\n\nPlease use the 'az aksarc update' CLI command. https://learn.microsoft.com/en-us/cli/azure/aksarc?view=azure-cli-latest#az-aksarc-update") From 6a1027a22419364fe9bd1e00dbada211999c5444 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Wed, 20 Dec 2023 09:47:09 +0100 Subject: [PATCH 7/9] bump extension version number --- src/connectedk8s/HISTORY.rst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/connectedk8s/HISTORY.rst b/src/connectedk8s/HISTORY.rst index 2ba8dbcd8ff..ba458addb21 100644 --- a/src/connectedk8s/HISTORY.rst +++ b/src/connectedk8s/HISTORY.rst @@ -13,11 +13,6 @@ Release History * Updated Helm from 3.6.3 to 3.12.2 -1.6.0 -++++++ -* Added support for reading ARM metadata 2023-11-01. -* Enable connectedk8s CLI extension to be used for new cluster kind of provisioned clusters. - 1.5.6 ++++++ * Deprecate '--app-id' and '--app-secret' RBAC params. From a2c327aecdf5995d9fb669c4d78db5a0e97e14a0 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Thu, 21 Dec 2023 19:15:00 +0100 Subject: [PATCH 8/9] add additional None checks --- src/connectedk8s/azext_connectedk8s/custom.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index c70e3d51fe3..7ef2c0cc993 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -428,7 +428,7 @@ def create_connectedk8s(cmd, client, resource_group_name, cluster_name, correlat return put_cc_response def validate_existing_provisioned_cluster_for_reput(cluster_resource, kubernetes_distro, kubernetes_infra, enable_private_link, private_link_scope_resource_id, distribution_version, azure_hybrid_benefit, location): - if (cluster_resource != None) and (cluster_resource.kind.lower() == consts.Provisioned_Cluster_Kind): + if (cluster_resource != None) and (cluster_resource.kind != None) and (cluster_resource.kind.lower() == consts.Provisioned_Cluster_Kind): if azure_hybrid_benefit is not None: raise InvalidArgumentValueError("Updating the 'azure hybrid benefit' property of a Provisioned Cluster is not supported from the Connected Cluster CLI. Please use the 'az aksarc update' CLI command.\nhttps://learn.microsoft.com/en-us/cli/azure/aksarc?view=azure-cli-latest#az-aksarc-update") @@ -901,7 +901,7 @@ def delete_connectedk8s(cmd, client, resource_group_name, cluster_name, # Check if the cluster is of supported type for deletion preview_cluster_resource = get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name) - if (preview_cluster_resource != None) and (preview_cluster_resource.kind.lower() == consts.Provisioned_Cluster_Kind): + if (preview_cluster_resource != None) and (preview_cluster_resource.kind != None) and (preview_cluster_resource.kind.lower() == consts.Provisioned_Cluster_Kind): raise InvalidArgumentValueError("Deleting a Provisioned Cluster is not supported from the Connected Cluster CLI. Please use the 'az aksarc delete' CLI command.\nhttps://learn.microsoft.com/en-us/cli/azure/aksarc?view=azure-cli-latest#az-aksarc-delete") # Send cloud information to telemetry @@ -1054,7 +1054,7 @@ def update_connected_cluster(cmd, client, resource_group_name, cluster_name, htt # Fetch Connected Cluster for agent version connected_cluster = get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name) - if (connected_cluster != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): + if (connected_cluster != None) and (connected_cluster.kind != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): raise InvalidArgumentValueError("Updating a Provisioned Cluster is not supported from the Connected Cluster CLI. Please use the 'az aksarc update' CLI command. https://learn.microsoft.com/en-us/cli/azure/aksarc?view=azure-cli-latest#az-aksarc-update") # Set preview client as most of the patchable fields are available in preview api-version @@ -1203,7 +1203,7 @@ def upgrade_agents(cmd, client, resource_group_name, cluster_name, kube_config=N # Check if cluster supports upgrading connected_cluster = get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name) - if (connected_cluster != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): + if (connected_cluster != None) and (connected_cluster.kind != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): raise InvalidArgumentValueError("Upgrading a Provisioned Cluster is not supported from the Connected Cluster CLI. Please use the 'az aksarc upgrade' CLI command. https://learn.microsoft.com/en-us/cli/azure/aksarc?view=azure-cli-latest#az-aksarc-upgrade") logger.warning("This operation might take a while...\n") @@ -1454,7 +1454,7 @@ def enable_features(cmd, client, resource_group_name, cluster_name, features, ku # Check if cluster is private link enabled connected_cluster = get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name) - if (connected_cluster != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): + if (connected_cluster != None) and (connected_cluster.kind != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): raise InvalidArgumentValueError("Enable feature of a Provisioned Cluster is not supported from the Connected Cluster CLI. For information on how to enable a feature on a Provisioned Cluster using a cluster extension, please refer to: https://learn.microsoft.com/en-us/azure/aks/deploy-extensions-az-cli") if connected_cluster.private_link_state.lower() == "enabled" and (enable_cluster_connect or enable_cl): @@ -1584,7 +1584,7 @@ def disable_features(cmd, client, resource_group_name, cluster_name, features, k # Fetch Connected Cluster for agent version connected_cluster = get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name) - if (connected_cluster != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): + if (connected_cluster != None) and (connected_cluster.kind != None) and (connected_cluster.kind.lower() == consts.Provisioned_Cluster_Kind): raise InvalidArgumentValueError("Disable feature of a Provisioned Cluster is not supported from the Connected Cluster CLI. For information on how to disable a feature on a Provisioned Cluster using a cluster extension, please refer to: https://learn.microsoft.com/en-us/azure/aks/deploy-extensions-az-cli") logger.warning("This operation might take a while...\n") From 51c595114e102930b894485404dafba83d4640fe Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Thu, 21 Dec 2023 19:21:29 +0100 Subject: [PATCH 9/9] bump version number --- src/connectedk8s/HISTORY.rst | 4 ++++ src/connectedk8s/azext_connectedk8s/custom.py | 6 ------ src/connectedk8s/setup.py | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/connectedk8s/HISTORY.rst b/src/connectedk8s/HISTORY.rst index ba458addb21..c13be13a1c2 100644 --- a/src/connectedk8s/HISTORY.rst +++ b/src/connectedk8s/HISTORY.rst @@ -3,6 +3,10 @@ Release History =============== +1.6.2 +++++++ +* Additional bugfixes. + 1.6.1 ++++++ * Added support for reading ARM metadata 2023-11-01. diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index 7ef2c0cc993..6537e26d0bd 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -871,12 +871,6 @@ def get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name): return client.get(resource_group_name, cluster_name) -def get_connectedk8s_2023_11_01(cmd, resource_group_name, cluster_name): - # Override preview client to show private link properties and cluster kind to customers - client = cf_connected_cluster_prev_2023_11_01(cmd.cli_ctx, None) - return client.get(resource_group_name, cluster_name) - - def list_connectedk8s(cmd, client, resource_group_name=None): # Override preview client to show private link properties and cluster kind to customers client = cf_connected_cluster_prev_2023_11_01(cmd.cli_ctx, None) diff --git a/src/connectedk8s/setup.py b/src/connectedk8s/setup.py index 0be9f66cbbe..c4a4a313a08 100644 --- a/src/connectedk8s/setup.py +++ b/src/connectedk8s/setup.py @@ -17,7 +17,7 @@ # TODO: Confirm this is the right version number you want and it matches your # HISTORY.rst entry. -VERSION = '1.6.1' +VERSION = '1.6.2' # The full list of classifiers is available at # https://pypi.python.org/pypi?%3Aaction=list_classifiers