@@ -2161,27 +2161,33 @@ def process_image_create_namespace(cmd, namespace):
21612161 'virtualMachines' , 'Microsoft.Compute' )
21622162 res = parse_resource_id (res_id )
21632163 if res ['type' ] == 'virtualMachines' :
2164- compute_client = _compute_client_factory (cmd .cli_ctx , subscription_id = res ['subscription' ])
2165- vm_info = compute_client .virtual_machines .get (res ['resource_group' ], res ['name' ])
2164+ from .operations .vm import VMShow
2165+ command_args = {
2166+ 'subscription' : res ['subscription' ],
2167+ 'resource_group' : res ['resource_group' ],
2168+ 'vm_name' : res ['name' ]
2169+ }
2170+ vm_info = VMShow (cli_ctx = cmd .cli_ctx )(command_args = command_args )
21662171 source_from_vm = True
21672172 except ResourceNotFoundError :
21682173 pass
21692174
21702175 if source_from_vm :
21712176 # pylint: disable=no-member
2172- namespace .os_type = vm_info .storage_profile . os_disk . os_type
2177+ namespace .os_type = vm_info .get ( 'storageProfile' , {}). get ( 'osDisk' , {}). get ( 'osType' , '' )
21732178 namespace .source_virtual_machine = res_id
21742179 if namespace .data_disk_sources :
21752180 raise CLIError ("'--data-disk-sources' is not allowed when capturing "
21762181 "images from virtual machines" )
21772182 else :
2178- namespace .os_blob_uri , namespace .os_disk , namespace .os_snapshot , _ , _ = _figure_out_storage_source (cmd .cli_ctx , namespace .resource_group_name , namespace .source ) # pylint: disable=line-too-long
2183+ namespace .os_blob_uri , namespace .os_disk , namespace .os_snapshot , _ , _ = \
2184+ _figure_out_storage_source_by_aaz (cmd .cli_ctx , namespace .resource_group_name , namespace .source )
21792185 namespace .data_blob_uris = []
21802186 namespace .data_disks = []
21812187 namespace .data_snapshots = []
21822188 if namespace .data_disk_sources :
21832189 for data_disk_source in namespace .data_disk_sources :
2184- source_blob_uri , source_disk , source_snapshot , _ , _ = _figure_out_storage_source (
2190+ source_blob_uri , source_disk , source_snapshot , _ , _ = _figure_out_storage_source_by_aaz (
21852191 cmd .cli_ctx , namespace .resource_group_name , data_disk_source )
21862192 if source_blob_uri :
21872193 namespace .data_blob_uris .append (source_blob_uri )
@@ -2218,6 +2224,30 @@ def _figure_out_storage_source(cli_ctx, resource_group_name, source):
22182224 return (source_blob_uri , source_disk , source_snapshot , source_restore_point , source_info )
22192225
22202226
2227+ def _figure_out_storage_source_by_aaz (cli_ctx , resource_group_name , source ):
2228+ source_blob_uri = None
2229+ source_disk = None
2230+ source_snapshot = None
2231+ source_info = None
2232+ source_restore_point = None
2233+ if urlparse (source ).scheme : # a uri?
2234+ source_blob_uri = source
2235+ elif '/disks/' in source .lower ():
2236+ source_disk = source
2237+ elif '/snapshots/' in source .lower ():
2238+ source_snapshot = source
2239+ elif '/restorepoints/' in source .lower ():
2240+ source_restore_point = source
2241+ else :
2242+ source_info , is_snapshot = _get_disk_or_snapshot_info_by_aaz (cli_ctx , resource_group_name , source )
2243+ if is_snapshot :
2244+ source_snapshot = source_info .get ('id' )
2245+ else :
2246+ source_disk = source_info .get ('id' )
2247+
2248+ return (source_blob_uri , source_disk , source_snapshot , source_restore_point , source_info )
2249+
2250+
22212251def _get_disk_or_snapshot_info (cli_ctx , resource_group_name , source ):
22222252 compute_client = _compute_client_factory (cli_ctx )
22232253 is_snapshot = True
@@ -2231,6 +2261,28 @@ def _get_disk_or_snapshot_info(cli_ctx, resource_group_name, source):
22312261 return info , is_snapshot
22322262
22332263
2264+ def _get_disk_or_snapshot_info_by_aaz (cli_ctx , resource_group_name , source ):
2265+ from .aaz .latest .snapshot import Show as SnapshotShow
2266+ from .aaz .latest .disk import Show as DiskShow
2267+ is_snapshot = True
2268+
2269+ try :
2270+ command_args = {
2271+ 'resource_group' : resource_group_name ,
2272+ 'snapshot_name' : source
2273+ }
2274+ info = SnapshotShow (cli_ctx = cli_ctx )(command_args = command_args )
2275+ except ResourceNotFoundError :
2276+ command_args = {
2277+ 'resource_group' : resource_group_name ,
2278+ 'disk_name' : source
2279+ }
2280+ is_snapshot = False
2281+ info = DiskShow (cli_ctx = cli_ctx )(command_args = command_args )
2282+
2283+ return info , is_snapshot
2284+
2285+
22342286def process_disk_encryption_namespace (cmd , namespace ):
22352287 namespace .disk_encryption_keyvault = _get_resource_id (cmd .cli_ctx , namespace .disk_encryption_keyvault ,
22362288 namespace .resource_group_name ,
0 commit comments