Azure / azure-cli

Azure Command-Line Interface
MIT License
3.98k stars 2.96k forks source link

'az maintenance assignment create-or-update-subscription' example does not work #27905

Open benjamin-crew opened 10 months ago

benjamin-crew commented 10 months ago

Describe the bug

I am trying to create a maintenance assignment using the example from the documentation as the template, but when I specify the example tags, the command outputs an error.

Related command

The example is as follows: az maintenance assignment create-or-update-subscription --maintenance-configuration-id "/subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/exmaplerg2/providers/Microsoft. Maintenance/maintenanceConfigurations/config1" --name assignmentname --filter-locations eastus2euap centraluseuap --filter-os-types windows linux --filter-tags "{{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}}" --filter-tags-operator All

I have attempted the following: az maintenance assignment create-or-update-subscription --config-id "/subscriptions/redacted/resourcegroups/redacted-rg-01/providers/Microsoft.Maintenance/maintenanceConfigurations/bc-test-delete-me" --configuration-assignment-name "REDACTED - Production" --subscription "REDACTED - Production" --filter-locations uksouth --filter-os-types windows linux --filter-tags "{{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}}" --filter-tags-operator All

Errors

Failed to parse '--filter-tags' argument: Shorthand Syntax Error: Redundant tail: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}}

Issue script & Debug output

