Skip to content

Commit b14f284

Browse files
authored
[Storage] az storage account create/update: Add --zones and --zone-placement-policy to support setting zones and availability zone pinning policy (#32192)
1 parent 9dc22c6 commit b14f284

File tree

4 files changed

+1457
-3
lines changed

4 files changed

+1457
-3
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,9 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
322322
c.argument('account_name', acct_name_type, options_list=['--name', '-n'], local_context_attribute=None)
323323

324324
with self.argument_context('storage account create', resource_type=ResourceType.MGMT_STORAGE) as c:
325-
t_account_type, t_sku_name, t_kind, t_tls_version, t_dns_endpoint_type = \
325+
t_account_type, t_sku_name, t_kind, t_tls_version, t_dns_endpoint_type, t_zone_placement_policy = \
326326
self.get_models('AccountType', 'SkuName', 'Kind', 'MinimumTlsVersion', 'DnsEndpointType',
327+
'ZonePlacementPolicy',
327328
resource_type=ResourceType.MGMT_STORAGE)
328329
t_identity_type = self.get_models('IdentityType', resource_type=ResourceType.MGMT_STORAGE)
329330
c.register_common_storage_account_options()
@@ -436,6 +437,10 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
436437
arg_group='Azure Files Identity Based Authentication',
437438
help='Specifies if managed identities can access SMB shares using OAuth. '
438439
'The default interpretation is false for this property.')
440+
c.argument('zones', nargs='+',
441+
help='Describes the available zones for the product where storage account resource can be created.')
442+
c.argument('zone_placement_policy', arg_type=get_enum_type(t_zone_placement_policy),
443+
help='The availability zone pinning policy for the storage account.')
439444

440445
with self.argument_context('storage account private-endpoint-connection',
441446
resource_type=ResourceType.MGMT_STORAGE) as c:
@@ -530,6 +535,10 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
530535
c.argument('enable_smb_oauth', arg_type=get_three_state_flag(),
531536
arg_group='Azure Files Identity Based Authentication',
532537
help='Specifies if managed identities can access SMB shares using OAuth. ')
538+
c.argument('zones', nargs='+',
539+
help='Describes the available zones for the product where storage account resource can be created.')
540+
c.argument('zone_placement_policy', arg_type=get_enum_type(t_zone_placement_policy),
541+
help='The availability zone pinning policy for the storage account.')
533542

534543
for scope in ['storage account create', 'storage account update']:
535544
with self.argument_context(scope, arg_group='Customer managed key',

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def create_storage_account(cmd, resource_group_name, account_name, sku=None, loc
7878
enable_nfs_v3=None, subnet=None, vnet_name=None, action='Allow', enable_alw=None,
7979
immutability_period_since_creation_in_days=None, immutability_policy_state=None,
8080
allow_protected_append_writes=None, public_network_access=None, dns_endpoint_type=None,
81-
enable_smb_oauth=None):
81+
enable_smb_oauth=None, zones=None, zone_placement_policy=None):
8282
StorageAccountCreateParameters, Kind, Sku, CustomDomain, AccessTier, Identity, Encryption, NetworkRuleSet = \
8383
cmd.get_models('StorageAccountCreateParameters', 'Kind', 'Sku', 'CustomDomain', 'AccessTier', 'Identity',
8484
'Encryption', 'NetworkRuleSet')
@@ -313,6 +313,13 @@ def create_storage_account(cmd, resource_group_name, account_name, sku=None, loc
313313
if dns_endpoint_type is not None:
314314
params.dns_endpoint_type = dns_endpoint_type
315315

316+
if zones is not None:
317+
params.zones = zones
318+
319+
if zone_placement_policy is not None:
320+
Placement = cmd.get_models('Placement')
321+
params.placement = Placement(zone_placement_policy=zone_placement_policy)
322+
316323
return scf.storage_accounts.begin_create(resource_group_name, account_name, params)
317324

318325

@@ -407,7 +414,7 @@ def update_storage_account(cmd, instance, sku=None, tags=None, custom_domain=Non
407414
allow_cross_tenant_replication=None, default_share_permission=None,
408415
immutability_period_since_creation_in_days=None, immutability_policy_state=None,
409416
allow_protected_append_writes=None, public_network_access=None, upgrade_to_storagev2=None,
410-
yes=None, enable_smb_oauth=None):
417+
yes=None, enable_smb_oauth=None, zones=None, zone_placement_policy=None):
411418
StorageAccountUpdateParameters, Sku, CustomDomain, AccessTier, Identity, Encryption, NetworkRuleSet, Kind = \
412419
cmd.get_models('StorageAccountUpdateParameters', 'Sku', 'CustomDomain', 'AccessTier', 'Identity', 'Encryption',
413420
'NetworkRuleSet', 'Kind')
@@ -710,6 +717,13 @@ def update_storage_account(cmd, instance, sku=None, tags=None, custom_domain=Non
710717
if enable_local_user is not None:
711718
params.is_local_user_enabled = enable_local_user
712719

720+
if zones is not None:
721+
params.zones = zones
722+
723+
if zone_placement_policy is not None:
724+
Placement = cmd.get_models('Placement')
725+
params.placement = Placement(zone_placement_policy=zone_placement_policy)
726+
713727
return params
714728

715729

0 commit comments

Comments
 (0)