Azure / Azure/azure-cli

[vm-repair] repair-button command fails with FrameLocalsProxy error in CLI >= 2.77.0

Open
#32,408 8 comments 1 reaction 2 assignees Claimed by @zhoxing-ms View on GitHub
act-observability-squad Auto-Assign bug Compute Service Attention
Dominant language
Python
Stars
4.6k
Forks
3.5k
Avg merge
3d 2h
Merged PRs (30d)
60

Description

### Describe the bug

The az vm repair repair-button command fails when using Azure CLI versions 2.77.0 and above. The same command works correctly in Azure Cloud Shell(which has 2.77.0) and with CLI versions up to 2.76.0. This issue impacts automated repair workflows and SRE agent scenarios, especially for VMs with fstab issues.

### Related command

az vm repair repair-button --button-command 'fstab' --verbose --resource-group --name

### Errors

PS C:\Users\dpaladhi> az vm repair repair-button --button-command 'fstab' --resource-group nobootscenariosrg --name fstabnoboot
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
The command failed with an unexpected error. Here is the traceback:
cannot remove local variables from FrameLocalsProxy
Traceback (most recent call last):
File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke
File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 666, in execute
File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially
File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 703, in _run_job
File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 336, in __call__
File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 120, in handler
File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\custom.py", line 1031, in repair_button
command = command_helper(logger, cmd, 'vm repair repair-button')
File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\command_helper_class.py", line 40, in __init__
self.command_params = _get_function_param_dict(inspect.getouterframes(inspect.currentframe())[1].frame)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\repair_utils.py", line 737, in _get_function_param_dict
del values['cmd']
~~~~~~^^^^^^^
ValueError: cannot remove local variables from FrameLocalsProxy

### Issue script & Debug output

