From d25dffa1ee5cbfa3a45ad593ea79ced968753193 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 8 May 2026 05:37:43 +0000 Subject: [PATCH 1/2] Initial plan From e85e63cc0e3327be9e4a008fec8c709d9acb1031 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 8 May 2026 05:46:44 +0000 Subject: [PATCH 2/2] fix: preserve max-unavailable during aks nodepool upgrade Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/f91cb1b4-ec80-47e4-8ed4-d00db1186538 Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- .../azure/cli/command_modules/acs/custom.py | 2 ++ .../acs/tests/latest/test_custom.py | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/azure-cli/azure/cli/command_modules/acs/custom.py b/src/azure-cli/azure/cli/command_modules/acs/custom.py index 14da5e5287e..61ecc932bb5 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/custom.py +++ b/src/azure-cli/azure/cli/command_modules/acs/custom.py @@ -3189,6 +3189,8 @@ def aks_agentpool_upgrade(cmd, client, resource_group_name, cluster_name, instance.upgrade_settings.node_soak_duration_in_minutes = node_soak_duration if undrainable_node_behavior: instance.upgrade_settings.undrainable_node_behavior = undrainable_node_behavior + if max_unavailable: + instance.upgrade_settings.max_unavailable = max_unavailable # custom headers aks_custom_headers = extract_comma_separated_string( diff --git a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py index fe40396e062..e5ffa04e88e 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py +++ b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py @@ -26,6 +26,7 @@ _get_command_context, _update_addons, aks_enable_addons, + aks_agentpool_upgrade, aks_stop, is_monitoring_addon_enabled, k8s_install_kubectl, @@ -944,6 +945,36 @@ def setUp(self): self.models = AKSManagedClusterModels(self.cmd, ResourceType.MGMT_CONTAINERSERVICE) self.client = MockClient() + def test_aks_agentpool_upgrade_sets_max_unavailable(self): + agent_pool = mock.MagicMock() + agent_pool.orchestrator_version = "1.28.0" + agent_pool.provisioning_state = "Succeeded" + agent_pool.upgrade_settings = None + self.client.get = mock.Mock(return_value=agent_pool) + self.client.begin_create_or_update = mock.Mock(return_value=agent_pool) + self.cmd.get_models = mock.Mock(return_value=mock.Mock) + + result = aks_agentpool_upgrade( + self.cmd, + self.client, + "rg", + "cluster", + "nodepool", + kubernetes_version="1.29.0", + max_unavailable="1", + yes=True, + ) + + self.assertEqual(result, agent_pool) + self.assertEqual(agent_pool.upgrade_settings.max_unavailable, "1") + self.client.begin_create_or_update.assert_called_once_with( + "rg", + "cluster", + "nodepool", + agent_pool, + headers={}, + ) + def test_aks_stop(self): # public cluster: call begin_stop mc_1 = self.models.ManagedCluster(location="test_location")