Skip to content

Commit 9cf16a7

Browse files
author
indusridhar
committed
Add tests for live run
1 parent fedfa8f commit 9cf16a7

1 file changed

Lines changed: 210 additions & 0 deletions

File tree

src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21592,5 +21592,215 @@ def test_aks_create_and_update_with_gateway_api_and_azureservicemesh(
2159221592
# TODO (indusridhar): Add tests for `test_aks_nodepool_get_rollback_versions` and `test_aks_nodepool_rollback`
2159321593
# after AKS RP Jan 2026 release is complete and recently_used_versions field is populated in upgrade profile API
2159421594

21595+
@AllowLargeResponse()
21596+
@AKSCustomResourceGroupPreparer(
21597+
random_name_length=17, name_prefix="clitest", location="westus2"
21598+
)
21599+
def test_aks_nodepool_get_rollback_versions(self, resource_group, resource_group_location):
21600+
"""Test az aks nodepool get-rollback-versions command"""
21601+
aks_name = self.create_random_name("cliakstest", 16)
21602+
node_pool_name = self.create_random_name("c", 6)
21603+
21604+
self.kwargs.update(
21605+
{
21606+
"resource_group": resource_group,
21607+
"name": aks_name,
21608+
"node_pool_name": node_pool_name,
21609+
"ssh_key_value": self.generate_ssh_keys(),
21610+
}
21611+
)
21612+
21613+
# Create cluster with default Kubernetes version
21614+
create_cmd = (
21615+
"aks create --resource-group={resource_group} --name={name} "
21616+
"--nodepool-name {node_pool_name} -c 1 "
21617+
"--ssh-key-value={ssh_key_value}"
21618+
)
21619+
self.cmd(
21620+
create_cmd,
21621+
checks=[
21622+
self.check("provisioningState", "Succeeded"),
21623+
],
21624+
)
21625+
21626+
# Get the nodepool details before upgrade to capture the current versions
21627+
get_nodepool_cmd = (
21628+
"aks nodepool show "
21629+
"--resource-group={resource_group} "
21630+
"--cluster-name={name} "
21631+
"--name={node_pool_name}"
21632+
)
21633+
nodepool_before_upgrade = self.cmd(get_nodepool_cmd).get_output_in_json()
21634+
original_k8s_version = nodepool_before_upgrade["currentOrchestratorVersion"]
21635+
original_node_image_version = nodepool_before_upgrade["nodeImageVersion"]
21636+
21637+
# Get valid upgrade versions from the API
21638+
get_upgrades_cmd = (
21639+
"aks nodepool get-upgrades "
21640+
"--resource-group={resource_group} "
21641+
"--cluster-name={name} "
21642+
"--name={node_pool_name} "
21643+
"-o json"
21644+
)
21645+
upgrades = self.cmd(get_upgrades_cmd).get_output_in_json()
21646+
21647+
# Find a valid upgrade version from the available upgrades
21648+
upgrade_version = None
21649+
if upgrades and 'componentsByReleases' in upgrades and len(upgrades['componentsByReleases']) > 0:
21650+
# Get the first available kubernetes version from upgrades
21651+
first_release = upgrades['componentsByReleases'][0]
21652+
if 'kubernetesVersion' in first_release:
21653+
upgrade_version = first_release['kubernetesVersion']
21654+
21655+
# Skip test if no upgrade version is available
21656+
if not upgrade_version:
21657+
self.skipTest("No upgrade version available for testing")
21658+
21659+
self.kwargs.update({"upgrade_version": upgrade_version})
21660+
21661+
# Upgrade the nodepool to populate recently used versions
21662+
upgrade_cmd = (
21663+
"aks nodepool upgrade "
21664+
"--resource-group={resource_group} "
21665+
"--cluster-name={name} "
21666+
"--name={node_pool_name} "
21667+
"--kubernetes-version={upgrade_version} "
21668+
"--yes"
21669+
)
21670+
self.cmd(
21671+
upgrade_cmd,
21672+
checks=[
21673+
self.check("provisioningState", "Succeeded"),
21674+
],
21675+
)
21676+
21677+
# Get rollback versions - should now have entries after the upgrade
21678+
get_rollback_cmd = (
21679+
"aks nodepool get-rollback-versions "
21680+
"--resource-group={resource_group} "
21681+
"--cluster-name={name} "
21682+
"--nodepool-name={node_pool_name}"
21683+
)
21684+
rollback_versions = self.cmd(get_rollback_cmd).get_output_in_json()
21685+
21686+
# Verify that we have at least one rollback version available
21687+
assert len(rollback_versions) > 0, "Expected rollback versions after upgrade but found none"
21688+
21689+
# Verify that the rollback versions contain the original versions from before the upgrade
21690+
assert rollback_versions[0]["kubernetesVersion"] == original_k8s_version
21691+
assert rollback_versions[0]["nodeImageVersion"] == original_node_image_version
21692+
21693+
# Cleanup
21694+
self.cmd(
21695+
"aks delete -g {resource_group} -n {name} --yes --no-wait",
21696+
checks=[self.is_empty()],
21697+
)
21698+
21699+
@AllowLargeResponse()
21700+
@AKSCustomResourceGroupPreparer(
21701+
random_name_length=17, name_prefix="clitest", location="westus2"
21702+
)
21703+
def test_aks_nodepool_rollback(self, resource_group, resource_group_location):
21704+
"""Test az aks nodepool rollback command with various scenarios"""
21705+
aks_name = self.create_random_name("cliakstest", 16)
21706+
node_pool_name = self.create_random_name("c", 6)
21707+
21708+
self.kwargs.update(
21709+
{
21710+
"resource_group": resource_group,
21711+
"name": aks_name,
21712+
"node_pool_name": node_pool_name,
21713+
"ssh_key_value": self.generate_ssh_keys(),
21714+
}
21715+
)
21716+
21717+
# Create cluster with default Kubernetes version
21718+
create_cmd = (
21719+
"aks create --resource-group={resource_group} --name={name} "
21720+
"--nodepool-name {node_pool_name} -c 1 "
21721+
"--ssh-key-value={ssh_key_value}"
21722+
)
21723+
self.cmd(
21724+
create_cmd,
21725+
checks=[
21726+
self.check("provisioningState", "Succeeded"),
21727+
],
21728+
)
21729+
21730+
# Get the nodepool details before upgrade to capture the current versions
21731+
get_nodepool_cmd = (
21732+
"aks nodepool show "
21733+
"--resource-group={resource_group} "
21734+
"--cluster-name={name} "
21735+
"--name={node_pool_name}"
21736+
)
21737+
nodepool_before_upgrade = self.cmd(get_nodepool_cmd).get_output_in_json()
21738+
original_k8s_version = nodepool_before_upgrade["currentOrchestratorVersion"]
21739+
original_node_image_version = nodepool_before_upgrade["nodeImageVersion"]
21740+
21741+
# Get valid upgrade versions from the API
21742+
get_upgrades_cmd = (
21743+
"aks nodepool get-upgrades "
21744+
"--resource-group={resource_group} "
21745+
"--cluster-name={name} "
21746+
"--name={node_pool_name} "
21747+
"-o json"
21748+
)
21749+
upgrades = self.cmd(get_upgrades_cmd).get_output_in_json()
21750+
21751+
# Find a valid upgrade version from the available upgrades
21752+
upgrade_version = None
21753+
if upgrades and 'componentsByReleases' in upgrades and len(upgrades['componentsByReleases']) > 0:
21754+
# Get the first available kubernetes version from upgrades
21755+
first_release = upgrades['componentsByReleases'][0]
21756+
if 'kubernetesVersion' in first_release:
21757+
upgrade_version = first_release['kubernetesVersion']
21758+
21759+
# Skip test if no upgrade version is available
21760+
if not upgrade_version:
21761+
self.skipTest("No upgrade version available for testing")
21762+
21763+
self.kwargs.update({"upgrade_version": upgrade_version})
21764+
21765+
# Upgrade the nodepool to create rollback history
21766+
upgrade_cmd = (
21767+
"aks nodepool upgrade "
21768+
"--resource-group={resource_group} "
21769+
"--cluster-name={name} "
21770+
"--name={node_pool_name} "
21771+
"--kubernetes-version={upgrade_version} "
21772+
"--yes"
21773+
)
21774+
self.cmd(
21775+
upgrade_cmd,
21776+
checks=[
21777+
self.check("provisioningState", "Succeeded"),
21778+
],
21779+
)
21780+
21781+
# Rollback to most recent version (N-1)
21782+
rollback_cmd = (
21783+
"aks nodepool rollback "
21784+
"--resource-group={resource_group} "
21785+
"--cluster-name={name} "
21786+
"--name={node_pool_name}"
21787+
)
21788+
rollback_result = self.cmd(
21789+
rollback_cmd,
21790+
checks=[
21791+
self.check("provisioningState", "Succeeded"),
21792+
],
21793+
).get_output_in_json()
21794+
21795+
# Verify that both versions were rolled back to the most recent (original) versions
21796+
assert rollback_result["currentOrchestratorVersion"] == original_k8s_version
21797+
assert rollback_result["nodeImageVersion"] == original_node_image_version
21798+
21799+
# Cleanup
21800+
self.cmd(
21801+
"aks delete -g {resource_group} -n {name} --yes --no-wait",
21802+
checks=[self.is_empty()],
21803+
)
21804+
2159521805
# TODO (zheweihu): add test `test_aks_create_and_update_with_gateway_api_without_azureservicemesh`
2159621806
# once https://msazure.visualstudio.com/CloudNativeCompute/_git/aks-rp/pullrequest/14404771 is rolled out

0 commit comments

Comments
 (0)