Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/azure-cli/azure/cli/command_modules/vm/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -948,6 +948,9 @@ def load_arguments(self, _):
help='Space-separated list of customer managed keys for encrypting the OS and data disks in the gallery artifact for each region. Format for each region: `<os_des>,<lun1>,<lun1_des>,<lun2>,<lun2_des>`. Use "null" as a placeholder.')
c.argument('os_vhd_uri', help='Source VHD URI of OS disk')
c.argument('os_vhd_storage_account', help='Name or ID of storage account of source VHD URI of OS disk')
c.argument('data_vhds_uris', nargs='+', help='Source VHD URIs (space-delimited) of data disks')
c.argument('data_vhds_luns', nargs='+', help='Logical unit numbers (space-delimited) of source VHD URIs of data disks')
c.argument('data_vhds_storage_accounts', nargs='+', help='Names or IDs (space-delimited) of storage accounts of source VHD URIs of data disks')

with self.argument_context('sig image-version show') as c:
c.argument('expand', help="The expand expression to apply on the operation, e.g. 'ReplicationStatus'")
Expand Down
35 changes: 33 additions & 2 deletions src/azure-cli/azure/cli/command_modules/vm/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -3396,7 +3396,8 @@ def create_image_version(cmd, resource_group_name, gallery_name, gallery_image_n
location=None, target_regions=None, storage_account_type=None,
end_of_life_date=None, exclude_from_latest=None, replica_count=None, tags=None,
os_snapshot=None, data_snapshots=None, managed_image=None, data_snapshot_luns=None,
target_region_encryption=None, os_vhd_uri=None, os_vhd_storage_account=None):
target_region_encryption=None, os_vhd_uri=None, os_vhd_storage_account=None,
data_vhds_uris=None, data_vhds_luns=None, data_vhds_storage_accounts=None):
# print(target_regions)
from msrestazure.tools import resource_id, is_valid_resource_id
from azure.cli.core.commands.client_factory import get_subscription_id
Expand Down Expand Up @@ -3451,8 +3452,9 @@ def create_image_version(cmd, resource_group_name, gallery_name, gallery_image_n
lun=data_snapshot_luns[i]))
# from vhd, only support os image now
if cmd.supported_api_version(min_api='2020-09-30', operation_group='gallery_image_versions'):
# OS disk
if os_vhd_uri and os_vhd_storage_account is None or os_vhd_uri is None and os_vhd_storage_account:
raise ValidationError('--vhd and --vhd-storage-account should be used together.')
raise ValidationError('--os-vhd-uri and --os-vhd-storage-account should be used together.')
if os_vhd_uri and os_vhd_storage_account:
if not is_valid_resource_id(os_vhd_storage_account):
os_vhd_storage_account = resource_id(
Expand All @@ -3461,6 +3463,35 @@ def create_image_version(cmd, resource_group_name, gallery_name, gallery_image_n
os_disk_image = GalleryOSDiskImage(source=GalleryArtifactVersionSource(
id=os_vhd_storage_account, uri=os_vhd_uri))

# Data disks
if data_vhds_uris and data_vhds_storage_accounts is None or \
data_vhds_uris is None and data_vhds_storage_accounts:
raise ValidationError('--data-vhds-uris and --data-vhds-storage-accounts should be used together.')
if data_vhds_luns and data_vhds_uris is None:
raise ValidationError('--data-vhds-luns must be used together with --data-vhds-uris')
if data_vhds_uris:
# Generate LUNs
if data_vhds_luns is None:
# 0, 1, 2, ...
data_vhds_luns = [i for i in range(len(data_vhds_uris))]
# Check length
len_data_vhds_uris = len(data_vhds_uris)
len_data_vhds_luns = len(data_vhds_luns)
len_data_vhds_storage_accounts = len(data_vhds_storage_accounts)
if len_data_vhds_uris != len_data_vhds_luns or len_data_vhds_uris != len_data_vhds_storage_accounts:
raise ValidationError('Length of --data-vhds-uris, --data-vhds-luns, --data-vhds-storage-accounts '
'must be same.')
# Generate full storage account ID
for i, storage_account in enumerate(data_vhds_storage_accounts):
if not is_valid_resource_id(storage_account):
data_vhds_storage_accounts[i] = resource_id(
subscription=get_subscription_id(cmd.cli_ctx), resource_group=resource_group_name,
namespace='Microsoft.Storage', type='storageAccounts', name=storage_account)
data_disk_images = []
for uri, lun, account in zip(data_vhds_uris, data_vhds_luns, data_vhds_storage_accounts):
data_disk_images.append(GalleryDataDiskImage(
source=GalleryArtifactVersionSource(id=account, uri=uri), lun=lun))

storage_profile = GalleryImageVersionStorageProfile(source=source, os_disk_image=os_disk_image,
data_disk_images=data_disk_images)
image_version = ImageVersion(publishing_profile=profile, location=location, tags=(tags or {}),
Expand Down