PS C:\Users\dpaladhi> az vm repair repair-button --button-command 'fstab' --resource-group nobootscenariosrg --name fstabnoboot --debug cli.knack.cli: Command arguments: ['vm', 'repair', 'repair-button', '--button-command', 'fstab', '--resource-group', 'nobootscenariosrg', '--name', 'fstabnoboot', '--debug'] cli.knack.cli: __init__ debug log: Enable color in terminal. Enable VT mode. cli.knack.cli: Event: Cli.PreExecute [] cli.knack.cli: Event: CommandParser.OnGlobalArgumentsCreate [, , ] cli.knack.cli: Event: CommandInvoker.OnPreCommandTableCreate [] cli.azure.cli.core: Modules found from index for 'vm': ['azure.cli.command_modules.vm', 'azext_vm_repair'] cli.azure.cli.core: Loading command modules: cli.azure.cli.core: Name Load Time Groups Commands cli.azure.cli.core: vm 4.180 60 280 cli.azure.cli.core: Total (1) 4.180 60 280 cli.azure.cli.core: These extensions are not installed and will be skipped: ['azext_ai_examples', 'azext_next'] cli.azure.cli.core: Loading extensions: cli.azure.cli.core: Name Load Time Groups Commands Directory cli.azure.cli.core: vm-repair 0.303 2 7 C:\Users\dpaladhi\.azure\cliextensions\vm-repair cli.azure.cli.core: Total (1) 0.303 2 7 cli.azure.cli.core: Loaded 61 groups, 287 commands. cli.azure.cli.core: Found a match in the command table. cli.azure.cli.core: Raw command : vm repair repair-button cli.azure.cli.core: Command table: vm repair repair-button cli.knack.cli: Event: CommandInvoker.OnPreCommandTableTruncate [] cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to 'C:\Users\dpaladhi\.azure\commands\2025-11-10.12-15-35.vm_repair_repair-button.47516.log'. az_command_data_logger: command args: vm repair repair-button --button-command {} --resource-group {} --name {} --debug cli.knack.cli: Event: CommandInvoker.OnPreArgumentLoad [.add_subscription_parameter at 0x0000023688CFE5C0>] cli.knack.cli: Event: CommandInvoker.OnPostArgumentLoad [] cli.knack.cli: Event: CommandInvoker.OnPostCommandTableCreate [.add_ids_arguments at 0x0000023688D5C900>, .add_cache_arguments at 0x0000023688D5CAE0>, .update_breaking_change_info at 0x0000023688D5CB80>] cli.knack.cli: Event: CommandInvoker.OnCommandTableLoaded [] cli.knack.cli: Event: CommandInvoker.OnPreParseArgs [] cli.knack.cli: Event: CommandInvoker.OnPostParseArgs [, , .parse_ids_arguments at 0x0000023688D5C9A0>] az_command_data_logger: extension name: vm-repair az_command_data_logger: extension version: 2.1.2 This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus cli.azure.cli.core.azclierror: Traceback (most recent call last): File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 666, in execute File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 703, in _run_job File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 336, in __call__ File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 120, in handler File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\custom.py", line 1031, in repair_button command = command_helper(logger, cmd, 'vm repair repair-button') File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\command_helper_class.py", line 40, in __init__ self.command_params = _get_function_param_dict(inspect.getouterframes(inspect.currentframe())[1].frame) ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\repair_utils.py", line 737, in _get_function_param_dict del values['cmd'] ~~~~~~^^^^^^^ ValueError: cannot remove local variables from FrameLocalsProxy cli.azure.cli.core.azclierror: The command failed with an unexpected error. Here is the traceback: az_command_data_logger: The command failed with an unexpected error. Here is the traceback: cli.azure.cli.core.azclierror: cannot remove local variables from FrameLocalsProxy Traceback (most recent call last): File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 666, in execute File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 703, in _run_job File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 336, in __call__ File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 120, in handler File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\custom.py", line 1031, in repair_button command = command_helper(logger, cmd, 'vm repair repair-button') File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\command_helper_class.py", line 40, in __init__ self.command_params = _get_function_param_dict(inspect.getouterframes(inspect.currentframe())[1].frame) ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\repair_utils.py", line 737, in _get_function_param_dict del values['cmd'] ~~~~~~^^^^^^^ ValueError: cannot remove local variables from FrameLocalsProxy az_command_data_logger: cannot remove local variables from FrameLocalsProxy Traceback (most recent call last): File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 666, in execute File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 703, in _run_job File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 336, in __call__ File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 120, in handler File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\custom.py", line 1031, in repair_button command = command_helper(logger, cmd, 'vm repair repair-button') File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\command_helper_class.py", line 40, in __init__ self.command_params = _get_function_param_dict(inspect.getouterframes(inspect.currentframe())[1].frame) ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\repair_utils.py", line 737, in _get_function_param_dict del values['cmd'] ~~~~~~^^^^^^^ ValueError: cannot remove local variables from FrameLocalsProxy To check existing issues, please visit: https://github.com/Azure/azure-cli/issues cli.knack.cli: Event: Cli.PostExecute [] az_command_data_logger: exit code: 1 cli.__main__: Command ran in 7.704 seconds (init: 1.858, invoke: 5.846) telemetry.main: Begin splitting cli events and extra events, total events: 1 telemetry.client: Accumulated 0 events. Flush the clients. telemetry.main: Finish splitting cli events and extra events, cli events: 1 telemetry.save: Save telemetry record of length 8044 in cache file under C:\Users\dpaladhi\.azure\telemetry\20251110121536974 telemetry.main: Begin creating telemetry upload process. telemetry.process: Creating upload process: "C:\Program Files\Microsoft SDKs\Azure\CLI2\python.exe C:\Program Files\Microsoft SDKs\Azure\CLI2\Lib\site-packages\azure\cli\telemetry\__init__.pyc C:\Users\dpaladhi\.azure C:\Users\dpaladhi\.azure\telemetry\20251110121536974" telemetry.process: Return from creating process 20428 telemetry.main: Finish creating telemetry upload process. Exception ignored in: Traceback (most recent call last): File "C:\Users\dpaladhi\.azure\cliextensions\vm-repair\azext_vm_repair\command_helper_class.py", line 86, in __del__ AttributeError: 'command_helper' object has no attribute 'is_verbose'

### Expected behavior

The command should execute successfully and perform the repair steps without errors.

### Environment Summary

PS C:\Users\dpaladhi> az --version azure-cli 2.79.0 core 2.79.0 telemetry 1.1.0 Extensions: azure-devops 0.26.0 vm-repair 2.1.2 Dependencies: msal 1.34.0b1 azure-mgmt-resource 23.3.0 Python location 'C:\Program Files\Microsoft SDKs\Azure\CLI2\python.exe' Config directory 'C:\Users\dpaladhi\.azure' Extensions directory 'C:\Users\dpaladhi\.azure\cliextensions' Python (Windows) 3.13.9 (tags/v3.13.9:8183fa5, Oct 14 2025, 14:09:13) [MSC v.1944 64 bit (AMD64)] Legal docs and information: aka.ms/AzureCliLegal Your CLI is up-to-date.

### Additional context

The error occurs at the beginning of the process, before the three-step ALAR workflow starts.
The issue seems related to parameter handling in vm-repair extension after CLI core changes.
Relevant code line:
[repair_utils.py#L737](https://github.com/Azure/azure-cli-extensions/blob/e7519a9c5fd328e845d4aa980e84d331a5655553/src/vm-repair/azext_vm_repair/repair_utils.py#L737)
Possible workaround discussed: Downgrade CLI to 2.76.0 temporarily.
Impact: Blocks automated repair flows and demo scenarios for Ignite.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.