Skip to content

az network nat gateway create with pip-prefixes-v6 fails on single id #33167

@sf-msft

Description

@sf-msft

Describe the bug

Curious on why pip-prefixes-v6 is handled differently from pip-prefix: https://github.com/cxznmhdcxz/azure-cli/blob/e73e303d08ec0805f9b336e9a4cc806348babb06/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/nat/gateway/_create.py#L115-L126

To reproduce:

  1. Get resource group with following env vars:
SUBSCRIPTION=$(az account show --query id -o tsv)
PIP_NAME="${RESOURCE_GROUP}-nat-pip"
PIP6_PREFIX_NAME="${RESOURCE_GROUP}-nat-pip6-prefix"
NATGW_NAME="${RESOURCE_GROUP}-natgw"
  1. Create a StandardV2 public IPv4 address
az network public-ip create \
  --resource-group $RESOURCE_GROUP \
  --location $REGION \
  --name $PIP_NAME \
  --version IPv4 \
  --allocation-method Static \
  --sku StandardV2 \
  --tier Regional
  1. Create IPv6 public ip prefix
az network public-ip prefix create \
  --resource-group $RESOURCE_GROUP \
  --location $REGION \
  --name $PIP6_PREFIX_NAME \
  --length 127 \
  --version IPv6 \
  --sku StandardV2 \
  --tier Regional
  1. Create StandardV2 Nat Gateway (Fails)
az network nat gateway create \
  --resource-group $RESOURCE_GROUP \
  --location $REGION \
  --name $NATGW_NAME \
  --sku StandardV2 \
  --public-ip-addresses $PIP_NAME \
  --pip-prefixes-v6 $PIP6_PREFIX_NAME

Related command

az network nat gateway create \
      --resource-group $RESOURCE_GROUP \
      --location $REGION \
      --name $NATGW_NAME \
      --sku StandardV2 \
      --public-ip-addresses $PIP_NAME \
      --pip-prefixes-v6 $PIP6_PREFIX_NAME

Errors

Failed to parse '--pip-prefixes-v6' argument: list type value expected, got '/subscriptions/$SUBSCRIPTION/resourceGroups/acn-pm/providers/Microsoft.Network/publicIPPrefixes/acn-pm-nat-pip6-prefix'(<class 'str'>)

Issue script & Debug output

