Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions src/azure-cli/azure/cli/command_modules/acs/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -3178,13 +3178,20 @@ def aks_agentpool_rollback(
node_os_upgrade_channel_value and str(node_os_upgrade_channel_value).lower() not in ["none", "unmanaged"]
)

if upgrade_channel_enabled or node_os_channel_enabled:
if upgrade_channel_enabled:
logger.warning(
"Auto-upgrade is enabled on cluster '%s' (upgradeChannel=%s, nodeOSUpgradeChannel=%s). "
"Auto-upgrade is enabled on cluster '%s' (upgradeChannel=%s). "
"Rollback will not succeed until auto-upgrade is disabled. Please disable auto-upgrade to roll back the node pool.",
cluster_name,
upgrade_channel_value or "none",
node_os_upgrade_channel_value or "Unmanaged",
)
elif node_os_channel_enabled:
logger.warning(
"nodeOSUpgradeChannel is enabled on cluster '%s' (nodeOSUpgradeChannel=%s). "
"The orchestrator version rollback will proceed, but the node image rollback "
"will not succeed. Please disable nodeOSUpgradeChannel if you want to roll back the node image.",
cluster_name,
node_os_upgrade_channel_value,
)

logger.info("Fetching the most recent rollback version...")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1788,6 +1788,66 @@ def test_aks_agentpool_rollback_raises_when_no_recent_versions(self, mock_sdk_no

mock_sdk_no_wait.assert_not_called()

@mock.patch("azure.cli.command_modules.acs._client_factory.cf_managed_clusters")
@mock.patch("azure.cli.command_modules.acs.custom.sdk_no_wait")
def test_aks_agentpool_rollback_warns_node_image_only_for_node_os_channel(
self, mock_sdk_no_wait, mock_cf_managed_clusters
):
rollback_version = mock.Mock(
orchestrator_version="1.34.8",
node_image_version="AKSUbuntu-2204gen2containerd-202607.20.0",
timestamp=datetime.datetime(2026, 8, 5),
)
client = mock.Mock()
client.get_upgrade_profile.return_value = mock.Mock(recently_used_versions=[rollback_version])
client.get.return_value = mock.Mock()
mock_cf_managed_clusters.return_value.get.return_value = mock.Mock(
auto_upgrade_profile=mock.Mock(
upgrade_channel=mock.Mock(value="none"),
node_os_upgrade_channel=mock.Mock(value="NodeImage"),
)
)

with mock.patch("azure.cli.command_modules.acs.custom.logger.warning") as mock_warning:
aks_agentpool_rollback(self.cmd, client, "rg", "cluster", "nodepool1")

mock_warning.assert_called_once()
warning = mock_warning.call_args.args[0]
self.assertIn("The orchestrator version rollback will proceed", warning)
self.assertIn("the node image rollback will not succeed", warning)
self.assertNotIn("Rollback will not succeed until auto-upgrade is disabled", warning)
mock_sdk_no_wait.assert_called_once()

@mock.patch("azure.cli.command_modules.acs._client_factory.cf_managed_clusters")
@mock.patch("azure.cli.command_modules.acs.custom.sdk_no_wait")
def test_aks_agentpool_rollback_prioritizes_upgrade_channel_warning(
self, mock_sdk_no_wait, mock_cf_managed_clusters
):
rollback_version = mock.Mock(
orchestrator_version="1.34.8",
node_image_version="AKSUbuntu-2204gen2containerd-202607.20.0",
timestamp=datetime.datetime(2026, 8, 5),
)
client = mock.Mock()
client.get_upgrade_profile.return_value = mock.Mock(recently_used_versions=[rollback_version])
client.get.return_value = mock.Mock()
mock_cf_managed_clusters.return_value.get.return_value = mock.Mock(
auto_upgrade_profile=mock.Mock(
upgrade_channel=mock.Mock(value="stable"),
node_os_upgrade_channel=mock.Mock(value="NodeImage"),
)
)

with mock.patch("azure.cli.command_modules.acs.custom.logger.warning") as mock_warning:
aks_agentpool_rollback(self.cmd, client, "rg", "cluster", "nodepool1")

mock_warning.assert_called_once()
warning = mock_warning.call_args.args[0]
self.assertIn("Rollback will not succeed until auto-upgrade is disabled", warning)
self.assertNotIn("nodeOSUpgradeChannel", warning)
self.assertNotIn("The orchestrator version rollback will proceed", warning)
mock_sdk_no_wait.assert_called_once()


if __name__ == "__main__":
unittest.main()
Loading