redacted [ ~ ]$ az maintenance assignment create-or-update-subscription --config-id "/subscriptions/REDACTED/resourcegroups/REDACTED-uks-mgt-updates-rg-01/providers/Microsoft.Maintenance/maintenanceConfigurations/bc-test-delete-me" --configuration-assignment-name "REDACTED - Production" --subscription "REDACTED - Production" --filter-locations uksouth --filter-os-types windows linux --filter-tags "{{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}}" --filter-tags-operator All --debug cli.knack.cli: Command arguments: ['maintenance', 'assignment', 'create-or-update-subscription', '--config-id', '/subscriptions/REDACTED/resourcegroups/REDACTED-uks-mgt-updates-rg-01/providers/Microsoft.Maintenance/maintenanceConfigurations/bc-test-delete-me', '--configuration-assignment-name', 'REDACTED - Production', '--subscription', 'REDACTED - Production', '--filter-locations', 'uksouth', '--filter-os-types', 'windows', 'linux', '--filter-tags', '{{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}}', '--filter-tags-operator', 'All', '--debug'] cli.knack.cli: init debug log: Enable color in terminal. cli.knack.cli: Event: Cli.PreExecute [] cli.knack.cli: Event: CommandParser.OnGlobalArgumentsCreate [<function CLILogging.on_global_arguments at 0x7f748fd701f0>, <function OutputProducer.on_global_arguments at 0x7f748fc8ad30>, <function CLIQuery.on_global_arguments at 0x7f748fc22310>] cli.knack.cli: Event: CommandInvoker.OnPreCommandTableCreate [] cli.azure.cli.core: Modules found from index for 'maintenance': ['azext_maintenance'] cli.azure.cli.core: Loading command modules: cli.azure.cli.core: Name Load Time Groups Commands cli.azure.cli.core: Total (0) 0.000 0 0 cli.azure.cli.core: These extensions are not installed and will be skipped: ['azext_next'] cli.azure.cli.core: Loading extensions: cli.azure.cli.core: Name Load Time Groups Commands Directory cli.azure.cli.core: ai-examples 0.113 1 1 /usr/lib/python3.9/site-packages/azure-cli-extensions/ai-examples cli.azure.cli.core: maintenance 0.053 6 23 /home/benjamin_crew/.azure/cliextensions/maintenance cli.azure.cli.core: Total (2) 0.166 7 24
cli.azure.cli.core: Loaded 7 groups, 24 commands. cli.azure.cli.core: Found a match in the command table. cli.azure.cli.core: Raw command : maintenance assignment create-or-update-subscription cli.azure.cli.core: Command table: maintenance assignment create cli.azure.cli.core: remaining : or-update-subscription cli.knack.cli: Event: CommandInvoker.OnPreCommandTableTruncate [<function AzCliLogging.init_command_file_logging at 0x7f748f0c73a0>] cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to '/home/benjamin_crew/.azure/commands/2023-11-22.14-30-49.maintenance_assignment_create-or-update-subscription.1555.log'. az_command_data_logger: command args: maintenance assignment create-or-update-subscription --config-id {} --configuration-assignment-name {} --subscription {} --filter-locations {} --filter-os-types {} {} --filter-tags {} --filter-tags-operator {} --debug cli.knack.cli: Event: CommandInvoker.OnPreArgumentLoad [<function register_global_subscription_argument..add_subscription_parameter at 0x7f748f08ddc0>] cli.knack.cli: Event: CommandInvoker.OnPostArgumentLoad [] cli.knack.cli: Event: CommandInvoker.OnPostCommandTableCreate [<function register_ids_argument..add_ids_arguments at 0x7f748f0a60d0>, <function register_cache_arguments..add_cache_arguments at 0x7f748f02fee0>] cli.knack.cli: Event: CommandInvoker.OnCommandTableLoaded [] cli.knack.cli: Event: CommandInvoker.OnPreParseArgs [] cli.azure.cli.core.util: malformed node or string: <ast.Name object at 0x7f748e5c3ee0> cli.azure.cli.core.aaz._arg_action: Failed to parse string as JSON: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}} Error detail: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) cli.azure.cli.core.azclierror: Traceback (most recent call last): File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/util.py", line 576, in shell_safe_json_parse return json.loads(json_or_dict_string, object_pairs_hook=OrderedDict, strict=strict) File "/usr/lib/python3.9/json/init.py", line 359, in loads return cls(**kw).decode(s) File "/usr/lib/python3.9/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python3.9/json/decoder.py", line 353, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 263, in _decode_value v = shell_safe_json_parse(value, True) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/util.py", line 600, in shell_safe_json_parse raise InvalidArgumentValueError(msg, recommendation=recommendation) from json_ex azure.cli.core.azclierror.InvalidArgumentValueError: Failed to parse string as JSON: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}} Error detail: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 89, in call self.setup_operations(dest_ops, values) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 184, in setupoperations for , key_parts, value in cls.decode_values(values): File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 199, in decode_values v = cls._decode_value(schema, v) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 266, in _decode_value raise shorthand_ex # raise shorthand syntax exception File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 260, in _decode_value v = cls._str_parser(value) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_utils.py", line 50, in call raise AAZInvalidShorthandSyntaxError(data, length, len(data) - length, "Redundant tail") azure.cli.core.aaz.exceptions.AAZInvalidShorthandSyntaxError: Shorthand Syntax Error: Redundant tail: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}} ^

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/usr/lib64/az/lib/python3.9/site-packages/knack/cli.py", line 233, in invoke cmd_result = self.invocation.execute(args) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/commands/init.py", line 588, in execute parsed_args = self.parser.parse_args(args) File "/usr/lib64/az/lib/python3.9/site-packages/knack/parser.py", line 261, in parse_args return super().parse_args(args) File "/usr/lib/python3.9/argparse.py", line 1825, in parse_args args, argv = self.parse_known_args(args, namespace) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/parser.py", line 281, in parse_known_args self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace) File "/usr/lib/python3.9/argparse.py", line 1858, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.9/argparse.py", line 2049, in _parse_known_args positionals_end_index = consume_positionals(start_index) File "/usr/lib/python3.9/argparse.py", line 2026, in consume_positionals take_action(action, args) File "/usr/lib/python3.9/argparse.py", line 1935, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python3.9/argparse.py", line 1214, in call subnamespace, arg_strings = parser.parse_known_args(arg_strings, None) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/parser.py", line 281, in parse_known_args self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace) File "/usr/lib/python3.9/argparse.py", line 1858, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.9/argparse.py", line 2049, in _parse_known_args positionals_end_index = consume_positionals(start_index) File "/usr/lib/python3.9/argparse.py", line 2026, in consume_positionals take_action(action, args) File "/usr/lib/python3.9/argparse.py", line 1935, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python3.9/argparse.py", line 1214, in call subnamespace, arg_strings = parser.parse_known_args(arg_strings, None) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/parser.py", line 281, in parse_known_args self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace) File "/usr/lib/python3.9/argparse.py", line 1858, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.9/argparse.py", line 2049, in _parse_known_args positionals_end_index = consume_positionals(start_index) File "/usr/lib/python3.9/argparse.py", line 2026, in consume_positionals take_action(action, args) File "/usr/lib/python3.9/argparse.py", line 1935, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python3.9/argparse.py", line 1214, in call subnamespace, arg_strings = parser.parse_known_args(arg_strings, None) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/parser.py", line 281, in parse_known_args self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace) File "/usr/lib/python3.9/argparse.py", line 1858, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.9/argparse.py", line 2067, in _parse_known_args start_index = consume_optional(start_index) File "/usr/lib/python3.9/argparse.py", line 2007, in consume_optional take_action(action, args, option_string) File "/usr/lib/python3.9/argparse.py", line 1935, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/aaz/_arg_action.py", line 95, in call raise azclierror.InvalidArgumentValueError(f"Failed to parse '{option_string}' argument: {ex}") from ex azure.cli.core.azclierror.InvalidArgumentValueError: Failed to parse '--filter-tags' argument: Shorthand Syntax Error: Redundant tail: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}} ^

