From f61703c60791d8eb7fdbcbe2449fd63534031ac7 Mon Sep 17 00:00:00 2001 From: Fuming Zhang Date: Tue, 9 Aug 2022 18:54:06 +0800 Subject: [PATCH 1/3] fix aks nodepool wait command --- src/aks-preview/HISTORY.rst | 5 +++++ src/aks-preview/azext_aks_preview/_params.py | 2 ++ src/aks-preview/setup.py | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index 696f43fde91..fb59f28ed52 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -12,6 +12,11 @@ To release a new version, please select a new version number (usually plus 1 to Pending +++++++ +0.5.93 +++++++ + +* Fix for "'Namespace' object has no attribute 'nodepool_name' error" in command `az aks nodepool wait`, see issue `\#23468 `_. + 0.5.92 ++++++ diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index de79ffd81dc..60b60e7e543 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -423,6 +423,8 @@ def load_arguments(self, _): with self.argument_context('aks nodepool') as c: c.argument('cluster_name', help='The cluster name.') + # the following argument is declared for the wait command + c.argument('agent_pool_name', options_list=['--nodepool-name', '--agent-pool-name'], validator=validate_nodepool_name, help='The node pool name.') for sub_command in ['add', 'update', 'upgrade', 'scale', 'show', 'list', 'delete']: with self.argument_context('aks nodepool ' + sub_command) as c: diff --git a/src/aks-preview/setup.py b/src/aks-preview/setup.py index 74f806244ca..aed0f708af1 100644 --- a/src/aks-preview/setup.py +++ b/src/aks-preview/setup.py @@ -9,7 +9,7 @@ from setuptools import setup, find_packages -VERSION = "0.5.92" +VERSION = "0.5.93" CLASSIFIERS = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", From 7009a21f6ee542b69c9d7a117380def1b20625c5 Mon Sep 17 00:00:00 2001 From: Fuming Zhang Date: Wed, 10 Aug 2022 12:17:52 +0800 Subject: [PATCH 2/3] fix validator --- src/aks-preview/azext_aks_preview/_params.py | 3 +- .../azext_aks_preview/_validators.py | 23 +++++-- .../tests/latest/test_validators.py | 68 +++++++++++++++++++ 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index 60b60e7e543..f0c949e8ee8 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -75,6 +75,7 @@ validate_acr, validate_addon, validate_addons, + validate_agent_pool_name, validate_apiserver_subnet_id, validate_assign_identity, validate_assign_kubelet_identity, @@ -424,7 +425,7 @@ def load_arguments(self, _): with self.argument_context('aks nodepool') as c: c.argument('cluster_name', help='The cluster name.') # the following argument is declared for the wait command - c.argument('agent_pool_name', options_list=['--nodepool-name', '--agent-pool-name'], validator=validate_nodepool_name, help='The node pool name.') + c.argument('agent_pool_name', options_list=['--nodepool-name', '--agent-pool-name'], validator=validate_agent_pool_name, help='The node pool name.') for sub_command in ['add', 'update', 'upgrade', 'scale', 'show', 'list', 'delete']: with self.argument_context('aks nodepool ' + sub_command) as c: diff --git a/src/aks-preview/azext_aks_preview/_validators.py b/src/aks-preview/azext_aks_preview/_validators.py index 2a314a69396..4890245d8c0 100644 --- a/src/aks-preview/azext_aks_preview/_validators.py +++ b/src/aks-preview/azext_aks_preview/_validators.py @@ -138,14 +138,25 @@ def validate_ip_ranges(namespace): "--api-server-authorized-ip-ranges should be a list of IPv4 addresses or CIDRs") +def _validate_nodepool_name(nodepool_name): + """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" + if nodepool_name != "": + if len(nodepool_name) > 12: + raise InvalidArgumentValueError('--nodepool-name can contain at most 12 characters') + if not nodepool_name.isalnum(): + raise InvalidArgumentValueError('--nodepool-name should contain only alphanumeric characters') + + def validate_nodepool_name(namespace): """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" - if namespace.nodepool_name != "": - if len(namespace.nodepool_name) > 12: - raise CLIError('--nodepool-name can contain atmost 12 characters') - if not namespace.nodepool_name.isalnum(): - raise CLIError( - '--nodepool-name should only contain alphanumeric characters') + nodepool_name = namespace.nodepool_name + _validate_nodepool_name(nodepool_name) + + +def validate_agent_pool_name(namespace): + """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" + nodepool_name = namespace.agent_pool_name + _validate_nodepool_name(nodepool_name) def validate_vm_set_type(namespace): diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_validators.py b/src/aks-preview/azext_aks_preview/tests/latest/test_validators.py index d1e7a2a0d0e..6fd81f56b44 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_validators.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_validators.py @@ -3,6 +3,8 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import unittest +from types import SimpleNamespace + from azure.cli.core.util import CLIError from azure.cli.core.azclierror import InvalidArgumentValueError import azext_aks_preview._validators as validators @@ -408,5 +410,71 @@ def test_valid_azure_keyvault_kms_key_vault_resource_id(self): validators.validate_azure_keyvault_kms_key_vault_resource_id(namespace) +class TestValidateNodepoolName(unittest.TestCase): + def test_invalid_nodepool_name_too_long(self): + namespace = SimpleNamespace( + **{ + "nodepool_name": "tooLongNodepoolName", + } + ) + with self.assertRaises(InvalidArgumentValueError): + validators.validate_nodepool_name( + namespace + ) + + def test_invalid_agent_pool_name_too_long(self): + namespace = SimpleNamespace( + **{ + "agent_pool_name": "tooLongNodepoolName", + } + ) + with self.assertRaises(InvalidArgumentValueError): + validators.validate_agent_pool_name( + namespace + ) + + def test_invalid_nodepool_name_not_alnum(self): + namespace = SimpleNamespace( + **{ + "nodepool_name": "invalid-np*", + } + ) + with self.assertRaises(InvalidArgumentValueError): + validators.validate_nodepool_name( + namespace + ) + + def test_invalid_agent_pool_name_not_alnum(self): + namespace = SimpleNamespace( + **{ + "agent_pool_name": "invalid-np*", + } + ) + with self.assertRaises(InvalidArgumentValueError): + validators.validate_agent_pool_name( + namespace + ) + + def test_valid_nodepool_name(self): + namespace = SimpleNamespace( + **{ + "nodepool_name": "np100", + } + ) + validators.validate_nodepool_name( + namespace + ) + + def test_valid_agent_pool_name(self): + namespace = SimpleNamespace( + **{ + "agent_pool_name": "np100", + } + ) + validators.validate_agent_pool_name( + namespace + ) + + if __name__ == "__main__": unittest.main() From b2ed97d2ce3122e627ac2075079a38d96183f000 Mon Sep 17 00:00:00 2001 From: Fuming Zhang Date: Wed, 10 Aug 2022 12:21:21 +0800 Subject: [PATCH 3/3] update --- src/aks-preview/azext_aks_preview/_validators.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/_validators.py b/src/aks-preview/azext_aks_preview/_validators.py index 4890245d8c0..ab566378453 100644 --- a/src/aks-preview/azext_aks_preview/_validators.py +++ b/src/aks-preview/azext_aks_preview/_validators.py @@ -149,14 +149,12 @@ def _validate_nodepool_name(nodepool_name): def validate_nodepool_name(namespace): """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" - nodepool_name = namespace.nodepool_name - _validate_nodepool_name(nodepool_name) + _validate_nodepool_name(namespace.nodepool_name) def validate_agent_pool_name(namespace): """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" - nodepool_name = namespace.agent_pool_name - _validate_nodepool_name(nodepool_name) + _validate_nodepool_name(namespace.agent_pool_name) def validate_vm_set_type(namespace):