Skip to content

Commit 0ef58ab

Browse files
authored
{Compute} az vm user: Migrate to aaz (#32118)
1 parent 72e9b43 commit 0ef58ab

File tree

4 files changed

+5384
-5581
lines changed

4 files changed

+5384
-5581
lines changed

src/azure-cli/azure/cli/command_modules/vm/custom.py

Lines changed: 86 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
134152
def _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
31593177
def _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

31853206
def _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

32053227
def _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

32343259
def 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

32443274
def 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

32563292
def 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

Comments
 (0)