From 3752bec17454d8b254e2180b4e74c97810e2ef4a Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 17 Mar 2026 11:22:18 -0400 Subject: [PATCH 01/18] add spot max price flag --- src/aks-preview/azext_aks_preview/_help.py | 3 +++ src/aks-preview/azext_aks_preview/_params.py | 7 +++++++ src/aks-preview/azext_aks_preview/custom.py | 1 + src/aks-preview/azext_aks_preview/machine.py | 16 +++++++++++++++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/_help.py b/src/aks-preview/azext_aks_preview/_help.py index cc7cce3865f..7e280fb1ec7 100644 --- a/src/aks-preview/azext_aks_preview/_help.py +++ b/src/aks-preview/azext_aks_preview/_help.py @@ -2685,6 +2685,9 @@ - name: --node-public-ip-tags type: string short-summary: The ipTags of the machine public IPs. + - name: --spot-max-price + type: number + short-summary: The max price (in US Dollars) you are willing to pay for spot instances. """ helps['aks machine update'] = """ diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index 768d3e6b873..5b07116d157 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -2315,6 +2315,13 @@ def load_arguments(self, _): help="Version of Kubernetes to use for the machine.", ) + c.argument( + "spot_max_price", + type=float, + validator=validate_spot_max_price, + help="The max price (in US Dollars) you are willing to pay for spot instances. Possible values are any decimal value greater than zero or -1 which indicates default price to be up-to on-demand. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)" + ) + with self.argument_context("aks machine update") as c: c.argument( "machine_name", help="The machine name." diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index de53ffb9648..8ffbf62f164 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -2721,6 +2721,7 @@ def aks_machine_add( vm_size=None, kubernetes_version=None, no_wait=False, + spot_max_price=None, ): existedMachine = None try: diff --git a/src/aks-preview/azext_aks_preview/machine.py b/src/aks-preview/azext_aks_preview/machine.py index 69d55ab39e4..64b22df523a 100644 --- a/src/aks-preview/azext_aks_preview/machine.py +++ b/src/aks-preview/azext_aks_preview/machine.py @@ -90,8 +90,10 @@ def constructMachine(cmd, raw_parameters, machine_name): network=set_machine_network(cmd, raw_parameters), hardware=set_machine_hardware_profile(cmd, raw_parameters), kubernetes=set_machine_kubernetes_profile(cmd, raw_parameters), - operating_system=set_machine_os_profile(cmd, raw_parameters) + operating_system=set_machine_os_profile(cmd, raw_parameters), + billing=set_machine_billing_profile(cmd, raw_parameters) ) + Machine = cmd.get_models( "Machine", resource_type=CUSTOM_MGMT_AKS_PREVIEW, @@ -196,3 +198,15 @@ def set_machine_os_profile(cmd, raw_parameters): enable_fips=enable_fips ) return machineOSProfile + +def set_machine_billing_profile(cmd, raw_parameters): + spot_max_price = raw_parameters.get("spot_max_price") + MachineBillingProfile = cmd.get_models( + "MachineBillingProfile", + resource_type=CUSTOM_MGMT_AKS_PREVIEW, + operation_group="machines" + ) + machineBillingProfile = MachineBillingProfile( + spot_max_price=spot_max_price + ) + return machineBillingProfile \ No newline at end of file From b7877699517fb85e1ed6bcae00abfaa989515d52 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 17 Mar 2026 11:31:46 -0400 Subject: [PATCH 02/18] enable ultra ssd and eviction policy --- src/aks-preview/azext_aks_preview/_help.py | 6 ++++++ src/aks-preview/azext_aks_preview/_params.py | 10 +++++++++- src/aks-preview/azext_aks_preview/custom.py | 2 ++ src/aks-preview/azext_aks_preview/machine.py | 6 +++++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/_help.py b/src/aks-preview/azext_aks_preview/_help.py index 7e280fb1ec7..2e1fd98562b 100644 --- a/src/aks-preview/azext_aks_preview/_help.py +++ b/src/aks-preview/azext_aks_preview/_help.py @@ -2688,6 +2688,12 @@ - name: --spot-max-price type: number short-summary: The max price (in US Dollars) you are willing to pay for spot instances. + - name: --enable-ultra-ssd + type: bool + short-summary: Whether to enable UltraSSD. + - name: --eviction-policy + type: string + short-summary: The eviction policy for machine. This cannot be specified unless the priority is 'Spot'. If not specified, the default is 'Delete'. """ helps['aks machine update'] = """ diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index 5b07116d157..97209a41d3b 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -2314,13 +2314,21 @@ def load_arguments(self, _): validator=validate_k8s_version, help="Version of Kubernetes to use for the machine.", ) - c.argument( "spot_max_price", type=float, validator=validate_spot_max_price, help="The max price (in US Dollars) you are willing to pay for spot instances. Possible values are any decimal value greater than zero or -1 which indicates default price to be up-to on-demand. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)" ) + c.argument( + "enable_ultra_ssd", + action="store_true" + ) + c.argument( + "eviction_policy", + arg_type=get_enum_type(node_eviction_policies), + validator=validate_eviction_policy, + ) with self.argument_context("aks machine update") as c: c.argument( diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index 8ffbf62f164..ca05baa79bc 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -2722,6 +2722,8 @@ def aks_machine_add( kubernetes_version=None, no_wait=False, spot_max_price=None, + enable_ultra_ssd=False, + eviction_policy=None, ): existedMachine = None try: diff --git a/src/aks-preview/azext_aks_preview/machine.py b/src/aks-preview/azext_aks_preview/machine.py index 64b22df523a..a3508b7640f 100644 --- a/src/aks-preview/azext_aks_preview/machine.py +++ b/src/aks-preview/azext_aks_preview/machine.py @@ -84,9 +84,11 @@ def constructMachine(cmd, raw_parameters, machine_name): ) tags = raw_parameters.get("tags") priority = raw_parameters.get("priority") + eviction_policy = raw_parameters.get("eviction_policy") machineProperties = MachineProperties( tags=tags, priority=priority, + eviction_policy=eviction_policy, network=set_machine_network(cmd, raw_parameters), hardware=set_machine_hardware_profile(cmd, raw_parameters), kubernetes=set_machine_kubernetes_profile(cmd, raw_parameters), @@ -108,6 +110,7 @@ def constructMachine(cmd, raw_parameters, machine_name): def set_machine_hardware_profile(cmd, raw_parameters): + enable_ultra_ssd = raw_parameters.get("enable_ultra_ssd") vm_size = raw_parameters.get("vm_size") if vm_size is None: raise RequiredArgumentMissingError( @@ -119,7 +122,8 @@ def set_machine_hardware_profile(cmd, raw_parameters): operation_group="machines" ) machine_hardware_profile = MachineHardwareProfile( - vm_size=vm_size + vm_size=vm_size, + enable_ultra_ssd=enable_ultra_ssd ) return machine_hardware_profile From bf3be79849da6786c21dc3943ed09b411e39069a Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 17 Mar 2026 11:31:52 -0400 Subject: [PATCH 03/18] change notes --- src/aks-preview/HISTORY.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index 47a96bbb6e9..de8623e9ffa 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -13,6 +13,9 @@ Pending +++++++ * `az aks create/update`: Add `--enable-app-routing-istio` / `--disable-app-routing-istio` (short: `--enable-ari` / `--disable-ari`) flags to enable or disable Istio as a Gateway API implementation for App Routing. * `az aks approuting gateway istio enable/disable`: Add new subcommands to enable or disable the Istio Gateway API implementation for App Routing on an existing cluster. +* `az aks machine add`: Add `--spot-max-price` flag support to set the max price (in US Dollars) you are willing to pay for spot instances on a machine. +* `az aks machine add`: Add `--eviction-policy` flag support to set the eviction policy for a machine. +* `az aks machine add`: Add `--enable-ultra-ssd` flag support to enable ultra ssd on a machine. 19.0.0b25 +++++++ From 2be46ca7ebe0eaa9422b205521eb97dc8b3be185 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 17 Mar 2026 11:52:15 -0400 Subject: [PATCH 04/18] linting --- src/aks-preview/azext_aks_preview/_params.py | 6 +++--- src/aks-preview/azext_aks_preview/machine.py | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index 97209a41d3b..ae7e26c62fe 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -2316,9 +2316,9 @@ def load_arguments(self, _): ) c.argument( "spot_max_price", - type=float, - validator=validate_spot_max_price, - help="The max price (in US Dollars) you are willing to pay for spot instances. Possible values are any decimal value greater than zero or -1 which indicates default price to be up-to on-demand. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)" + type=float, + validator=validate_spot_max_price, + help="The max price (in US Dollars) you are willing to pay for spot instances." ) c.argument( "enable_ultra_ssd", diff --git a/src/aks-preview/azext_aks_preview/machine.py b/src/aks-preview/azext_aks_preview/machine.py index a3508b7640f..3b69ebcf987 100644 --- a/src/aks-preview/azext_aks_preview/machine.py +++ b/src/aks-preview/azext_aks_preview/machine.py @@ -203,6 +203,7 @@ def set_machine_os_profile(cmd, raw_parameters): ) return machineOSProfile + def set_machine_billing_profile(cmd, raw_parameters): spot_max_price = raw_parameters.get("spot_max_price") MachineBillingProfile = cmd.get_models( @@ -213,4 +214,4 @@ def set_machine_billing_profile(cmd, raw_parameters): machineBillingProfile = MachineBillingProfile( spot_max_price=spot_max_price ) - return machineBillingProfile \ No newline at end of file + return machineBillingProfile From ad7b35d446e2a411beb04e359bde9d92433df307 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 17 Mar 2026 12:07:04 -0400 Subject: [PATCH 05/18] linting --- src/aks-preview/azext_aks_preview/_params.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index ae7e26c62fe..5e7e39eea0e 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -2315,7 +2315,7 @@ def load_arguments(self, _): help="Version of Kubernetes to use for the machine.", ) c.argument( - "spot_max_price", + "spot_max_price", type=float, validator=validate_spot_max_price, help="The max price (in US Dollars) you are willing to pay for spot instances." From 72f4df4a2ed25dc3830a83822261f6694475a61a Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Wed, 18 Mar 2026 12:19:52 -0400 Subject: [PATCH 06/18] test coverage --- .../tests/latest/test_aks_commands.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 4f98ec9da87..32fb8992f08 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2630,6 +2630,81 @@ def test_aks_machine_add_cmds(self, resource_group, resource_group_location): checks=[self.is_empty()], ) + @AllowLargeResponse() + @AKSCustomResourceGroupPreparer( + random_name_length=17, name_prefix="clitest", location="westus2" + ) + def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group_location): + aks_name = self.create_random_name("cliakstest", 16) + self.kwargs.update( + { + "resource_group": resource_group, + "location": resource_group_location, + "name": aks_name, + "ssh_key_value": self.generate_ssh_keys(), + } + ) + # create aks cluster + create_cmd = "aks create --resource-group={resource_group} --name={name} --ssh-key-value={ssh_key_value}" + self.cmd( + create_cmd, + checks=[ + self.check("provisioningState", "Succeeded"), + ], + ) + + node_pool_name = self.create_random_name("c", 6) + self.kwargs.update( + { + "resource_group": resource_group, + "name": aks_name, + "node_pool_name": node_pool_name, + "ssh_key_value": self.generate_ssh_keys(), + "machine_name": "machinespot", + "vm_size": "Standard_D4s_v4", + } + ) + + # add machines nodepool + self.cmd( + "aks nodepool add --resource-group={resource_group} --cluster-name={name} --name={node_pool_name} --mode=Machines", + checks=[self.check("provisioningState", "Succeeded"), self.check("mode", "Machines")], + ) + + # add machine with spot priority, eviction policy, spot-max-price, and ultra ssd + self.cmd( + "aks machine add " + " --resource-group={resource_group} " + " --cluster-name={name} " + " --nodepool-name={node_pool_name} " + " --machine-name={machine_name} " + " --vm-size={vm_size} " + " --priority Spot " + " --eviction-policy Delete " + " --spot-max-price 0.5 " + " --enable-ultra-ssd" + ) + + # show the machine and verify spot/eviction/ultra-ssd settings + show_cmd = ( + "aks machine show " + " --resource-group={resource_group} " + " --cluster-name={name} " + " --nodepool-name={node_pool_name} " + " --machine-name={machine_name} -o json" + ) + machine_show = self.cmd(show_cmd).get_output_in_json() + assert machine_show["properties"]["priority"] == "Spot" + assert machine_show["properties"]["evictionPolicy"] == "Delete" + assert machine_show["properties"]["billing"]["spotMaxPrice"] == 0.5 + assert machine_show["properties"]["hardware"]["enableUltraSSD"] is True + + # delete AKS cluster + self.cmd( + "aks delete -g {resource_group} -n {name} --yes --no-wait", + checks=[self.is_empty()], + ) + @AllowLargeResponse() @AKSCustomResourceGroupPreparer( random_name_length=17, name_prefix="clitest", location="westus2" From 519845c29e06b1a7d3c5f973cc9e6912f27593aa Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Thu, 19 Mar 2026 16:13:35 -0400 Subject: [PATCH 07/18] fix default --- src/aks-preview/azext_aks_preview/custom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index ca05baa79bc..899ab7b425e 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -2721,7 +2721,7 @@ def aks_machine_add( vm_size=None, kubernetes_version=None, no_wait=False, - spot_max_price=None, + spot_max_price=float("nan"), enable_ultra_ssd=False, eviction_policy=None, ): From 20fef2b9b39389a40968d82a747529c754ea9ab1 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Fri, 20 Mar 2026 13:04:37 -0400 Subject: [PATCH 08/18] modify test --- .../tests/latest/test_aks_commands.py | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index c43c713bf49..98a8c490776 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2691,39 +2691,41 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): ) def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group_location): aks_name = self.create_random_name("cliakstest", 16) + nodepool_name = self.create_random_name("c", 6) self.kwargs.update( { "resource_group": resource_group, "location": resource_group_location, "name": aks_name, "ssh_key_value": self.generate_ssh_keys(), + "nodepool_name": nodepool_name, + "machine_name": "machinetest1", + "vm_size": "Standard_D4s_v3", } ) + # create aks cluster - create_cmd = "aks create --resource-group={resource_group} --name={name} --ssh-key-value={ssh_key_value}" self.cmd( - create_cmd, + "aks create " + "--resource-group={resource_group} " + "--name={name} " + "--ssh-key-value={ssh_key_value}", checks=[ self.check("provisioningState", "Succeeded"), ], ) - node_pool_name = self.create_random_name("c", 6) - self.kwargs.update( - { - "resource_group": resource_group, - "name": aks_name, - "node_pool_name": node_pool_name, - "ssh_key_value": self.generate_ssh_keys(), - "machine_name": "machinespot", - "vm_size": "Standard_D4s_v4", - } - ) - # add machines nodepool self.cmd( - "aks nodepool add --resource-group={resource_group} --cluster-name={name} --name={node_pool_name} --mode=Machines", - checks=[self.check("provisioningState", "Succeeded"), self.check("mode", "Machines")], + "aks nodepool add " + "--resource-group={resource_group}" + " --cluster-name={name} " + "--name={nodepool_name} " + "--mode=Machines", + checks=[ + self.check("provisioningState", "Succeeded"), + self.check("mode", "Machines"), + ], ) # add machine with spot priority, eviction policy, spot-max-price, and ultra ssd @@ -2731,7 +2733,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group "aks machine add " " --resource-group={resource_group} " " --cluster-name={name} " - " --nodepool-name={node_pool_name} " + " --nodepool-name={nodepool_name} " " --machine-name={machine_name} " " --vm-size={vm_size} " " --priority Spot " @@ -2745,7 +2747,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group "aks machine show " " --resource-group={resource_group} " " --cluster-name={name} " - " --nodepool-name={node_pool_name} " + " --nodepool-name={nodepool_name} " " --machine-name={machine_name} -o json" ) machine_show = self.cmd(show_cmd).get_output_in_json() From fb1bf725e8b749e9512e58c69a34382bbd36be55 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 24 Mar 2026 11:13:10 -0400 Subject: [PATCH 09/18] hardware property name --- src/aks-preview/azext_aks_preview/machine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/machine.py b/src/aks-preview/azext_aks_preview/machine.py index 3b69ebcf987..3bbf75ece1e 100644 --- a/src/aks-preview/azext_aks_preview/machine.py +++ b/src/aks-preview/azext_aks_preview/machine.py @@ -123,7 +123,7 @@ def set_machine_hardware_profile(cmd, raw_parameters): ) machine_hardware_profile = MachineHardwareProfile( vm_size=vm_size, - enable_ultra_ssd=enable_ultra_ssd + ultra_ssd_enabled=enable_ultra_ssd ) return machine_hardware_profile From 799f29c1d1f199691e1722d425028a3bff0aa9b0 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 24 Mar 2026 11:35:21 -0400 Subject: [PATCH 10/18] add zones --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 9c74057d2b6..b15866752a4 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2736,6 +2736,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group " --nodepool-name={nodepool_name} " " --machine-name={machine_name} " " --vm-size={vm_size} " + " --zones= 1 " " --priority Spot " " --eviction-policy Delete " " --spot-max-price 0.5 " From 4d42dc574bcfd26e242bf84d666b9c0715e9d92b Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 24 Mar 2026 11:56:11 -0400 Subject: [PATCH 11/18] space --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index b15866752a4..3f8a794eeb7 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2736,7 +2736,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group " --nodepool-name={nodepool_name} " " --machine-name={machine_name} " " --vm-size={vm_size} " - " --zones= 1 " + " --zones=1 " " --priority Spot " " --eviction-policy Delete " " --spot-max-price 0.5 " From 47806a98915122f4e9775f6b416f198ffd798286 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 24 Mar 2026 12:58:47 -0400 Subject: [PATCH 12/18] nodepool zone --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 3f8a794eeb7..03ad34b0480 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2721,6 +2721,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group "--resource-group={resource_group}" " --cluster-name={name} " "--name={nodepool_name} " + " --zones=1 " "--mode=Machines", checks=[ self.check("provisioningState", "Succeeded"), From 5712645594b591d86f37b2638fa7b77a3efc97bf Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Tue, 24 Mar 2026 13:39:07 -0400 Subject: [PATCH 13/18] multiple zones --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 03ad34b0480..a9c8ff7a8e7 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2721,7 +2721,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group "--resource-group={resource_group}" " --cluster-name={name} " "--name={nodepool_name} " - " --zones=1 " + " --zones=1 2 3 " "--mode=Machines", checks=[ self.check("provisioningState", "Succeeded"), From d7882ce2de23432ffbb1f270b8600ada0c423cfa Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Wed, 25 Mar 2026 17:25:14 -0400 Subject: [PATCH 14/18] typo --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index a9c8ff7a8e7..2c4409299fc 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2721,7 +2721,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group "--resource-group={resource_group}" " --cluster-name={name} " "--name={nodepool_name} " - " --zones=1 2 3 " + " --zones 1 2 3 " "--mode=Machines", checks=[ self.check("provisioningState", "Succeeded"), From 360a345b7b82e4459f799a26a5bfd3d88dd28704 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Thu, 26 Mar 2026 12:23:49 -0400 Subject: [PATCH 15/18] fix silently discarded zones property --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 3 +++ .../azure_mgmt_preview_aks/models/_models_py3.py | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 36eb5d928ce..0e4eea28ecb 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2605,6 +2605,7 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): "--resource-group={resource_group}" " --cluster-name={name} " "--name={nodepool_name} " + " --zones 1 2 3 " "--mode=Machines", checks=[ self.check("provisioningState", "Succeeded"), @@ -2619,6 +2620,7 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): "--cluster-name={name} " "--nodepool-name={nodepool_name} " "--machine-name={machine_name1} " + " --zones=1 " "--vm-size={vm_size}" ) self.cmd( @@ -2627,6 +2629,7 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): "--cluster-name={name} " "--nodepool-name={nodepool_name} " "--machine-name={machine_name2} " + " --zones=1 " "--vm-size={vm_size}" ) 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..9b4e028a5df 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 @@ -4502,7 +4502,6 @@ class Machine(ProxyResource): "name": {"readonly": True}, "type": {"readonly": True}, "system_data": {"readonly": True}, - "zones": {"readonly": True}, } _attribute_map = { @@ -4514,14 +4513,16 @@ class Machine(ProxyResource): "zones": {"key": "zones", "type": "[str]"}, } - def __init__(self, *, properties: Optional["_models.MachineProperties"] = None, **kwargs: Any) -> None: + def __init__(self, *, properties: Optional["_models.MachineProperties"] = None, zones: Optional[List[str]] = None, **kwargs: Any) -> None: """ :keyword properties: The properties of the machine. :paramtype properties: ~azure.mgmt.containerservice.models.MachineProperties + :keyword zones: The Availability zone in which machine is located. + :paramtype zones: list[str] """ super().__init__(**kwargs) self.properties = properties - self.zones: Optional[List[str]] = None + self.zones = zones class MachineBillingProfile(_serialization.Model): From b3fdfb4ae650eddae37685598b091c6548f85f36 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Thu, 26 Mar 2026 18:19:28 -0400 Subject: [PATCH 16/18] key error --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 0e4eea28ecb..d04ad812122 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2759,7 +2759,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group assert machine_show["properties"]["priority"] == "Spot" assert machine_show["properties"]["evictionPolicy"] == "Delete" assert machine_show["properties"]["billing"]["spotMaxPrice"] == 0.5 - assert machine_show["properties"]["hardware"]["enableUltraSSD"] is True + assert machine_show["properties"]["hardware"]["ultraSsdEnabled"] is True # delete AKS cluster self.cmd( From 32c32063a26753c152bb215eefe9f1a37b9e0b22 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Mon, 30 Mar 2026 16:55:27 -0400 Subject: [PATCH 17/18] restore to main --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 3 --- .../azure_mgmt_preview_aks/models/_models_py3.py | 7 +++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index d04ad812122..9f8364595d2 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2605,7 +2605,6 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): "--resource-group={resource_group}" " --cluster-name={name} " "--name={nodepool_name} " - " --zones 1 2 3 " "--mode=Machines", checks=[ self.check("provisioningState", "Succeeded"), @@ -2620,7 +2619,6 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): "--cluster-name={name} " "--nodepool-name={nodepool_name} " "--machine-name={machine_name1} " - " --zones=1 " "--vm-size={vm_size}" ) self.cmd( @@ -2629,7 +2627,6 @@ def test_aks_machines_nodepool(self, resource_group, resource_group_location): "--cluster-name={name} " "--nodepool-name={nodepool_name} " "--machine-name={machine_name2} " - " --zones=1 " "--vm-size={vm_size}" ) 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 9b4e028a5df..e5f651e67e7 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 @@ -4502,6 +4502,7 @@ class Machine(ProxyResource): "name": {"readonly": True}, "type": {"readonly": True}, "system_data": {"readonly": True}, + "zones": {"readonly": True}, } _attribute_map = { @@ -4513,16 +4514,14 @@ class Machine(ProxyResource): "zones": {"key": "zones", "type": "[str]"}, } - def __init__(self, *, properties: Optional["_models.MachineProperties"] = None, zones: Optional[List[str]] = None, **kwargs: Any) -> None: + def __init__(self, *, properties: Optional["_models.MachineProperties"] = None, **kwargs: Any) -> None: """ :keyword properties: The properties of the machine. :paramtype properties: ~azure.mgmt.containerservice.models.MachineProperties - :keyword zones: The Availability zone in which machine is located. - :paramtype zones: list[str] """ super().__init__(**kwargs) self.properties = properties - self.zones = zones + self.zones: Optional[List[str]] = None class MachineBillingProfile(_serialization.Model): From e6b60d18472a38f14013a0221478b950a3740127 Mon Sep 17 00:00:00 2001 From: Erin Borders Date: Mon, 30 Mar 2026 16:55:42 -0400 Subject: [PATCH 18/18] zones argument --- .../azext_aks_preview/tests/latest/test_aks_commands.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py index 9f8364595d2..59fd78e03fe 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py @@ -2721,7 +2721,6 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group "--resource-group={resource_group}" " --cluster-name={name} " "--name={nodepool_name} " - " --zones 1 2 3 " "--mode=Machines", checks=[ self.check("provisioningState", "Succeeded"), @@ -2737,7 +2736,7 @@ def test_aks_machine_add_spot_and_ultra_ssd(self, resource_group, resource_group " --nodepool-name={nodepool_name} " " --machine-name={machine_name} " " --vm-size={vm_size} " - " --zones=1 " + " --zones 1 " " --priority Spot " " --eviction-policy Delete " " --spot-max-price 0.5 "