From 745641dfc992a33a82b626e43602cb2e17afd95f Mon Sep 17 00:00:00 2001 From: InduSridhar Date: Fri, 27 Mar 2026 18:45:37 +0000 Subject: [PATCH 1/3] Remove readOnly from nodeImageVersion in agent pool models to unblock rollback The TypeSpec conversion in Azure/azure-rest-api-specs#38641 incorrectly re-added readOnly to nodeImageVersion in agent pool models. This was intentionally removed in Azure/azure-rest-api-specs#37229 to enable agentpool rollback functionality. The upstream spec fix is tracked in Azure/azure-rest-api-specs#41598 but vendoring may take a week+. This is a temporary SDK-level workaround to unblock the rollback feature that is already in preview for customers. Removes readonly from nodeImageVersion in: - AgentPool - ManagedClusterAgentPoolProfileProperties - ManagedClusterAgentPoolProfile MachineProperties and Snapshot retain readonly as nodeImageVersion is genuinely read-only on those resources. --- .../vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py index e5f651e67e7..a4a4c5e7d55 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py @@ -556,7 +556,6 @@ class AgentPool(ProxyResource): "e_tag": {"readonly": True}, "os_disk_size_gb": {"maximum": 2048, "minimum": 0}, "current_orchestrator_version": {"readonly": True}, - "node_image_version": {"readonly": True}, "provisioning_state": {"readonly": True}, } @@ -6517,7 +6516,6 @@ class ManagedClusterAgentPoolProfileProperties(_serialization.Model): "e_tag": {"readonly": True}, "os_disk_size_gb": {"maximum": 2048, "minimum": 0}, "current_orchestrator_version": {"readonly": True}, - "node_image_version": {"readonly": True}, "provisioning_state": {"readonly": True}, } @@ -7173,7 +7171,6 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): "e_tag": {"readonly": True}, "os_disk_size_gb": {"maximum": 2048, "minimum": 0}, "current_orchestrator_version": {"readonly": True}, - "node_image_version": {"readonly": True}, "provisioning_state": {"readonly": True}, "name": {"required": True, "pattern": r"^[a-z][a-z0-9]{0,11}$"}, } From f4464189df7bca0cc51ae5814f3d75e66818484d Mon Sep 17 00:00:00 2001 From: InduSridhar Date: Mon, 30 Mar 2026 18:01:44 +0000 Subject: [PATCH 2/3] Make node_image_version a settable __init__ param for agent pool models Per reviewer feedback (FumingZhang), in addition to removing readonly from _validation, the __init__ methods need to accept node_image_version as a parameter and assign it instead of hardcoding None. Without this, the serializer still cannot pass the value through during rollback. Changes for AgentPool, ManagedClusterAgentPoolProfileProperties, and ManagedClusterAgentPoolProfile (matching #9742 pattern). MachineProperties and Snapshot are unchanged (genuinely read-only). --- .../azure_mgmt_preview_aks/models/_models_py3.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py index a4a4c5e7d55..f2a24c9b09d 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py @@ -661,6 +661,7 @@ def __init__( # pylint: disable=too-many-locals type_properties_type: Optional[Union[str, "_models.AgentPoolType"]] = None, mode: Optional[Union[str, "_models.AgentPoolMode"]] = None, orchestrator_version: Optional[str] = None, + node_image_version: Optional[str] = None, upgrade_strategy: Optional[Union[str, "_models.UpgradeStrategy"]] = None, enable_os_disk_full_caching: Optional[bool] = None, upgrade_settings: Optional["_models.AgentPoolUpgradeSettings"] = None, @@ -943,7 +944,7 @@ def __init__( # pylint: disable=too-many-locals self.mode = mode self.orchestrator_version = orchestrator_version self.current_orchestrator_version: Optional[str] = None - self.node_image_version: Optional[str] = None + self.node_image_version = node_image_version self.upgrade_strategy = upgrade_strategy self.enable_os_disk_full_caching = enable_os_disk_full_caching self.upgrade_settings = upgrade_settings @@ -6605,6 +6606,7 @@ def __init__( # pylint: disable=too-many-locals type: Optional[Union[str, "_models.AgentPoolType"]] = None, mode: Optional[Union[str, "_models.AgentPoolMode"]] = None, orchestrator_version: Optional[str] = None, + node_image_version: Optional[str] = None, upgrade_strategy: Optional[Union[str, "_models.UpgradeStrategy"]] = None, enable_os_disk_full_caching: Optional[bool] = None, upgrade_settings: Optional["_models.AgentPoolUpgradeSettings"] = None, @@ -6887,7 +6889,7 @@ def __init__( # pylint: disable=too-many-locals self.mode = mode self.orchestrator_version = orchestrator_version self.current_orchestrator_version: Optional[str] = None - self.node_image_version: Optional[str] = None + self.node_image_version = node_image_version self.upgrade_strategy = upgrade_strategy self.enable_os_disk_full_caching = enable_os_disk_full_caching self.upgrade_settings = upgrade_settings @@ -7263,6 +7265,7 @@ def __init__( # pylint: disable=too-many-locals type: Optional[Union[str, "_models.AgentPoolType"]] = None, mode: Optional[Union[str, "_models.AgentPoolMode"]] = None, orchestrator_version: Optional[str] = None, + node_image_version: Optional[str] = None, upgrade_strategy: Optional[Union[str, "_models.UpgradeStrategy"]] = None, enable_os_disk_full_caching: Optional[bool] = None, upgrade_settings: Optional["_models.AgentPoolUpgradeSettings"] = None, @@ -7546,6 +7549,7 @@ def __init__( # pylint: disable=too-many-locals type=type, mode=mode, orchestrator_version=orchestrator_version, + node_image_version=node_image_version, upgrade_strategy=upgrade_strategy, enable_os_disk_full_caching=enable_os_disk_full_caching, upgrade_settings=upgrade_settings, From 392ce9b0dc217b854fe2b0202e9176d70404e6c4 Mon Sep 17 00:00:00 2001 From: InduSridhar Date: Mon, 30 Mar 2026 18:38:10 +0000 Subject: [PATCH 3/3] Add inline comments explaining node_image_version readonly removal Per Copilot review feedback: add notes near the _validation blocks referencing the upstream spec PRs so this workaround isn't accidentally reverted on the next SDK refresh. --- .../azure_mgmt_preview_aks/models/_models_py3.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py index f2a24c9b09d..6004122f7d2 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models/_models_py3.py @@ -556,6 +556,8 @@ class AgentPool(ProxyResource): "e_tag": {"readonly": True}, "os_disk_size_gb": {"maximum": 2048, "minimum": 0}, "current_orchestrator_version": {"readonly": True}, + # NOTE: node_image_version readonly intentionally removed to support agentpool rollback. + # See: azure-rest-api-specs#37229 (original removal), #38641 (regression), #41598 (upstream fix). "provisioning_state": {"readonly": True}, } @@ -6517,6 +6519,8 @@ class ManagedClusterAgentPoolProfileProperties(_serialization.Model): "e_tag": {"readonly": True}, "os_disk_size_gb": {"maximum": 2048, "minimum": 0}, "current_orchestrator_version": {"readonly": True}, + # NOTE: node_image_version readonly intentionally removed to support agentpool rollback. + # See: azure-rest-api-specs#37229 (original removal), #38641 (regression), #41598 (upstream fix). "provisioning_state": {"readonly": True}, } @@ -7173,6 +7177,8 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): "e_tag": {"readonly": True}, "os_disk_size_gb": {"maximum": 2048, "minimum": 0}, "current_orchestrator_version": {"readonly": True}, + # NOTE: node_image_version readonly intentionally removed to support agentpool rollback. + # See: azure-rest-api-specs#37229 (original removal), #38641 (regression), #41598 (upstream fix). "provisioning_state": {"readonly": True}, "name": {"required": True, "pattern": r"^[a-z][a-z0-9]{0,11}$"}, }