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

Auto-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.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions