{Compute} az vmss: Migrate command group to aaz-based implementation#32857
{Compute} az vmss: Migrate command group to aaz-based implementation#32857william051200 wants to merge 15 commits intoAzure:devfrom
az vmss: Migrate command group to aaz-based implementation#32857Conversation
️✔️AzureCLI-FullTest
|
️✔️AzureCLI-BreakingChangeTest
|
|
Thank you for your contribution! We will review the pull request and get back to you soon. |
|
The git hooks are available for azure-cli and azure-cli-extensions repos. They could help you run required checks before creating the PR. Please sync the latest code with latest dev branch (for azure-cli) or main branch (for azure-cli-extensions). pip install azdev --upgrade
azdev setup -c <your azure-cli repo path> -r <your azure-cli-extensions repo path>
|
There was a problem hiding this comment.
Pull request overview
This PR migrates the az vmss command group core commands (create, show, update, wait) from SDK-based implementation to AAZ-based implementation, following Azure CLI's ongoing effort to standardize on AAZ for compute resources.
Changes:
- Migrated
vmss show,vmss update, andvmss waitcommand registrations from SDK-based to AAZ-based implementation - Updated
create_vmssfunction to use AAZ-basedget_vmss_by_aazinstead of SDK-basedget_vmss - Modified Guest Attestation Extension installation logic to work with AAZ dictionary responses (camelCase keys)
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/azure-cli/azure/cli/command_modules/vm/commands.py | Moved vmss create/show/update/wait command registrations from SDK operation group to AAZ-based command group without operation_group |
| src/azure-cli/azure/cli/command_modules/vm/custom.py | Updated create_vmss to use get_vmss_by_aaz and modified extension installation code to handle AAZ dictionary responses |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| vmss = get_vmss_by_aaz(cmd, resource_group_name, vmss_name) | ||
| vmss['virtualMachineProfile']['storageProfile']['imageReference'] = None | ||
| os_type = vmss.get('virtualMachineProfile', {}).get('storageProfile', {}).get('osDisk', {}).get('osType') | ||
| if os_type == 'Linux': | ||
| publisher = 'Microsoft.Azure.Security.LinuxAttestation' | ||
| if vmss.virtual_machine_profile.storage_profile.os_disk.os_type == 'Windows': | ||
| elif os_type == 'Windows': | ||
| publisher = 'Microsoft.Azure.Security.WindowsAttestation' | ||
| version = _normalize_extension_version(cmd.cli_ctx, publisher, 'GuestAttestation', None, vmss.location) | ||
| ext = VirtualMachineScaleSetExtension(name='GuestAttestation', | ||
| publisher=publisher, | ||
| type_properties_type='GuestAttestation', | ||
| protected_settings=None, | ||
| type_handler_version=version, | ||
| settings=None, | ||
| auto_upgrade_minor_version=True, | ||
| provision_after_extensions=None, | ||
| enable_automatic_upgrade=not disable_integrity_monitoring_autoupgrade) | ||
| if not vmss.virtual_machine_profile.extension_profile: | ||
| vmss.virtual_machine_profile.extension_profile = VirtualMachineScaleSetExtensionProfile(extensions=[]) | ||
| vmss.virtual_machine_profile.extension_profile.extensions.append(ext) | ||
| else: | ||
| publisher = '' | ||
| version = _normalize_extension_version(cmd.cli_ctx, publisher, 'GuestAttestation', | ||
| None, vmss.get('location')) | ||
| ext = { | ||
| 'name': 'GuestAttestation', | ||
| 'auto_upgrade_minor_version': True, | ||
| 'enable_automatic_upgrade': not disable_integrity_monitoring_autoupgrade, | ||
| 'publisher': publisher, | ||
| 'type_handler_version': version, | ||
| 'type': 'GuestAttestation' | ||
| } | ||
| if not vmss.get('virtualMachineProfile', {}).get('extensionProfile'): | ||
| vmss['virtualMachineProfile']['extensionProfile'] = {'extensions': []} | ||
| vmss['virtualMachineProfile']['extensionProfile']['extensions'].append(ext) | ||
| try: | ||
| LongRunningOperation(cmd.cli_ctx)(client.virtual_machine_scale_sets.begin_create_or_update( | ||
| resource_group_name, vmss_name, vmss)) | ||
| from .operations.vmss import VMSSCreate | ||
| vmss['resource_group'] = resource_group_name | ||
| vmss['vm_scale_set_name'] = vmss_name | ||
| _create_vmss = VMSSCreate(cli_ctx=cmd.cli_ctx)(command_args=vmss) | ||
| LongRunningOperation(cmd.cli_ctx)(_create_vmss) |
There was a problem hiding this comment.
The VMSS object retrieved from get_vmss_by_aaz returns camelCase keys (e.g., 'virtualMachineProfile'), but AAZ Create/Update commands expect snake_case argument names. Before passing the vmss dictionary to VMSSCreate, you must convert it using the convert_show_result_to_snake_case function.
Compare this to the update_vmss function (lines 4587-4593) which correctly performs this conversion:
from .operations.vmss import convert_show_result_to_snake_case
vmss = vmss_convert_show_result_to_snake_case(vmss)Without this conversion, the AAZ command will fail to properly map the dictionary keys to its argument schema, potentially causing the operation to fail or produce incorrect results.
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
Related command
az vmss createaz vmss showaz vmss updateaz vmss waitDescription
Migration from mgmt.compute to aaz-based
Testing Guide
History Notes
This checklist is used to make sure that common guidelines for a pull request are followed.
The PR title and description has followed the guideline in Submitting Pull Requests.
I adhere to the Command Guidelines.
I adhere to the Error Handling Guidelines.