@@ -131,6 +131,24 @@ def _get_access_extension_upgrade_info(extensions, name):
131131 return publisher , version , auto_upgrade
132132
133133
134+ # separated for aaz based implementation
135+ def _get_access_extension_upgrade_info_aaz (extensions , name ):
136+ version = extension_mappings [name ]['version' ]
137+ publisher = extension_mappings [name ]['publisher' ]
138+
139+ auto_upgrade = None
140+
141+ if extensions :
142+ extension = next ((e for e in extensions if e .get ('name' , '' ) == name ), None )
143+ from packaging .version import parse # pylint: disable=no-name-in-module,import-error
144+ if extension and parse (extension ['typeHandlerVersion' ]) < parse (version ):
145+ auto_upgrade = True
146+ elif extension and parse (extension ['typeHandlerVersion' ]) > parse (version ):
147+ version = extension ['typeHandlerVersion' ]
148+
149+ return publisher , version , auto_upgrade
150+
151+
134152def _get_extension_instance_name (instance_view , publisher , extension_type_name ,
135153 suggested_name = None ):
136154 extension_instance_name = suggested_name or extension_type_name
@@ -3158,28 +3176,31 @@ def list_unmanaged_disks(cmd, resource_group_name, vm_name):
31583176# region VirtualMachines Users
31593177def _update_linux_access_extension (cmd , vm_instance , resource_group_name , protected_settings ,
31603178 no_wait = False ):
3161- client = _compute_client_factory (cmd .cli_ctx )
3162-
3163- VirtualMachineExtension = cmd .get_models ('VirtualMachineExtension' )
3179+ from .operations .vm_extension import VMExtensionCreate
31643180
31653181 # pylint: disable=no-member
3166- instance_name = _get_extension_instance_name (vm_instance .instance_view ,
3167- extension_mappings [_LINUX_ACCESS_EXT ]['publisher' ],
3168- _LINUX_ACCESS_EXT ,
3169- _ACCESS_EXT_HANDLER_NAME )
3182+ instance_name = _get_extension_instance_name_aaz (vm_instance .get ( 'instanceView' , {}) ,
3183+ extension_mappings [_LINUX_ACCESS_EXT ]['publisher' ],
3184+ _LINUX_ACCESS_EXT ,
3185+ _ACCESS_EXT_HANDLER_NAME )
31703186
3171- publisher , version , auto_upgrade = _get_access_extension_upgrade_info (
3172- vm_instance .resources , _LINUX_ACCESS_EXT )
3187+ publisher , version , auto_upgrade = _get_access_extension_upgrade_info_aaz (
3188+ vm_instance .get ( ' resources' , []) , _LINUX_ACCESS_EXT )
31733189
3174- ext = VirtualMachineExtension (location = vm_instance .location , # pylint: disable=no-member
3175- publisher = publisher ,
3176- type_properties_type = _LINUX_ACCESS_EXT ,
3177- protected_settings = protected_settings ,
3178- type_handler_version = version ,
3179- settings = {},
3180- auto_upgrade_minor_version = auto_upgrade )
3181- return sdk_no_wait (no_wait , client .virtual_machine_extensions .begin_create_or_update ,
3182- resource_group_name , vm_instance .name , instance_name , ext )
3190+ poller = VMExtensionCreate (cli_ctx = cmd .cli_ctx )(command_args = {
3191+ 'resource_group' : resource_group_name ,
3192+ 'vm_name' : vm_instance ['name' ],
3193+ 'vm_extension_name' : instance_name ,
3194+ 'location' : vm_instance ['location' ],
3195+ 'publisher' : publisher ,
3196+ 'type' : _LINUX_ACCESS_EXT ,
3197+ 'type_handler_version' : version ,
3198+ 'settings' : {},
3199+ 'protected_settings' : protected_settings ,
3200+ 'auto_upgrade_minor_version' : auto_upgrade ,
3201+ 'no_wait' : no_wait
3202+ })
3203+ return poller
31833204
31843205
31853206def _set_linux_user (cmd , vm_instance , resource_group_name , username ,
@@ -3197,69 +3218,90 @@ def _set_linux_user(cmd, vm_instance, resource_group_name, username,
31973218 if no_wait :
31983219 return _update_linux_access_extension (cmd , vm_instance , resource_group_name ,
31993220 protected_settings , no_wait )
3221+
32003222 poller = _update_linux_access_extension (cmd , vm_instance , resource_group_name ,
32013223 protected_settings )
32023224 return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'setting user' , 'done' )(poller )
32033225
32043226
32053227def _reset_windows_admin (cmd , vm_instance , resource_group_name , username , password , no_wait = False ):
32063228 '''Update the password. You can only change the password. Adding a new user is not supported. '''
3207- client = _compute_client_factory (cmd .cli_ctx )
3208- VirtualMachineExtension = cmd .get_models ('VirtualMachineExtension' )
3229+ from .operations .vm_extension import VMExtensionCreate
32093230
3210- publisher , version , auto_upgrade = _get_access_extension_upgrade_info (
3211- vm_instance .resources , _WINDOWS_ACCESS_EXT )
3231+ publisher , version , auto_upgrade = _get_access_extension_upgrade_info_aaz (
3232+ vm_instance .get ( ' resources' , []) , _WINDOWS_ACCESS_EXT )
32123233 # pylint: disable=no-member
3213- instance_name = _get_extension_instance_name (vm_instance .instance_view ,
3214- publisher ,
3215- _WINDOWS_ACCESS_EXT ,
3216- _ACCESS_EXT_HANDLER_NAME )
3217-
3218- ext = VirtualMachineExtension (location = vm_instance .location , # pylint: disable=no-member
3219- publisher = publisher ,
3220- type_properties_type = _WINDOWS_ACCESS_EXT ,
3221- protected_settings = {'Password' : password },
3222- type_handler_version = version ,
3223- settings = {'UserName' : username },
3224- auto_upgrade_minor_version = auto_upgrade )
3234+ instance_name = _get_extension_instance_name_aaz (vm_instance .get ('instanceView' , {}),
3235+ publisher ,
3236+ _WINDOWS_ACCESS_EXT ,
3237+ _ACCESS_EXT_HANDLER_NAME )
3238+
3239+ poller = VMExtensionCreate (cli_ctx = cmd .cli_ctx )(command_args = {
3240+ 'location' : vm_instance ['location' ],
3241+ 'resource_group' : resource_group_name ,
3242+ 'vm_name' : vm_instance ['name' ],
3243+ 'vm_extension_name' : instance_name ,
3244+ 'publisher' : publisher ,
3245+ 'type' : _WINDOWS_ACCESS_EXT ,
3246+ 'type_handler_version' : version ,
3247+ 'auto_upgrade_minor_version' : auto_upgrade ,
3248+ 'settings' : {'UserName' : username },
3249+ 'protected_settings' : {'Password' : password },
3250+ 'no_wait' : no_wait
3251+ })
32253252
32263253 if no_wait :
3227- return sdk_no_wait (no_wait , client .virtual_machine_extensions .create_or_update ,
3228- resource_group_name , vm_instance .name , instance_name , ext )
3229- poller = client .virtual_machine_extensions .begin_create_or_update (
3230- resource_group_name , vm_instance .name , instance_name , ext )
3254+ return poller
3255+
32313256 return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'resetting admin' , 'done' )(poller )
32323257
32333258
32343259def set_user (cmd , resource_group_name , vm_name , username , password = None , ssh_key_value = None ,
32353260 no_wait = False ):
3236- vm = get_vm (cmd , resource_group_name , vm_name , 'instanceView' )
3237- if _is_linux_os (vm ):
3261+ from .operations .vm import VMShow
3262+ vm = VMShow (cli_ctx = cmd .cli_ctx )(command_args = {
3263+ 'resource_group' : resource_group_name ,
3264+ 'vm_name' : vm_name ,
3265+ 'expand' : 'instanceView'
3266+ })
3267+ if _is_linux_os_aaz (vm ):
32383268 return _set_linux_user (cmd , vm , resource_group_name , username , password , ssh_key_value , no_wait )
32393269 if ssh_key_value :
32403270 raise CLIError ('SSH key is not appliable on a Windows VM' )
32413271 return _reset_windows_admin (cmd , vm , resource_group_name , username , password , no_wait )
32423272
32433273
32443274def delete_user (cmd , resource_group_name , vm_name , username , no_wait = False ):
3245- vm = get_vm (cmd , resource_group_name , vm_name , 'instanceView' )
3246- if not _is_linux_os (vm ):
3275+ from .operations .vm import VMShow
3276+ vm = VMShow (cli_ctx = cmd .cli_ctx )(command_args = {
3277+ 'resource_group' : resource_group_name ,
3278+ 'vm_name' : vm_name ,
3279+ 'expand' : 'instanceView'
3280+ })
3281+ if not _is_linux_os_aaz (vm ):
32473282 raise CLIError ('Deleting a user is not supported on Windows VM' )
32483283 if no_wait :
32493284 return _update_linux_access_extension (cmd , vm , resource_group_name ,
32503285 {'remove_user' : username }, no_wait )
3286+
32513287 poller = _update_linux_access_extension (cmd , vm , resource_group_name ,
32523288 {'remove_user' : username })
32533289 return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'deleting user' , 'done' )(poller )
32543290
32553291
32563292def reset_linux_ssh (cmd , resource_group_name , vm_name , no_wait = False ):
3257- vm = get_vm (cmd , resource_group_name , vm_name , 'instanceView' )
3258- if not _is_linux_os (vm ):
3293+ from .operations .vm import VMShow
3294+ vm = VMShow (cli_ctx = cmd .cli_ctx )(command_args = {
3295+ 'resource_group' : resource_group_name ,
3296+ 'vm_name' : vm_name ,
3297+ 'expand' : 'instanceView'
3298+ })
3299+ if not _is_linux_os_aaz (vm ):
32593300 raise CLIError ('Resetting SSH is not supported in Windows VM' )
32603301 if no_wait :
32613302 return _update_linux_access_extension (cmd , vm , resource_group_name ,
32623303 {'reset_ssh' : True }, no_wait )
3304+
32633305 poller = _update_linux_access_extension (cmd , vm , resource_group_name ,
32643306 {'reset_ssh' : True })
32653307 return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'resetting SSH' , 'done' )(poller )
0 commit comments