Skip to content

Commit c2be9d2

Browse files
Merge branch 'dev' of https://github.com/Azure/azure-cli into 34595145-infra-upgrade-pools-to-ubuntu2404
2 parents c4e3584 + 6915429 commit c2be9d2

File tree

10 files changed

+1804
-537
lines changed

10 files changed

+1804
-537
lines changed

src/azure-cli/azure/cli/command_modules/resource/_utils.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,7 @@ def _build_preflight_error_message(preflight_error):
8787

8888

8989
def _build_http_response_error_message(http_error):
90-
from azure.core.exceptions import StreamClosedError, StreamConsumedError
91-
try:
92-
error_txt = http_error.response.internal_response.text
93-
error_info = json.loads(error_txt)['error']
94-
except (StreamClosedError, StreamConsumedError):
95-
error_info = http_error.response.json()['error']
90+
error_info = http_error.response.json()['error']
9691
error_details = error_info.pop('details') if 'details' in error_info else []
9792
err_messages = [f'{json.dumps(error_info)}']
9893

src/azure-cli/azure/cli/command_modules/storage/_params.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,8 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
794794
c.argument('properties', or_policy_type, validator=validate_or_policy)
795795
c.argument('prefix_match', prefix_math_type)
796796
c.argument('min_creation_time', min_creation_time_type)
797+
c.argument('enable_metrics', arg_type=get_three_state_flag(),
798+
help='Indicates whether object replication metrics feature is enabled for the policy.')
797799

798800
for item in ['create', 'update']:
799801
with self.argument_context('storage account or-policy {}'.format(item),

src/azure-cli/azure/cli/command_modules/storage/commands.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.MGM
213213
operations_tmpl='azure.cli.command_modules.storage.operations.account#{}',
214214
client_factory=cf_or_policy)
215215

216-
with self.command_group('storage account or-policy', or_policy_sdk, is_preview=True,
216+
with self.command_group('storage account or-policy', or_policy_sdk,
217217
resource_type=ResourceType.MGMT_STORAGE,
218218
custom_command_type=or_policy_custom_type) as g:
219219
g.show_command('show', 'get')
@@ -222,7 +222,7 @@ def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.MGM
222222
g.generic_update_command('update', setter_name='update_or_policy', setter_type=or_policy_custom_type)
223223
g.command('delete', 'delete')
224224

225-
with self.command_group('storage account or-policy rule', or_policy_sdk, is_preview=True,
225+
with self.command_group('storage account or-policy rule', or_policy_sdk,
226226
resource_type=ResourceType.MGMT_STORAGE,
227227
custom_command_type=or_policy_custom_type) as g:
228228
g.custom_show_command('show', 'get_or_rule')

src/azure-cli/azure/cli/command_modules/storage/operations/account.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -988,14 +988,15 @@ def list_encryption_scope(client, resource_group_name, account_name,
988988
# pylint: disable=no-member
989989
def create_or_policy(cmd, client, account_name, resource_group_name=None, properties=None, source_account=None,
990990
destination_account=None, policy_id="default", rule_id=None, source_container=None,
991-
destination_container=None, min_creation_time=None, prefix_match=None):
991+
destination_container=None, min_creation_time=None, prefix_match=None, enable_metrics=None):
992992
from azure.core.exceptions import HttpResponseError
993993
ObjectReplicationPolicy = cmd.get_models('ObjectReplicationPolicy')
994994

995995
if properties is None:
996996
rules = []
997-
ObjectReplicationPolicyRule, ObjectReplicationPolicyFilter = \
998-
cmd.get_models('ObjectReplicationPolicyRule', 'ObjectReplicationPolicyFilter')
997+
ObjectReplicationPolicyRule, ObjectReplicationPolicyFilter, ObjectReplicationPolicyPropertiesMetrics = \
998+
cmd.get_models('ObjectReplicationPolicyRule', 'ObjectReplicationPolicyFilter',
999+
'ObjectReplicationPolicyPropertiesMetrics')
9991000
if source_container and destination_container:
10001001
rule = ObjectReplicationPolicyRule(
10011002
rule_id=rule_id,
@@ -1006,7 +1007,8 @@ def create_or_policy(cmd, client, account_name, resource_group_name=None, proper
10061007
rules.append(rule)
10071008
or_policy = ObjectReplicationPolicy(source_account=source_account,
10081009
destination_account=destination_account,
1009-
rules=rules)
1010+
rules=rules,
1011+
metrics=ObjectReplicationPolicyPropertiesMetrics(enabled=enable_metrics))
10101012
else:
10111013
or_policy = properties
10121014
try:
@@ -1021,8 +1023,8 @@ def create_or_policy(cmd, client, account_name, resource_group_name=None, proper
10211023
raise ex
10221024

10231025

1024-
def update_or_policy(client, parameters, resource_group_name, account_name, object_replication_policy_id=None,
1025-
properties=None, source_account=None, destination_account=None, ):
1026+
def update_or_policy(cmd, client, parameters, resource_group_name, account_name, object_replication_policy_id=None,
1027+
properties=None, source_account=None, destination_account=None, enable_metrics=None):
10261028

10271029
if source_account is not None:
10281030
parameters.source_account = source_account
@@ -1034,6 +1036,10 @@ def update_or_policy(client, parameters, resource_group_name, account_name, obje
10341036
if "policyId" in properties.keys() and properties["policyId"]:
10351037
object_replication_policy_id = properties["policyId"]
10361038

1039+
if enable_metrics is not None:
1040+
ObjectReplicationPolicyPropertiesMetrics = cmd.get_models('ObjectReplicationPolicyPropertiesMetrics')
1041+
parameters.metrics = ObjectReplicationPolicyPropertiesMetrics(enabled=enable_metrics)
1042+
10371043
return client.create_or_update(resource_group_name=resource_group_name, account_name=account_name,
10381044
object_replication_policy_id=object_replication_policy_id, properties=parameters)
10391045

src/azure-cli/azure/cli/command_modules/storage/tests/latest/recordings/test_storage_account_or_policy.yaml

Lines changed: 396 additions & 297 deletions
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/storage/tests/latest/test_storage_account_scenarios.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2417,16 +2417,20 @@ def test_storage_account_or_policy(self, resource_group, source_account, destina
24172417

24182418
# Create ORS policy on destination account
24192419
result = self.cmd('storage account or-policy create -n {dest_sc} -s {src_sc} --dcont {dcont} '
2420-
'--scont {scont} -t "2020-02-19T16:05:00Z"').get_output_in_json()
2420+
'--scont {scont} -t "2020-02-19T16:05:00Z" --enable-metrics True').get_output_in_json()
24212421
self.assertIn('policyId', result)
24222422
self.assertIn('ruleId', result['rules'][0])
24232423
self.assertEqual(result["rules"][0]["filters"]["minCreationTime"], "2020-02-19T16:05:00Z")
2424+
self.assertEqual(result["metrics"]["enabled"], True)
24242425

24252426
self.kwargs.update({
24262427
'policy_id': result["policyId"],
24272428
'rule_id': result["rules"][0]["ruleId"]
24282429
})
24292430

2431+
self.cmd('storage account or-policy update -g {rg} -n {dest_sc} -s {src_sc} --policy-id {policy_id} '
2432+
'--enable-metrics False', checks=[JMESPathCheck('metrics.enabled', False)])
2433+
24302434
# Get policy properties from destination account
24312435
self.cmd('storage account or-policy show -g {rg} -n {dest_sc} --policy-id {policy_id}') \
24322436
.assert_with_checks(JMESPathCheck('type', "Microsoft.Storage/storageAccounts/objectReplicationPolicies")) \

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)