From 88ea79d96ab19e23edb21e8745f062d47ebc13e0 Mon Sep 17 00:00:00 2001 From: Indu Sridhar Date: Mon, 12 Oct 2026 10:39:56 -0700 Subject: [PATCH] fix(aks-preview): allow longer node pool names --- src/aks-preview/HISTORY.rst | 1 + src/aks-preview/azext_aks_preview/_params.py | 4 +-- .../azext_aks_preview/_validators.py | 10 +++---- .../tests/latest/test_validators.py | 26 ++++++++++++++++--- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index d9b1652d1a0..e5fbd7b2948 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -11,6 +11,7 @@ To release a new version, please select a new version number (usually plus 1 to Pending +++++++ +* Allow longer node pool names; the service enforces the actual limit. * `az aks create`: Add `--enable-disk-driver` so the AzureDisk CSI Driver can be enabled explicitly on create. The driver is already on by default, but `storageProfile.diskCSIDriver` was omitted from the create request unless `--disable-disk-driver` was passed, which blocked features that validate `storageProfile.diskCSIDriver.enabled` on the request body. `az aks update` already accepted this flag. 22.0.0b12 diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index dd44b249d8d..824e5046433 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -933,7 +933,7 @@ def load_arguments(self, _): c.argument( "nodepool_name", default="nodepool1", - help="Node pool name, upto 12 alphanumeric characters", + help="Node pool name, alphanumeric characters only. See https://aka.ms/aks-naming-rules for length limits.", validator=validate_nodepool_name, ) c.argument( @@ -2276,7 +2276,7 @@ def load_arguments(self, _): with self.argument_context("aks scale") as c: c.argument( "nodepool_name", - help="Node pool name, upto 12 alphanumeric characters", + help="Node pool name, alphanumeric characters only. See https://aka.ms/aks-naming-rules for length limits.", validator=validate_nodepool_name, ) diff --git a/src/aks-preview/azext_aks_preview/_validators.py b/src/aks-preview/azext_aks_preview/_validators.py index 2e48bc2dcbf..de4e4402c36 100644 --- a/src/aks-preview/azext_aks_preview/_validators.py +++ b/src/aks-preview/azext_aks_preview/_validators.py @@ -219,21 +219,21 @@ def validate_resource_quota(namespace): def _validate_nodepool_name(nodepool_name): - """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" + """Validates a nodepool name to be at most 39 characters, alphanumeric only.""" if nodepool_name != "": - if len(nodepool_name) > 12: - raise InvalidArgumentValueError('--nodepool-name can contain at most 12 characters') + if len(nodepool_name) > 39: + raise InvalidArgumentValueError('--nodepool-name can contain at most 39 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.""" + """Validates a nodepool name to be at most 39 characters, alphanumeric only.""" _validate_nodepool_name(namespace.nodepool_name) def validate_agent_pool_name(namespace): - """Validates a nodepool name to be at most 12 characters, alphanumeric only.""" + """Validates a nodepool name to be at most 39 characters, alphanumeric only.""" _validate_nodepool_name(namespace.agent_pool_name) 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 301477bcfc6..1c0dda96ab3 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 @@ -815,19 +815,19 @@ class TestValidateNodepoolName(unittest.TestCase): def test_invalid_nodepool_name_too_long(self): namespace = SimpleNamespace( **{ - "nodepool_name": "tooLongNodepoolName", + "nodepool_name": "a" * 40, } ) - with self.assertRaises(InvalidArgumentValueError): + with self.assertRaisesRegex(InvalidArgumentValueError, "at most 39 characters"): validators.validate_nodepool_name(namespace) def test_invalid_agent_pool_name_too_long(self): namespace = SimpleNamespace( **{ - "agent_pool_name": "tooLongNodepoolName", + "agent_pool_name": "a" * 40, } ) - with self.assertRaises(InvalidArgumentValueError): + with self.assertRaisesRegex(InvalidArgumentValueError, "at most 39 characters"): validators.validate_agent_pool_name(namespace) def test_invalid_nodepool_name_not_alnum(self): @@ -864,6 +864,24 @@ def test_valid_agent_pool_name(self): ) validators.validate_agent_pool_name(namespace) + def test_valid_nodepool_name_length_boundaries(self): + for length in (12, 13, 39): + with self.subTest(length=length): + namespace = SimpleNamespace(nodepool_name="a" * length) + validators.validate_nodepool_name(namespace) + + def test_valid_agent_pool_name_length_boundaries(self): + for length in (12, 13, 39): + with self.subTest(length=length): + namespace = SimpleNamespace(agent_pool_name="a" * length) + validators.validate_agent_pool_name(namespace) + + def test_valid_empty_nodepool_name(self): + validators.validate_nodepool_name(SimpleNamespace(nodepool_name="")) + + def test_valid_empty_agent_pool_name(self): + validators.validate_agent_pool_name(SimpleNamespace(agent_pool_name="")) + class TestValidateVMSetType(unittest.TestCase): def test_accepts_flexnodes(self):