Skip to content

Commit 1d65ac3

Browse files
authored
{Compute} az vm list-skus: Fix filtering available skus (#32066)
1 parent 3d94131 commit 1d65ac3

File tree

4 files changed

+1386
-225
lines changed

4 files changed

+1386
-225
lines changed

src/azure-cli/azure/cli/command_modules/vm/_vm_utils.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def _match_location(loc, locations):
133133

134134

135135
# pylint: disable=line-too-long
136-
def is_sku_available(cmd, sku_info, zone):
136+
def is_sku_available(sku_info, zone):
137137
"""
138138
The SKU is unavailable in the following cases:
139139
1. regional restriction and the region is restricted
@@ -146,16 +146,12 @@ def is_sku_available(cmd, sku_info, zone):
146146
if not sku_info.get('restrictions', []):
147147
return is_available
148148
for restriction in sku_info['restrictions']:
149-
if restriction.get('reason_code', '') == 'NotAvailableForSubscription':
150-
# The attribute location_info is not supported in versions 2017-03-30 and earlier
151-
if cmd.supported_api_version(max_api='2017-03-30'):
152-
is_available = False
153-
break
149+
if restriction.get('reasonCode', '') == 'NotAvailableForSubscription':
154150
if restriction['type'] == 'Zone' and not (
155-
set(sku_info['location_info'][0].get('zones', []) or []) - set(restriction['restriction_info'].get('zones', []) or [])):
151+
set(sku_info['locationInfo'][0].get('zones', []) or []) - set(restriction['restrictionInfo'].get('zones', []) or [])):
156152
is_restrict_zone = True
157153
if restriction['type'] == 'Location' and (
158-
sku_info['location_info'][0]['location'] in (restriction['restriction_info'].get('locations', []) or [])):
154+
sku_info['locationInfo'][0]['location'] in (restriction['restrictionInfo'].get('locations', []) or [])):
159155
is_restrict_location = True
160156

161157
if is_restrict_location or (is_restrict_zone and zone):

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1349,7 +1349,7 @@ def list_skus(cmd, location=None, size=None, zone=None, show_all=None, resource_
13491349
if not show_all:
13501350
available_skus = []
13511351
for sku_info in result:
1352-
if is_sku_available(cmd, sku_info, zone):
1352+
if is_sku_available(sku_info, zone):
13531353
available_skus.append(sku_info)
13541354
result = available_skus
13551355
if resource_type:

src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_list_compute_skus_table_output.yaml

Lines changed: 1369 additions & 204 deletions
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/vm/tests/latest/test_vm_commands.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2299,47 +2299,47 @@ def test_list_compute_skus_partially_unavailable(self, client_factory_mock):
22992299
restriction_info_zone = mock.MagicMock()
23002300
restriction_info_zone.zones = [1, 2, 3]
23012301
restriction_zone = mock.MagicMock()
2302-
restriction_zone.reason_code = 'NotAvailableForSubscription'
2302+
restriction_zone.reasonCode = 'NotAvailableForSubscription'
23032303
restriction_zone.type = 'Zone'
2304-
restriction_zone.restriction_info = restriction_info_zone
2304+
restriction_zone.restrictionInfo = restriction_info_zone
23052305
restriction_info_location = mock.MagicMock()
23062306
restriction_info_location.locations = ['location']
23072307
restriction_location = mock.MagicMock()
2308-
restriction_location.reason_code = 'NotAvailableForSubscription'
2308+
restriction_location.reasonCode = 'NotAvailableForSubscription'
23092309
restriction_location.type = 'Location'
2310-
restriction_location.restriction_info = restriction_info_location
2310+
restriction_location.restrictionInfo = restriction_info_location
23112311

23122312
# zonal restriction but not regional restriction
23132313
restrictions = [restriction_zone]
23142314
np.restrictions = restrictions
23152315
# show skus supporting availability zones
2316-
is_available = is_sku_available(cmd, np, True)
2316+
is_available = is_sku_available(np, True)
23172317
self.assertFalse(is_available)
23182318
# not show skus supporting availability zones
2319-
is_available = is_sku_available(cmd, np, None)
2319+
is_available = is_sku_available(np, None)
23202320
self.assertTrue(is_available)
23212321

23222322
# not all zones are restricted
23232323
restriction_info_zone.zones = [1, 2]
2324-
is_available = is_sku_available(cmd, np, True)
2324+
is_available = is_sku_available(np, True)
23252325
self.assertTrue(is_available)
2326-
is_available = is_sku_available(cmd, np, None)
2326+
is_available = is_sku_available(np, None)
23272327
self.assertTrue(is_available)
23282328

23292329
# regional restriction but not zonal restriction
23302330
restrictions = [restriction_location]
23312331
np.restrictions = restrictions
2332-
is_available = is_sku_available(cmd, np, True)
2332+
is_available = is_sku_available(np, True)
23332333
self.assertFalse(is_available)
2334-
is_available = is_sku_available(cmd, np, None)
2334+
is_available = is_sku_available(np, None)
23352335
self.assertFalse(is_available)
23362336

23372337
# regional restriction and zonal restriction
23382338
restrictions = [restriction_location, restriction_zone]
23392339
np.restrictions = restrictions
2340-
is_available = is_sku_available(cmd, np, True)
2340+
is_available = is_sku_available(np, True)
23412341
self.assertFalse(is_available)
2342-
is_available = is_sku_available(cmd, np, None)
2342+
is_available = is_sku_available(np, None)
23432343
self.assertFalse(is_available)
23442344

23452345

0 commit comments

Comments
 (0)