Skip to content

Commit 46154c3

Browse files
committed
Make specified version to match current version when turning off autoupgrade
1 parent 1952665 commit 46154c3

File tree

4 files changed

+142
-0
lines changed

4 files changed

+142
-0
lines changed

src/azure-cli/azure/cli/command_modules/acs/custom.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,16 @@ def aks_update(
825825
# DO NOT MOVE: get all the original parameters and save them as a dictionary
826826
raw_parameters = locals()
827827

828+
# Check if auto_upgrade_channel is set to "none"
829+
if auto_upgrade_channel == "none":
830+
warning_message = (
831+
"Since auto-upgrade-channel is set to none, cluster kubernetesVersion will be set to the value of "
832+
"currentKubernetesVersion, all agent pools orchestratorVersion will be set to the value of "
833+
"currentOrchestratorVersion respectively. Continue?"
834+
)
835+
if not prompt_y_n(warning_message, default="n"):
836+
raise CLIError("Operation cancelled by user.")
837+
828838
# decorator pattern
829839
from azure.cli.command_modules.acs.managed_cluster_decorator import AKSManagedClusterUpdateDecorator
830840
aks_update_decorator = AKSManagedClusterUpdateDecorator(
@@ -836,6 +846,9 @@ def aks_update(
836846
try:
837847
# update mc profile
838848
mc = aks_update_decorator.update_mc_profile_default()
849+
# Update kubernetes_version and orchestrator_version based on auto_upgrade_channel
850+
if auto_upgrade_channel == "none":
851+
mc = aks_update_decorator.update_kubernetes_version_and_orchestrator_version(mc)
839852
except DecoratorEarlyExitException:
840853
# exit gracefully
841854
return None

src/azure-cli/azure/cli/command_modules/acs/managed_cluster_decorator.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8432,6 +8432,25 @@ def update_mc_profile_default(self) -> ManagedCluster:
84328432
mc = self.update_node_resource_group_profile(mc)
84338433
return mc
84348434

8435+
def update_kubernetes_version_and_orchestrator_version(self, mc: ManagedCluster) -> ManagedCluster:
8436+
"""Update kubernetes version and orchestrator version for the ManagedCluster object.
8437+
8438+
:param mc: The ManagedCluster object to be updated.
8439+
:return: The updated ManagedCluster object.
8440+
"""
8441+
self._ensure_mc(mc)
8442+
8443+
# Set kubernetes version to match the current kubernetes version if it has a value
8444+
if mc.current_kubernetes_version:
8445+
mc.kubernetes_version = mc.current_kubernetes_version
8446+
8447+
# Set orchestrator version for each agent pool to match the current orchestrator version if it has a value
8448+
for agent_pool in mc.agent_pool_profiles:
8449+
if agent_pool.current_orchestrator_version:
8450+
agent_pool.orchestrator_version = agent_pool.current_orchestrator_version
8451+
8452+
return mc
8453+
84358454
def check_is_postprocessing_required(self, mc: ManagedCluster) -> bool:
84368455
"""Helper function to check if postprocessing is required after sending a PUT request to create the cluster.
84378456

src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
_get_command_context,
2323
_update_addons,
2424
aks_stop,
25+
aks_update,
2526
k8s_install_kubectl,
2627
k8s_install_kubelogin,
2728
merge_kubernetes_configurations,
@@ -820,6 +821,43 @@ def test_aks_stop(self):
820821
)
821822
self.assertEqual(aks_stop(self.cmd, self.client, "rg", "name", False), None)
822823

824+
@mock.patch('azure.cli.command_modules.acs.custom.prompt_y_n', return_value=True)
825+
@mock.patch('azure.cli.command_modules.acs.custom.get_subscription_id', return_value='00000000-0000-0000-0000-000000000000')
826+
@mock.patch('azure.cli.command_modules.acs.custom.cf_agent_pools')
827+
@mock.patch('azure.cli.command_modules.acs.managed_cluster_decorator.AKSManagedClusterUpdateDecorator.update_mc_profile_default')
828+
@mock.patch('azure.cli.command_modules.acs.managed_cluster_decorator.AKSManagedClusterUpdateDecorator.update_kubernetes_version_and_orchestrator_version')
829+
@mock.patch('azure.cli.command_modules.acs.managed_cluster_decorator.AKSManagedClusterUpdateDecorator.update_mc')
830+
def test_aks_update_auto_upgrade_channel_none(self, mock_update_mc, mock_update_kubernetes_version_and_orchestrator_version, mock_update_mc_profile_default, mock_cf_agent_pools, mock_get_subscription_id, mock_prompt_y_n):
831+
resource_group_name = 'test_rg'
832+
name = 'test_cluster'
833+
auto_upgrade_channel = 'none'
834+
835+
# Create a ManagedCluster object
836+
mc = mock.Mock()
837+
mc.kubernetes_version = '1.18.14'
838+
mc.agent_pool_profiles = [
839+
mock.Mock(orchestrator_version='1.18.14'),
840+
mock.Mock(orchestrator_version='1.19.7')
841+
]
842+
mc.current_kubernetes_version = '1.21.2'
843+
mc.agent_pool_profiles[0].current_orchestrator_version = '1.21.2'
844+
mc.agent_pool_profiles[1].current_orchestrator_version = '1.21.2'
845+
846+
mock_update_mc_profile_default.return_value = mc
847+
mock_update_kubernetes_version_and_orchestrator_version.return_value = mc
848+
849+
aks_update(
850+
cmd=self.cmd,
851+
client=self.client,
852+
resource_group_name=resource_group_name,
853+
name=name,
854+
auto_upgrade_channel=auto_upgrade_channel
855+
)
856+
857+
# Check if update_kubernetes_version_and_orchestrator_version was called
858+
mock_update_kubernetes_version_and_orchestrator_version.assert_called_once_with(mc)
859+
# Check if update_mc was called
860+
mock_update_mc.assert_called_once_with(mc)
823861

824862
class TestRunCommand(unittest.TestCase):
825863
def test_get_command_context_invalid_file(self):

src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_managed_cluster_decorator.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10991,6 +10991,78 @@ def test_update_mc_profile_default(self):
1099110991

1099210992
dec_1.context.raw_param.print_usage_statistics()
1099310993

10994+
def test_update_kubernetes_version_and_orchestrator_version(self):
10995+
# First test case
10996+
dec_1 = AKSManagedClusterUpdateDecorator(
10997+
self.cmd,
10998+
self.client,
10999+
{},
11000+
ResourceType.MGMT_CONTAINERSERVICE,
11001+
)
11002+
mc_1 = self.models.ManagedCluster(
11003+
location="test_location",
11004+
kubernetes_version="1.18.14",
11005+
agent_pool_profiles=[
11006+
self.models.ManagedClusterAgentPoolProfile(
11007+
name="agentpool1",
11008+
orchestrator_version="1.18.14"
11009+
),
11010+
self.models.ManagedClusterAgentPoolProfile(
11011+
name="agentpool2",
11012+
orchestrator_version="1.19.7"
11013+
)
11014+
]
11015+
)
11016+
# Set current kubernetes version in the managed cluster
11017+
mc_1.current_kubernetes_version = "1.21.2"
11018+
11019+
# Set current orchestrator version in agent pool profiles
11020+
mc_1.agent_pool_profiles[0].current_orchestrator_version = "1.21.2"
11021+
mc_1.agent_pool_profiles[1].current_orchestrator_version = "1.21.2"
11022+
11023+
dec_1.context.attach_mc(mc_1)
11024+
updated_mc_1 = dec_1.update_kubernetes_version_and_orchestrator_version(mc_1)
11025+
11026+
# Check if kubernetes_version is updated
11027+
self.assertEqual(updated_mc_1.kubernetes_version, "1.21.2")
11028+
# Check if orchestrator_version for each agent pool is updated
11029+
for agent_pool in updated_mc_1.agent_pool_profiles:
11030+
self.assertEqual(agent_pool.orchestrator_version, "1.21.2")
11031+
11032+
# Second test case with both current_kubernetes_version and current_orchestrator_version as None
11033+
dec_2 = AKSManagedClusterUpdateDecorator(
11034+
self.cmd,
11035+
self.client,
11036+
{},
11037+
ResourceType.MGMT_CONTAINERSERVICE,
11038+
)
11039+
mc_2 = self.models.ManagedCluster(
11040+
location="test_location",
11041+
kubernetes_version="1.18.14",
11042+
agent_pool_profiles=[
11043+
self.models.ManagedClusterAgentPoolProfile(
11044+
name="agentpool1",
11045+
orchestrator_version="1.18.14"
11046+
),
11047+
self.models.ManagedClusterAgentPoolProfile(
11048+
name="agentpool2",
11049+
orchestrator_version="1.19.7"
11050+
)
11051+
]
11052+
)
11053+
# Set current kubernetes version and orchestrator version to None
11054+
mc_2.current_kubernetes_version = None
11055+
mc_2.agent_pool_profiles[0].current_orchestrator_version = None
11056+
mc_2.agent_pool_profiles[1].current_orchestrator_version = None
11057+
11058+
dec_2.context.attach_mc(mc_2)
11059+
updated_mc_2 = dec_2.update_kubernetes_version_and_orchestrator_version(mc_2)
11060+
11061+
# Check if kubernetes_version and orchestrator_version remain unchanged
11062+
self.assertEqual(updated_mc_2.kubernetes_version, "1.18.14")
11063+
self.assertEqual(updated_mc_2.agent_pool_profiles[0].orchestrator_version, "1.18.14")
11064+
self.assertEqual(updated_mc_2.agent_pool_profiles[1].orchestrator_version, "1.19.7")
11065+
1099411066
def test_check_is_postprocessing_required(self):
1099511067
dec_1 = AKSManagedClusterUpdateDecorator(
1099611068
self.cmd,

0 commit comments

Comments
 (0)