cli.knack.cli: Command arguments: ['network', 'nat', 'gateway', 'create', '--resource-group', 'acn-pm', '--location', 'centraluseuap', '--name', 'acn-pm-natgw', '--sku', 'StandardV2', '--public-ip-addresses', 'acn-pm-nat-pip', '--pip-prefixes-v6', 'acn-pm-nat-pip6-prefix', '--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 0x70822c8f6840>, <function OutputProducer.on_global_arguments at 0x70822c62e700>, <function CLIQuery.on_global_arguments at 0x70822c668860>]
cli.knack.cli: Event: CommandInvoker.OnPreCommandTableCreate []
cli.azure.cli.core: Modules found from index for 'network': ['azure.cli.command_modules.privatedns', 'azure.cli.command_modules.network', 'azext_alb']
cli.azure.cli.core: Loading command modules...
cli.azure.cli.core: Loaded command modules in parallel:
cli.azure.cli.core: Name                  Load Time    Groups  Commands
cli.azure.cli.core: privatedns                0.143        14        60
cli.azure.cli.core: network                   0.426       121       373
cli.azure.cli.core: Total (2)                 0.429       135       433
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: alb                       0.012         4         5  /home/sfoo/.azure/cliextensions/alb
cli.azure.cli.core: Total (1)                 0.012         4         5
cli.azure.cli.core: Loaded 137 groups, 438 commands.
cli.azure.cli.core: Found a match in the command table.
cli.azure.cli.core: Raw command  : network nat gateway create
cli.azure.cli.core: Command table: network nat gateway create
cli.knack.cli: Event: CommandInvoker.OnPreCommandTableTruncate [<function AzCliLogging.init_command_file_logging at 0x70822b8cf420>]
cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to '/home/sfoo/.azure/commands/2026-04-09.18-22-03.network_nat_gateway_create.203784.log'.
az_command_data_logger: command args: network nat gateway create --resource-group {} --location {} --name {} --sku {} --public-ip-addresses {} --pip-prefixes-v6 {} --debug
cli.knack.cli: Event: CommandInvoker.OnPreArgumentLoad [<function register_global_subscription_argument.<locals>.add_subscription_parameter at 0x70822b91cf40>]
cli.knack.cli: Event: CommandInvoker.OnPostArgumentLoad []
cli.knack.cli: Event: CommandInvoker.OnPostCommandTableCreate [<function register_ids_argument.<locals>.add_ids_arguments at 0x70822b91f1a0>, <function register_cache_arguments.<locals>.add_cache_arguments at 0x70822b91f380>, <function register_upcoming_breaking_change_info.<locals>.update_breaking_change_info at 0x70822b91f420>]
cli.knack.cli: Event: CommandInvoker.OnCommandTableLoaded []
cli.knack.cli: Event: CommandInvoker.OnPreParseArgs []
cli.azure.cli.core.azclierror: Traceback (most recent call last):
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/aaz/_arg_action.py", line 429, in __call__
    self.setup_operations(dest_ops, values)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/aaz/_arg_action.py", line 475, in setup_operations
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/aaz/_arg_action.py", line 455, in setup_operations
    data = action.format_data(value)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/aaz/_arg_action.py", line 518, in format_data
    raise AAZInvalidValueError(f"list type value expected, got '{data}'({type(data)})")
azure.cli.core.aaz.exceptions.AAZInvalidValueError: list type value expected, got 'acn-pm-nat-pip6-prefix'(<class 'str'>)

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

Traceback (most recent call last):
  File "/opt/az/lib/python3.13/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 606, in execute
    parsed_args = self.parser.parse_args(args)
  File "/opt/az/lib/python3.13/site-packages/knack/parser.py", line 261, in parse_args
    return super().parse_args(args)
           ~~~~~~~~~~~~~~~~~~^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1898, in parse_args
    args, argv = self.parse_known_args(args, namespace)
                 ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/parser.py", line 282, in parse_known_args
    self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace)
                                           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1908, in parse_known_args
    return self._parse_known_args2(args, namespace, intermixed=False)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1937, in _parse_known_args2
    namespace, args = self._parse_known_args(args, namespace, intermixed)
                      ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2169, in _parse_known_args
    positionals_end_index = consume_positionals(start_index)
  File "/opt/az/lib/python3.13/argparse.py", line 2144, in consume_positionals
    take_action(action, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2013, in take_action
    action(self, namespace, argument_values, option_string)
    ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1258, in __call__
    subnamespace, arg_strings = subparser.parse_known_args(arg_strings, None)
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/parser.py", line 282, in parse_known_args
    self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace)
                                           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1908, in parse_known_args
    return self._parse_known_args2(args, namespace, intermixed=False)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1937, in _parse_known_args2
    namespace, args = self._parse_known_args(args, namespace, intermixed)
                      ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2169, in _parse_known_args
    positionals_end_index = consume_positionals(start_index)
  File "/opt/az/lib/python3.13/argparse.py", line 2144, in consume_positionals
    take_action(action, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2013, in take_action
    action(self, namespace, argument_values, option_string)
    ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1258, in __call__
    subnamespace, arg_strings = subparser.parse_known_args(arg_strings, None)
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/parser.py", line 282, in parse_known_args
    self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace)
                                           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1908, in parse_known_args
    return self._parse_known_args2(args, namespace, intermixed=False)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1937, in _parse_known_args2
    namespace, args = self._parse_known_args(args, namespace, intermixed)
                      ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2169, in _parse_known_args
    positionals_end_index = consume_positionals(start_index)
  File "/opt/az/lib/python3.13/argparse.py", line 2144, in consume_positionals
    take_action(action, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2013, in take_action
    action(self, namespace, argument_values, option_string)
    ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1258, in __call__
    subnamespace, arg_strings = subparser.parse_known_args(arg_strings, None)
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/parser.py", line 282, in parse_known_args
    self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace)
                                           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1908, in parse_known_args
    return self._parse_known_args2(args, namespace, intermixed=False)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1937, in _parse_known_args2
    namespace, args = self._parse_known_args(args, namespace, intermixed)
                      ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2169, in _parse_known_args
    positionals_end_index = consume_positionals(start_index)
  File "/opt/az/lib/python3.13/argparse.py", line 2144, in consume_positionals
    take_action(action, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2013, in take_action
    action(self, namespace, argument_values, option_string)
    ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1258, in __call__
    subnamespace, arg_strings = subparser.parse_known_args(arg_strings, None)
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/parser.py", line 282, in parse_known_args
    self._namespace, self._raw_arguments = super().parse_known_args(args=args, namespace=namespace)
                                           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1908, in parse_known_args
    return self._parse_known_args2(args, namespace, intermixed=False)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 1937, in _parse_known_args2
    namespace, args = self._parse_known_args(args, namespace, intermixed)
                      ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2188, in _parse_known_args
    start_index = consume_optional(start_index)
  File "/opt/az/lib/python3.13/argparse.py", line 2112, in consume_optional
    take_action(action, args, option_string)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/argparse.py", line 2013, in take_action
    action(self, namespace, argument_values, option_string)
    ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/aaz/_arg_action.py", line 431, in __call__
    raise azclierror.InvalidArgumentValueError(f"Failed to parse '{option_string}' argument: {ex}") from ex
azure.cli.core.azclierror.InvalidArgumentValueError: Failed to parse '--pip-prefixes-v6' argument: list type value expected, got 'acn-pm-nat-pip6-prefix'(<class 'str'>)

cli.azure.cli.core.azclierror: Failed to parse '--pip-prefixes-v6' argument: list type value expected, got 'acn-pm-nat-pip6-prefix'(<class 'str'>)
az_command_data_logger: Failed to parse '--pip-prefixes-v6' argument: list type value expected, got 'acn-pm-nat-pip6-prefix'(<class 'str'>)
cli.knack.cli: Event: Cli.PostExecute [<function AzCliLogging.deinit_cmd_metadata_logging at 0x70822b8cf6a0>]
az_command_data_logger: exit code: 1
cli.__main__: Command ran in 0.595 seconds (init: 0.101, invoke: 0.494)
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 4115 in cache file under /home/sfoo/.azure/telemetry/20260409182203391
telemetry.main: Begin creating telemetry upload process.
telemetry.process: Creating upload process: "/opt/az/bin/python3 /opt/az/lib/python3.13/site-packages/azure/cli/telemetry/__init__.py /home/sfoo/.azure /home/sfoo/.azure/telemetry/20260409182203391"
telemetry.process: Return from creating process 203792
telemetry.main: Finish creating telemetry upload process.

Expected behavior

Should be valid to pass a single id or name

Environment Summary

azure-cli                         2.84.0 *

core                              2.84.0 *
telemetry                          1.1.0

Extensions:
aks-preview                    19.0.0b25
alb                                2.0.1
amg                                2.8.1
ssh                                2.0.6

Dependencies:
msal                            1.35.0b1
azure-mgmt-resource               24.0.0

Python location '/opt/az/bin/python3'
Config directory '/home/sfoo/.azure'
Extensions directory '/home/sfoo/.azure/cliextensions'

Python (Linux) 3.13.11 (main, Feb 25 2026, 02:29:12) [GCC 11.4.0]

Legal docs and information: aka.ms/AzureCliLegal

Additional context

N/A

Metadata

Metadata

Assignees

Labels

ARMaz resource/group/lock/tag/deployment/policy/managementapp/account management-groupAuto-AssignAuto assign by botAuto-ResolveAuto resolve by botAzure CLI TeamThe command of the issue is owned by Azure CLI teamLanguageNetworkaz network vnet/lb/nic/dns/etc...Similar-Issueact-quality-productivity-squadbugThis issue requires a change to an existing behavior in the product in order to be resolved.questionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions