@@ -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
@@ -3110,28 +3128,31 @@ def list_unmanaged_disks(cmd, resource_group_name, vm_name):
31103128# region VirtualMachines Users
31113129def _update_linux_access_extension (cmd , vm_instance , resource_group_name , protected_settings ,
31123130 no_wait = False ):
3113- client = _compute_client_factory (cmd .cli_ctx )
3114-
3115- VirtualMachineExtension = cmd .get_models ('VirtualMachineExtension' )
3131+ from .operations .vm_extension import VMExtensionCreate
31163132
31173133 # pylint: disable=no-member
3118- instance_name = _get_extension_instance_name (vm_instance . instance_view ,
3119- extension_mappings [_LINUX_ACCESS_EXT ]['publisher' ],
3120- _LINUX_ACCESS_EXT ,
3121- _ACCESS_EXT_HANDLER_NAME )
3134+ instance_name = _get_extension_instance_name_aaz (vm_instance [ 'instanceView' ] ,
3135+ extension_mappings [_LINUX_ACCESS_EXT ]['publisher' ],
3136+ _LINUX_ACCESS_EXT ,
3137+ _ACCESS_EXT_HANDLER_NAME )
31223138
3123- publisher , version , auto_upgrade = _get_access_extension_upgrade_info (
3124- vm_instance .resources , _LINUX_ACCESS_EXT )
3139+ publisher , version , auto_upgrade = _get_access_extension_upgrade_info_aaz (
3140+ vm_instance .get ( ' resources' , []) , _LINUX_ACCESS_EXT )
31253141
3126- ext = VirtualMachineExtension (location = vm_instance .location , # pylint: disable=no-member
3127- publisher = publisher ,
3128- type_properties_type = _LINUX_ACCESS_EXT ,
3129- protected_settings = protected_settings ,
3130- type_handler_version = version ,
3131- settings = {},
3132- auto_upgrade_minor_version = auto_upgrade )
3133- return sdk_no_wait (no_wait , client .virtual_machine_extensions .begin_create_or_update ,
3134- resource_group_name , vm_instance .name , instance_name , ext )
3142+ poller = VMExtensionCreate (cli_ctx = cmd .cli_ctx )(command_args = {
3143+ 'resource_group' : resource_group_name ,
3144+ 'vm_name' : vm_instance ['name' ],
3145+ 'vm_extension_name' : instance_name ,
3146+ 'location' : vm_instance ['location' ],
3147+ 'publisher' : publisher ,
3148+ 'type' : _LINUX_ACCESS_EXT ,
3149+ 'type_handler_version' : version ,
3150+ 'settings' : {},
3151+ 'protected_settings' : protected_settings ,
3152+ 'auto_upgrade_minor_version' : auto_upgrade ,
3153+ 'no_wait' : no_wait
3154+ })
3155+ return poller
31353156
31363157
31373158def _set_linux_user (cmd , vm_instance , resource_group_name , username ,
@@ -3149,72 +3170,93 @@ def _set_linux_user(cmd, vm_instance, resource_group_name, username,
31493170 if no_wait :
31503171 return _update_linux_access_extension (cmd , vm_instance , resource_group_name ,
31513172 protected_settings , no_wait )
3173+
31523174 poller = _update_linux_access_extension (cmd , vm_instance , resource_group_name ,
31533175 protected_settings )
3154- return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'setting user' , 'done' )(poller )
3176+ return LongRunningOperation (cmd .cli_ctx , 'setting user' , 'done' )(poller )
31553177
31563178
31573179def _reset_windows_admin (cmd , vm_instance , resource_group_name , username , password , no_wait = False ):
31583180 '''Update the password. You can only change the password. Adding a new user is not supported. '''
3159- client = _compute_client_factory (cmd .cli_ctx )
3160- VirtualMachineExtension = cmd .get_models ('VirtualMachineExtension' )
3181+ from .operations .vm_extension import VMExtensionCreate
31613182
3162- publisher , version , auto_upgrade = _get_access_extension_upgrade_info (
3163- vm_instance .resources , _WINDOWS_ACCESS_EXT )
3183+ publisher , version , auto_upgrade = _get_access_extension_upgrade_info_aaz (
3184+ vm_instance .get ( ' resources' , []) , _WINDOWS_ACCESS_EXT )
31643185 # pylint: disable=no-member
3165- instance_name = _get_extension_instance_name (vm_instance .instance_view ,
3166- publisher ,
3167- _WINDOWS_ACCESS_EXT ,
3168- _ACCESS_EXT_HANDLER_NAME )
3169-
3170- ext = VirtualMachineExtension (location = vm_instance .location , # pylint: disable=no-member
3171- publisher = publisher ,
3172- type_properties_type = _WINDOWS_ACCESS_EXT ,
3173- protected_settings = {'Password' : password },
3174- type_handler_version = version ,
3175- settings = {'UserName' : username },
3176- auto_upgrade_minor_version = auto_upgrade )
3186+ instance_name = _get_extension_instance_name_aaz (vm_instance ['instanceView' ],
3187+ publisher ,
3188+ _WINDOWS_ACCESS_EXT ,
3189+ _ACCESS_EXT_HANDLER_NAME )
3190+
3191+ poller = VMExtensionCreate (cli_ctx = cmd .cli_ctx )(command_args = {
3192+ 'location' : vm_instance ['location' ],
3193+ 'resource_group' : resource_group_name ,
3194+ 'vm_name' : vm_instance ['name' ],
3195+ 'vm_extension_name' : instance_name ,
3196+ 'publisher' : publisher ,
3197+ 'type' : _WINDOWS_ACCESS_EXT ,
3198+ 'type_handler_version' : version ,
3199+ 'auto_upgrade_minor_version' : auto_upgrade ,
3200+ 'settings' : {'UserName' : username },
3201+ 'protected_settings' : {'Password' : password },
3202+ 'no_wait' : no_wait
3203+ })
31773204
31783205 if no_wait :
3179- return sdk_no_wait (no_wait , client .virtual_machine_extensions .create_or_update ,
3180- resource_group_name , vm_instance .name , instance_name , ext )
3181- poller = client .virtual_machine_extensions .begin_create_or_update (
3182- resource_group_name , vm_instance .name , instance_name , ext )
3183- return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'resetting admin' , 'done' )(poller )
3206+ return poller
3207+
3208+ return LongRunningOperation (cmd .cli_ctx , 'resetting admin' , 'done' )(poller )
31843209
31853210
31863211def set_user (cmd , resource_group_name , vm_name , username , password = None , ssh_key_value = None ,
31873212 no_wait = False ):
3188- vm = get_vm (cmd , resource_group_name , vm_name , 'instanceView' )
3189- if _is_linux_os (vm ):
3213+ from .operations .vm import VMShow
3214+ vm = VMShow (cli_ctx = cmd .cli_ctx )(command_args = {
3215+ 'resource_group' : resource_group_name ,
3216+ 'vm_name' : vm_name ,
3217+ 'expand' : 'instanceView'
3218+ })
3219+ if _is_linux_os_aaz (vm ):
31903220 return _set_linux_user (cmd , vm , resource_group_name , username , password , ssh_key_value , no_wait )
31913221 if ssh_key_value :
31923222 raise CLIError ('SSH key is not appliable on a Windows VM' )
31933223 return _reset_windows_admin (cmd , vm , resource_group_name , username , password , no_wait )
31943224
31953225
31963226def delete_user (cmd , resource_group_name , vm_name , username , no_wait = False ):
3197- vm = get_vm (cmd , resource_group_name , vm_name , 'instanceView' )
3198- if not _is_linux_os (vm ):
3227+ from .operations .vm import VMShow
3228+ vm = VMShow (cli_ctx = cmd .cli_ctx )(command_args = {
3229+ 'resource_group' : resource_group_name ,
3230+ 'vm_name' : vm_name ,
3231+ 'expand' : 'instanceView'
3232+ })
3233+ if not _is_linux_os_aaz (vm ):
31993234 raise CLIError ('Deleting a user is not supported on Windows VM' )
32003235 if no_wait :
32013236 return _update_linux_access_extension (cmd , vm , resource_group_name ,
32023237 {'remove_user' : username }, no_wait )
3238+
32033239 poller = _update_linux_access_extension (cmd , vm , resource_group_name ,
32043240 {'remove_user' : username })
3205- return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'deleting user' , 'done' )(poller )
3241+ return LongRunningOperation (cmd .cli_ctx , 'deleting user' , 'done' )(poller )
32063242
32073243
32083244def reset_linux_ssh (cmd , resource_group_name , vm_name , no_wait = False ):
3209- vm = get_vm (cmd , resource_group_name , vm_name , 'instanceView' )
3210- if not _is_linux_os (vm ):
3245+ from .operations .vm import VMShow
3246+ vm = VMShow (cli_ctx = cmd .cli_ctx )(command_args = {
3247+ 'resource_group' : resource_group_name ,
3248+ 'vm_name' : vm_name ,
3249+ 'expand' : 'instanceView'
3250+ })
3251+ if not _is_linux_os_aaz (vm ):
32113252 raise CLIError ('Resetting SSH is not supported in Windows VM' )
32123253 if no_wait :
32133254 return _update_linux_access_extension (cmd , vm , resource_group_name ,
32143255 {'reset_ssh' : True }, no_wait )
3256+
32153257 poller = _update_linux_access_extension (cmd , vm , resource_group_name ,
32163258 {'reset_ssh' : True })
3217- return ExtensionUpdateLongRunningOperation (cmd .cli_ctx , 'resetting SSH' , 'done' )(poller )
3259+ return LongRunningOperation (cmd .cli_ctx , 'resetting SSH' , 'done' )(poller )
32183260# endregion
32193261
32203262
0 commit comments