Skip to content

Commit e4d708c

Browse files
authored
Adding enable ultra ssd, eviction policy, and spot max price support for machine (#9696)
1 parent 8b8ac04 commit e4d708c

File tree

8 files changed

+2129
-5
lines changed

8 files changed

+2129
-5
lines changed

src/aks-preview/HISTORY.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ To release a new version, please select a new version number (usually plus 1 to
1111

1212
Pending
1313
+++++++
14+
* `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.
15+
* `az aks machine add`: Add `--eviction-policy` flag support to set the eviction policy for a machine.
16+
* `az aks machine add`: Add `--enable-ultra-ssd` flag support to enable ultra ssd on a machine.
1417

1518
20.0.0b1
1619
+++++++

src/aks-preview/azext_aks_preview/_help.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2731,6 +2731,15 @@
27312731
- name: --node-public-ip-tags
27322732
type: string
27332733
short-summary: The ipTags of the machine public IPs.
2734+
- name: --spot-max-price
2735+
type: number
2736+
short-summary: The max price (in US Dollars) you are willing to pay for spot instances.
2737+
- name: --enable-ultra-ssd
2738+
type: bool
2739+
short-summary: Whether to enable UltraSSD.
2740+
- name: --eviction-policy
2741+
type: string
2742+
short-summary: The eviction policy for machine. This cannot be specified unless the priority is 'Spot'. If not specified, the default is 'Delete'.
27342743
"""
27352744

27362745
helps['aks machine update'] = """

src/aks-preview/azext_aks_preview/_params.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2438,6 +2438,21 @@ def load_arguments(self, _):
24382438
validator=validate_k8s_version,
24392439
help="Version of Kubernetes to use for the machine.",
24402440
)
2441+
c.argument(
2442+
"spot_max_price",
2443+
type=float,
2444+
validator=validate_spot_max_price,
2445+
help="The max price (in US Dollars) you are willing to pay for spot instances."
2446+
)
2447+
c.argument(
2448+
"enable_ultra_ssd",
2449+
action="store_true"
2450+
)
2451+
c.argument(
2452+
"eviction_policy",
2453+
arg_type=get_enum_type(node_eviction_policies),
2454+
validator=validate_eviction_policy,
2455+
)
24412456

24422457
with self.argument_context("aks machine update") as c:
24432458
c.argument(

src/aks-preview/azext_aks_preview/custom.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import time
1616
import webbrowser
1717
import subprocess
18+
from math import isnan
1819

1920
from azext_aks_preview._client_factory import (
2021
CUSTOM_MGMT_AKS_PREVIEW,
@@ -2761,6 +2762,9 @@ def aks_machine_add(
27612762
vm_size=None,
27622763
kubernetes_version=None,
27632764
no_wait=False,
2765+
spot_max_price=float("nan"),
2766+
enable_ultra_ssd=False,
2767+
eviction_policy=None,
27642768
):
27652769
existedMachine = None
27662770
try:
@@ -2773,6 +2777,9 @@ def aks_machine_add(
27732777
f"Machine '{machine_name}' already exists. Please use 'az aks machine update' to update it."
27742778
)
27752779

2780+
if isnan(spot_max_price):
2781+
spot_max_price = -1
2782+
27762783
# DO NOT MOVE: get all the original parameters and save them as a dictionary
27772784
raw_parameters = locals()
27782785
return add_machine(cmd, client, raw_parameters, no_wait)

src/aks-preview/azext_aks_preview/machine.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,18 @@ def constructMachine(cmd, raw_parameters, machine_name):
8484
)
8585
tags = raw_parameters.get("tags")
8686
priority = raw_parameters.get("priority")
87+
eviction_policy = raw_parameters.get("eviction_policy")
8788
machineProperties = MachineProperties(
8889
tags=tags,
8990
priority=priority,
91+
eviction_policy=eviction_policy,
9092
network=set_machine_network(cmd, raw_parameters),
9193
hardware=set_machine_hardware_profile(cmd, raw_parameters),
9294
kubernetes=set_machine_kubernetes_profile(cmd, raw_parameters),
93-
operating_system=set_machine_os_profile(cmd, raw_parameters)
95+
operating_system=set_machine_os_profile(cmd, raw_parameters),
96+
billing=set_machine_billing_profile(cmd, raw_parameters)
9497
)
98+
9599
Machine = cmd.get_models(
96100
"Machine",
97101
resource_type=CUSTOM_MGMT_AKS_PREVIEW,
@@ -106,6 +110,7 @@ def constructMachine(cmd, raw_parameters, machine_name):
106110

107111

108112
def set_machine_hardware_profile(cmd, raw_parameters):
113+
enable_ultra_ssd = raw_parameters.get("enable_ultra_ssd")
109114
vm_size = raw_parameters.get("vm_size")
110115
if vm_size is None:
111116
raise RequiredArgumentMissingError(
@@ -117,7 +122,8 @@ def set_machine_hardware_profile(cmd, raw_parameters):
117122
operation_group="machines"
118123
)
119124
machine_hardware_profile = MachineHardwareProfile(
120-
vm_size=vm_size
125+
vm_size=vm_size,
126+
ultra_ssd_enabled=enable_ultra_ssd
121127
)
122128
return machine_hardware_profile
123129

@@ -196,3 +202,16 @@ def set_machine_os_profile(cmd, raw_parameters):
196202
enable_fips=enable_fips
197203
)
198204
return machineOSProfile
205+
206+
207+
def set_machine_billing_profile(cmd, raw_parameters):
208+
spot_max_price = raw_parameters.get("spot_max_price")
209+
MachineBillingProfile = cmd.get_models(
210+
"MachineBillingProfile",
211+
resource_type=CUSTOM_MGMT_AKS_PREVIEW,
212+
operation_group="machines"
213+
)
214+
machineBillingProfile = MachineBillingProfile(
215+
spot_max_price=spot_max_price
216+
)
217+
return machineBillingProfile

0 commit comments

Comments
 (0)