cli.azure.cli.core.azclierror: Failed to parse '--filter-tags' argument: Shorthand Syntax Error: Redundant tail: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}} ^ az_command_data_logger: Failed to parse '--filter-tags' argument: Shorthand Syntax Error: Redundant tail: {{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}} ^ cli.knack.cli: Event: Cli.PostExecute [<function AzCliLogging.deinit_cmd_metadata_logging at 0x7f748f0c75e0>] az_command_data_logger: exit code: 1 cli.main: Command ran in 0.372 seconds (init: 0.119, invoke: 0.253) 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 3738 in cache telemetry.main: Begin creating telemetry upload process. telemetry.process: Creating upload process: "/usr/bin/python3.9 /usr/lib/az/lib/python3.9/site-packages/azure/cli/telemetry/init.py /home/benjamin_crew/.azure" telemetry.process: Return from creating process telemetry.main: Finish creating telemetry upload process.

Expected behavior

I would expect the tags to be added to the dynamic scope of the maintenance configuration.

Environment Summary

azure-cli 2.54.0

core 2.54.0 telemetry 1.1.0

Extensions: ai-examples 0.2.5 maintenance 1.5.0 ml 2.21.1 ssh 2.0.2

Dependencies: msal 1.24.0b2 azure-mgmt-resource 23.1.0b2

Python location '/usr/bin/python3.9' Extensions directory '/home/benjamin_crew/.azure/cliextensions' Extensions system directory '/usr/lib/python3.9/site-packages/azure-cli-extensions'

Python (Linux) 3.9.14 (main, Oct 12 2023, 19:48:32) [GCC 11.2.0]

Legal docs and information: aka.ms/AzureCliLegal

Your CLI is up-to-date.

Additional context

I have also tried a few other syntaxes for the --filter-tags switch: --filter-tags "{updateRing:[1]}" --filter-tags "{updateRing:1}" --filter-tags "updateRing:1" --filter-tags updateRing:1 --filter-tags updateRing:[1] --filter-tags "{updateRing:[1],updateReboot:[never]}" --filter-tags "{updateRing:1,updateReboot:never}" --filter-tags "{{updateRing:[1],updateReboot:[never]}}"

None of theses efforts worked.

yonzhan commented 10 months ago

Thank you for opening this issue, we will look into it.

necusjz commented 10 months ago

@benjamin-crew Escaping issue with --filter-tags, should be {tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}.

benjamin-crew commented 10 months ago

@benjamin-crew Escaping issue with --filter-tags, should be {tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}.

This also fails:

benjamin_crew [ ~ ]$ az maintenance assignment create-or-update-subscription --config-id "/subscriptions/REDACTED/resourcegroups/REDACTED-uks-mgt-updates-rg-01/providers/Microsoft.Maintenance/maintenanceConfigurations/bc-test-delete-me" --configuration-assignment-name "REDACTED - Production" --subscription "REDACTED - Production" --filter-locations uksouth --filter-os-types windows linux --filter-tags {updateRing:[1],updateReboot:[never]} --filter-tags-operator All

Failed to parse '--filter-tags' argument: Shorthand Syntax Error: Redundant tail:
        updateRing:[1]
                  ^^^^

benjamin_crew [ ~ ]$ az maintenance assignment create-or-update-subscription --config-id "/subscriptions/REDACTED/resourcegroups/REDACTED-uks-mgt-updates-rg-01/providers/Microsoft.Maintenance/maintenanceConfigurations/bc-test-delete-me" --configuration-assignment-name "REDACTED - Production" --subscription "REDACTED - Production" --filter-locations uksouth --filter-os-types windows linux --filter-tags {tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]} --filter-tags-operator All

Failed to parse '--filter-tags' argument: Shorthand Syntax Error: Redundant tail:
        tagKey1:[tagKey1Val1

               ^^^^^^^^^^^^^
necusjz commented 10 months ago

Typing the following in the terminal:

--filter-tags "{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}"
benjamin-crew commented 10 months ago

Typing the following in the terminal:

--filter-tags "{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}"

Still struggling to get this working.

benjamin_crew [ ~ ]$ az maintenance assignment create-or-update-subscription --config-id "/subscriptions/REDACTED/resourcegroups/REDACTED-uks-mgt-updates-rg-01/providers/Microsoft.Maintenance/maintenanceConfigurations/bc-test-delete-me" --configuration-assignment-name "REDACTED- Production" --subscription "REDACTED- Production" --filter-locations uksouth --filter-os-types windows linux --filter-tags --filter-tags "{tagKey1:[tagKey1Val1,tagKey1Val2],tagKey2:[tagKey2Val1,tagKey2Val2]}" --filter-tags-operator All

argument --filter-tags: expected at least one argument
necusjz commented 10 months ago

Sad. @KalpeshChavan12 the real owner, may could help on the invalid example.

benjamin-crew commented 10 months ago

Sad. @KalpeshChavan12 the real owner, may could help on the invalid example.

My apologies, I was wrong. Your latest suggestion worked and i've managed to create the maintenance assignment.

Thank you for your help!