OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Clients

python-neutronclient — Cli commands

CLI commands — python-neutronclient — branch stable/2026.2

Branch stable/2026.2 @ 596a9d99b188 (14.0.0 + 2 maintenance commits) — repository https://opendev.org/openstack/python-neutronclient — analysed on 2026-11-01

This package exposes no API of its own. Its interface is 34 commands of the openstack CLI and a Python class. [observed] means seen against the local stub, which is not Neutron.

1. Shared mechanics

Plugin loading

  1. OSC collects the modules of the entry point group openstack.cli.extension (openstackclient:openstackclient/common/clientmanager.py:279). This package declares neutronclient = neutronclient.osc.plugin (setup.cfg:32).
  2. The module attributes drive the rest (neutronclient/osc/plugin.py:26-35): API_NAME = 'neutronclient', API_VERSION_OPTION = 'os_network_api_version', DEFAULT_API_VERSION = '2.0'. A comment there explains why API_NAME must not be network: OSC owns that name.
  3. Each plugin module's name becomes an attribute of the client manager, built lazily by make_client (openstackclient:openstackclient/common/clientmanager.py:251). This gives client_manager.neutronclient.
  4. The version comes from network_api_version in the cloud config, shared with OSC's own network commands (openstackclient:openstackclient/shell.py:101). The SDK default is "2" (openstacksdk:openstack/config/defaults.json:12), and --os-network-api-version overrides it (openstackclient:openstackclient/network/client.py:51).
  5. The command group is openstack.<api>.v<major> (openstackclient:openstackclient/shell.py:150), hence openstack.neutronclient.v2.
  6. Consequence [observed]: --os-network-api-version 3 logs neutronclient API version 3 is not in supported versions: 2, 2.0 and the group openstack.neutronclient.v3 does not exist, so network log list gives 'network log list' is not a … command, exit 2. The warning does not stop anything: only the absent group does.
  7. cliff skips an entry point whose module is in IGNORED_MODULES (cliff:cliff/commandmanager.py:135). None of the 34 entry points matches a listed module. No name collides with another group in the venv, so the duplicate warning at cliff:cliff/commandmanager.py:156 does not fire [observed by listing the entry points of the 8 plugins and OSC].

The two client stacks

CommandsAttributeClientLookup of a nameWhere
27 sfc *client_manager.networkopenstacksdk Proxyfind_sfc_*(name, ignore_missing=False): GET /x/{name}, then on 404 GET /x?name=neutronclient/osc/v2/sfc/sfc_port_chain.py:94, openstacksdk:openstack/resource.py:2492
7 network log *, network loggable resources list, network onboard subnetsclient_manager.neutronclientneutronclient.v2_0.client.Clientfind_resource: GET /x?id= only when the value looks like a UUID, then GET /x?name=neutronclient/osc/v2/logging/network_log.py:175, neutronclient/v2_0/client.py:476
network log create --projectclient_manager.identitypython-keystoneclientGET /projects/{name}, then GET /projects?name= [observed]; on 403 the name is used as the IDneutronclient/osc/utils.py:81-116

How the plugin builds the binding (neutronclient/osc/plugin.py:38-54): session, region_name and interface come from the client manager. insecure and ca_cert are passed and then ignored, because a session is given (neutronclient/client.py:410-417). There is no version and no service name, so the endpoint is the catalog URL of type network and the class appends /v2.0 (neutronclient/v2_0/client.py:260).

What the commands share

  • Output: command.ShowOne, command.Lister or command.Command from osc-lib. The 15 command.Command classes all return None (checked by AST), so none has the exit-code defect of OSC's federation protocol set.
  • Columns: the SFC commands display an SDK resource through get_osc_show_columns_for_sdk_resource (osc-lib:osc_lib/utils/__init__.py:821) with location and tenant_id hidden (neutronclient/osc/v2/sfc/sfc_port_chain.py:97). The log commands use column_util.get_columns on a dict (neutronclient/osc/v2/logging/network_log.py:153), so only keys in the response appear.
  • Multiple delete: all 6 delete commands loop, count failures, log each one, then raise N of M … failed to delete (neutronclient/osc/v2/logging/network_log.py:173-188, neutronclient/osc/v2/sfc/sfc_port_chain.py:119-133). A partial failure still deletes the others [observed].
  • Update with no option: SDK commands send no PUT, since the resource has no change (openstacksdk:openstack/resource.py:1921) and exit 0. network log set does send PUT {"log": {}} [observed].
  • Read-modify-write without a lock: appending to a port chain or a port pair group reads the current list, then writes the whole list (neutronclient/osc/v2/sfc/sfc_port_chain.py:241-250, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:209-213). A concurrent change is lost. No If-Match is sent [observed: only the listed requests appear].

2. Functional description by family

Network logs (network log create|delete|list|set|show, network loggable resources list)

Neutron's packet logging: record accepted or dropped traffic for a security group or firewall group, optionally limited to one port.

  • Actor: a project user, or an admin for another project with --project [inferred: the policy lives in Neutron].
  • create (neutronclient/osc/v2/logging/network_log.py:108):
    • --resource-type is required and lower-cased (neutronclient/osc/v2/logging/network_log.py:132). It has no choices on purpose: the list comes from network loggable resources list (comment at neutronclient/osc/v2/logging/network_log.py:125).
    • --resource is looked up through the method list_<type>s of the class. For firewall_group, the command uses fwaas_firewall_group, so GET /fwaas/firewall_groups?name= (neutronclient/osc/v2/logging/network_log.py:84-89) [observed]. That method survives in the class although the FWaaS commands left. Any other type without a method fails on the client, see 02 § 4.
    • --target is always a port (neutronclient/osc/v2/logging/network_log.py:93).
    • --event is upper-cased, then checked against ALL, ACCEPT, DROP. --enable and --disable are exclusive. Without them, enabled is not sent, and the help says the default is enabled, a server default [inferred].
  • list (neutronclient/osc/v2/logging/network_log.py:211): no filter is sent (TODO at neutronclient/osc/v2/logging/network_log.py:221). It builds the Summary column on the client (neutronclient/osc/v2/logging/network_log.py:224-244): Event: DROP,\nLogged: (security_group) <id> on (port) <id>. This requires the keys event, target_id, resource_type and resource_id.
  • set (neutronclient/osc/v2/logging/network_log.py:256): --name, --description, --enable, --disable. An empty string is dropped, see 02 § 4.
  • loggable resources list (neutronclient/osc/v2/logging/network_log.py:191): --long exists and changes nothing, since the only column is LIST_BOTH (neutronclient/osc/v2/logging/network_log.py:45).

Subnet onboarding (network onboard subnets)

Moves all the subnets of a network into a subnet pool (neutronclient/osc/v2/subnet_onboard/subnet_onboard.py:28).

  1. Lookup: first the subnet pool, then the network, through find_resource [observed]. A lookup failure is not wrapped and shows Unable to find subnetpool with name or id 'pool'.
  2. PUT /v2.0/subnetpools/{id}/onboard_network_subnets with {"network_id": "<id>"} (neutronclient/v2_0/client.py:2536).
  3. A failure of the PUT becomes Failed to onboard subnets for network 'net': m (neutronclient/osc/v2/subnet_onboard/subnet_onboard.py:50-55). On success the command prints nothing and ignores the response body.

SFC (service function chaining)

Steering traffic through a chain of network functions. The resources build on each other: a flow classifier selects traffic, a port pair is one function instance (ingress and egress port), a port pair group balances between pairs, a port chain is an ordered list of groups fed by classifiers, and a service graph links chains.

  • Flow classifier (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:79):
    • --ethertype defaults to IPv4 and is always sent (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:308) [observed].
    • --source-port and --destination-port accept a:b or a; a lone value gives min = max (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:332-346). The check happens after parsing, so the exit code is 1, not 2.
    • --logical-source-port and --logical-destination-port are looked up with find_port (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:314-321).
    • --l7-parameters is sent as a raw string, though its help says that no value is supported (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:328) [observed].
    • set only changes the name and description (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:294-302).
    • list builds a Summary column on the client, and needs l7_parameters to be iterable (neutronclient/osc/v2/sfc/sfc_flow_classifier.py:190-211).
  • Port pair (neutronclient/osc/v2/sfc/sfc_port_pair.py:53): --ingress and --egress are required port lookups. --service-function-parameters correlation=…,weight=…: the text None becomes JSON null, and weight stays a string on the wire (neutronclient/osc/v2/sfc/sfc_port_pair.py:241-251) [observed: "weight": "2"]. set only changes the name and description.
  • Port pair group (neutronclient/osc/v2/sfc/sfc_port_pair_group.py:53):
    • --port-pair can repeat; --enable-tap and --disable-tap map to tap_enabled.
    • --port-pair-group-parameters lb-fields=a&b becomes {"lb_fields": ["a", "b"]}; other keys pass unchanged (neutronclient/osc/v2/sfc/sfc_port_pair_group.py:291-299) [observed].
    • set --port-pair merges with the existing list and sorts it (neutronclient/osc/v2/sfc/sfc_port_pair_group.py:213); --no-port-pair starts from empty. unset computes a set difference, so the order is not stable (neutronclient/osc/v2/sfc/sfc_port_pair_group.py:280).
  • Port chain (neutronclient/osc/v2/sfc/sfc_port_chain.py:54):
    • --port-pair-group is required on create and its order is the chain's.
    • --chain-parameters correlation=…,symmetric=…: symmetric stays a string (neutronclient/osc/v2/sfc/sfc_port_chain.py:373-381) [observed: "symmetric": "true"].
    • set --port-pair-group appends to the existing list; with --no-port-pair-group it replaces it, and that option alone is refused (neutronclient/osc/v2/sfc/sfc_port_chain.py:227-250).
    • unset refuses to remove the last group, before any write (neutronclient/osc/v2/sfc/sfc_port_chain.py:340-343).
    • Each name is resolved more than once: sfc port chain set x --port-pair-group y --flow-classifier z sends 7 GET before the PUT [observed].
  • Service graph (neutronclient/osc/v2/sfc/sfc_service_graph.py:46): --branching-point SRC:DST1,DST2 can repeat and becomes {"port_chains": {"<src-id>": ["<dst-id>", …]}}. The client refuses a missing colon, a duplicate destination, an empty destination, a reused source, and some cycles (neutronclient/osc/v2/sfc/sfc_service_graph.py:210-272). set only changes the name and description.

3. The Python API used by the commands

MethodRequestUsed byDefined at
find_resource(resource, name_or_id, project_id, cmd_resource, parent_id, fields)GET …?id= if the value starts with a UUID, then GET …?name=6 commandsneutronclient/v2_0/client.py:476
create_network_log(body)POST /log/logsnetwork log createneutronclient/v2_0/client.py:2510
delete_network_log(id)DELETE /log/logs/{id}network log deleteneutronclient/v2_0/client.py:2514
list_network_logs()GET /log/logs, following logs_linksnetwork log list, lookupsneutronclient/v2_0/client.py:2518
show_network_log(id)GET /log/logs/{id}network log showneutronclient/v2_0/client.py:2523
update_network_log(id, body)PUT /log/logs/{id}network log setneutronclient/v2_0/client.py:2527
list_network_loggable_resources()GET /log/loggable-resourcesnetwork loggable resources listneutronclient/v2_0/client.py:2531
onboard_network_subnets(pool, body)PUT /subnetpools/{id}/onboard_network_subnetsnetwork onboard subnetsneutronclient/v2_0/client.py:2536
list_ports, list_networks, list_subnetpools, list_security_groups, list_fwaas_firewall_groupsGET on the collection, by find_resourcelookupsneutronclient/v2_0/client.py:815, neutronclient/v2_0/client.py:860, neutronclient/v2_0/client.py:905, neutronclient/v2_0/client.py:1064, neutronclient/v2_0/client.py:1741

The class holds SFC methods too (neutronclient/v2_0/client.py:530), but the SFC commands use the SDK, so those methods are not on the path of any command. The rest of the class is in the API surface.

No legacy CLI process exists. neutronclient/neutron/v2_0/ keeps the command classes (neutronclient/neutron/v2_0/__init__.py:321), and neutronclient/common/clientmanager.py:40 and neutronclient/neutron/client.py:27 keep its client factory. None has an entry point. neutronclient/common/extension.py:18 imports the base module, so importing the class also loads it [observed].

4. The 34 commands

Generated from the parser dump and the probes. "Rich" answers come from a stub with hand-written resources; arguments are synthetic.

network log create

Create a new network log. Class CreateNetworkLog, neutronclient/osc/v2/logging/network_log.py:108. Output: single. Client: identity, neutronclient. Unit vectors: 12. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
nameyesStoreName for the network log
--descriptionStoreDescription of the network log
--enableStoreTrue exclusive group 0Enable this log
--disableStoreTrue exclusive group 0Disable this log (default is enabled)
--projectStoreOwner's project (name or ID)
--project-domainStoreDomain the project belongs to (name or ID). This can be used in case collisions between project names exist.
--eventStore convert_to_uppercaseALL, ACCEPT, DROPAn event to store with log
--resource-typeyesStore convert_to_lowercaseNetwork log type(s). You can see supported type(s) with following command: $ openstack network loggable resources list
--resourceStoreName or ID of resource (security group or firewall group) that used for logging. You can control for logging target combination with --target option.
--targetStorePort (name or ID) for logging. You can control for logging target combination with --resource option.

Requests with the minimum arguments, rich stub [observed]: POST /network/v2.0/log/logs.

Body with all options [observed]: {"log": {"description": "x", "enabled": true, "event": "DROP", "name": "x", "resource_id": "11111111-2222-4333-8444-555555555555", "resource_type": "security_group", "target_id": "11111111-2222-4333-8444-555555555555"}}

network log delete

Delete network log(s). Class DeleteNetworkLog, neutronclient/osc/v2/logging/network_log.py:158. Output: none. Client: neutronclient. Unit vectors: 3. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
network_logyesStore nargs=+Network log(s) to delete (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/log/logs?name; DELETE /network/v2.0/log/logs/{id}.

network log list

List network logs. Class ListNetworkLog, neutronclient/osc/v2/logging/network_log.py:211. Output: list. Client: neutronclient. Unit vectors: 5. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/log/logs.

network log set

Set network log properties. Class SetNetworkLog, neutronclient/osc/v2/logging/network_log.py:256. Output: none. Client: identity, neutronclient. Unit vectors: 10. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
network_logyesStoreNetwork log to set (name or ID)
--descriptionStoreDescription of the network log
--enableStoreTrue exclusive group 0Enable this log
--disableStoreTrue exclusive group 0Disable this log (default is enabled)
--nameStoreName of the network log

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/log/logs?name; PUT /network/v2.0/log/logs/{id}.

Body with all options [observed]: {"log": {"description": "x", "enabled": true, "name": "x"}}

network log show

Display network log details. Class ShowNetworkLog, neutronclient/osc/v2/logging/network_log.py:286. Output: single. Client: neutronclient. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
network_logyesStoreNetwork log to show (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/log/logs?name; GET /network/v2.0/log/logs/{id}.

network loggable resources list

List supported loggable resources. Class ListLoggableResource, neutronclient/osc/v2/logging/network_log.py:191. Output: list. Client: neutronclient. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/log/loggable-resources.

network onboard subnets

Onboard network subnets into a subnet pool. Class NetworkOnboardSubnets, neutronclient/osc/v2/subnet_onboard/subnet_onboard.py:28. Output: none. Client: neutronclient. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
networkyesStoreOnboard all subnets associated with this network
subnetpoolyesStoreTarget subnet pool for onboarding subnets

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/subnetpools?name; GET /network/v2.0/networks?name; PUT /network/v2.0/subnetpools/{id}/onboard_network_subnets.

Body with all options [observed]: {"network_id": "11111111-2222-4333-8444-555555555555"}

sfc flow classifier create

Create a flow classifier. Class CreateSfcFlowClassifier, neutronclient/osc/v2/sfc/sfc_flow_classifier.py:79. Output: single. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
nameyesStoreName of the flow classifier
--descriptionStoreDescription for the flow classifier
--protocolStoreIP protocol name. Protocol name should be as per IANA standard.
--ethertypeStoreIPv4IPv4, IPv6L2 ethertype, default is IPv4
--source-portStoreSource protocol port (allowed range [1,65535]. Must be specified as a:b, where a=min-port and b=max-port) in the allowed range.
--destination-portStoreDestination protocol port (allowed range [1,65535]. Must be specified as a:b, where a=min-port and b=max-port) in the allowed range.
--source-ip-prefixStoreSource IP address in CIDR notation
--destination-ip-prefixStoreDestination IP address in CIDR notation
--logical-source-portStoreNeutron source port (name or ID)
--logical-destination-portStoreNeutron destination port (name or ID)
--l7-parametersStoreDictionary of L7 parameters. Currently, no value is supported for this option.

Requests with the minimum arguments, rich stub [observed]: POST /network/v2.0/sfc/flow_classifiers.

Body with all options [observed]: {"flow_classifier": {"description": "x", "destination_ip_prefix": "10.0.1.0/24", "destination_port_range_max": 3, "destination_port_range_min": 3, "ethertype": "IPv4", "logical_destination_port": "11111111-2222-4333-8444-555555555555", "logical_source_port": "11111111-2222-4333-8444-555555555555", "name": "x", "protocol": "tcp", "source_ip_prefix": "10.0.0.0/24", "source_port_range_max": 2, "source_port_range_min": 1}}

sfc flow classifier delete

Delete a given flow classifier. Class DeleteSfcFlowClassifier, neutronclient/osc/v2/sfc/sfc_flow_classifier.py:146. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
flow_classifieryesStore nargs=+Flow classifier(s) to delete (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/flow_classifiers/{name}; DELETE /network/v2.0/sfc/flow_classifiers/{id}.

sfc flow classifier list

List flow classifiers. Class ListSfcFlowClassifier, neutronclient/osc/v2/sfc/sfc_flow_classifier.py:178. Output: list. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/flow_classifiers.

sfc flow classifier set

Set flow classifier properties. Class SetSfcFlowClassifier, neutronclient/osc/v2/sfc/sfc_flow_classifier.py:237. Output: none. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
flow_classifieryesStoreFlow classifier to modify (name or ID)
--nameStoreName of the flow classifier
--descriptionStoreDescription for the flow classifier

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/flow_classifiers/{name}.

Body with all options [observed]: {"flow_classifier": {"description": "x", "name": "x"}}

sfc flow classifier show

Display flow classifier details. Class ShowSfcFlowClassifier, neutronclient/osc/v2/sfc/sfc_flow_classifier.py:271. Output: single. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
flow_classifieryesStoreFlow classifier to display (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/flow_classifiers/{name}; GET /network/v2.0/sfc/flow_classifiers/{id}.

sfc port chain create

Create a port chain. Class CreateSfcPortChain, neutronclient/osc/v2/sfc/sfc_port_chain.py:54. Output: single. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
nameyesStoreName of the port chain
--descriptionStoreDescription for the port chain
--flow-classifierAppend[]Add flow classifier (name or ID). This option can be repeated.
--chain-parametersMultiKeyValueDictionary of chain parameters. Supports correlation=(mpls|nsh) (default is mpls) and symmetric=(true|false).
--port-pair-groupyesAppendAdd port pair group (name or ID). This option can be repeated.

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pair_groups/{name}; POST /network/v2.0/sfc/port_chains.

Body with all options [observed]: {"port_chain": {"chain_parameters": {"correlation": "nsh", "symmetric": "true"}, "description": "x", "flow_classifiers": ["11111111-2222-4333-8444-555555555555"], "name": "x", "port_pair_groups": ["11111111-2222-4333-8444-555555555555"]}}

sfc port chain delete

Delete a given port chain. Class DeleteSfcPortChain, neutronclient/osc/v2/sfc/sfc_port_chain.py:103. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_chainyesStore nargs=+Port chain(s) to delete (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_chains/{name}; DELETE /network/v2.0/sfc/port_chains/{id}.

sfc port chain list

List port chains. Class ListSfcPortChain, neutronclient/osc/v2/sfc/sfc_port_chain.py:136. Output: list. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_chains.

sfc port chain set

Set port chain properties. Class SetSfcPortChain, neutronclient/osc/v2/sfc/sfc_port_chain.py:159. Output: none. Client: openstacksdk. Unit vectors: 6. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_chainyesStorePort chain to modify (name or ID)
--nameStoreName of the port chain
--descriptionStoreDescription for the port chain
--flow-classifierAppendAdd flow classifier (name or ID). This option can be repeated.
--no-flow-classifierStoreTrueRemove associated flow classifiers from the port chain
--port-pair-groupAppendAdd port pair group (name or ID). Current port pair groups order is kept, the added port pair group will be placed at the end of the port chain. This option can be repeat
--no-port-pair-groupStoreTrueRemove associated port pair groups from the port chain. At least one --port-pair-group must be specified together.

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_chains/{name}.

Body with all options [observed]: {"port_chain": {"description": "x", "flow_classifiers": ["11111111-2222-4333-8444-555555555555"], "name": "x", "port_pair_groups": ["11111111-2222-4333-8444-555555555555"]}}

sfc port chain show

Display port chain details. Class ShowSfcPortChain, neutronclient/osc/v2/sfc/sfc_port_chain.py:259. Output: single. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_chainyesStorePort chain to display (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_chains/{name}; GET /network/v2.0/sfc/port_chains/{id}.

sfc port chain unset

Unset port chain properties. Class UnsetSfcPortChain, neutronclient/osc/v2/sfc/sfc_port_chain.py:282. Output: none. Client: openstacksdk. Unit vectors: 3. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_chainyesStorePort chain to unset (name or ID)
--flow-classifierAppend exclusive group 0Remove flow classifier(s) from the port chain (name or ID). This option can be repeated.
--all-flow-classifierStoreTrue exclusive group 0Remove all flow classifiers from the port chain
--port-pair-groupAppendRemove port pair group(s) from the port chain (name or ID). This option can be repeated.

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_chains/{name}.

Body with all options [observed]: {"port_chain": {"flow_classifiers": [], "port_pair_groups": ["11111111-2222-4333-8444-555555555555"]}}

sfc port pair create

Create a port pair. Class CreateSfcPortPair, neutronclient/osc/v2/sfc/sfc_port_pair.py:53. Output: single. Client: openstacksdk. Unit vectors: 3. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
nameyesStoreName of the port pair
--descriptionStoreDescription for the port pair
--service-function-parametersMultiKeyValueDictionary of service function parameters. Currently, correlation=(None|mpls|nsh) and weight are supported. Weight is an integer that influences the selection of a port
--ingressyesStoreIngress neutron port (name or ID)
--egressyesStoreEgress neutron port (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/ports/{name}; GET /network/v2.0/ports/{name}; POST /network/v2.0/sfc/port_pairs.

Body with all options [observed]: {"port_pair": {"description": "x", "egress": "11111111-2222-4333-8444-555555555555", "ingress": "11111111-2222-4333-8444-555555555555", "name": "x", "service_function_parameters": {"correlation": "nsh", "weight": "2"}}}

sfc port pair delete

Delete a given port pair. Class DeleteSfcPortPair, neutronclient/osc/v2/sfc/sfc_port_pair.py:99. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pairyesStore nargs=+Port pair(s) to delete (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pairs/{name}; DELETE /network/v2.0/sfc/port_pairs/{id}.

sfc port pair group create

Create a port pair group. Class CreateSfcPortPairGroup, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:53. Output: single. Client: openstacksdk. Unit vectors: 3. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
nameyesStoreName of the port pair group
--descriptionStoreDescription for the port pair group
--port-pairAppend[]Port pair (name or ID). This option can be repeated.
--enable-tapStoreTrue exclusive group 0Port pairs of this port pair group are deployed as passive tap service function
--disable-tapStoreTrue exclusive group 0Port pairs of this port pair group are deployed as l3 service function (default)
--port-pair-group-parametersKeyValueDictionary of port pair group parameters. Currently only one parameter lb-fields is supported. <lb-fields> is a & separated list of load-balancing fields.

Requests with the minimum arguments, rich stub [observed]: POST /network/v2.0/sfc/port_pair_groups.

Body with all options [observed]: {"port_pair_group": {"description": "x", "name": "x", "port_pair_group_parameters": {"lb_fields": ["ip_src", "ip_dst"]}, "port_pairs": ["11111111-2222-4333-8444-555555555555"], "tap_enabled": true}}

sfc port pair group delete

Delete a given port pair group. Class DeleteSfcPortPairGroup, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:107. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pair_groupyesStore nargs=+Port pair group(s) to delete (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pair_groups/{name}; DELETE /network/v2.0/sfc/port_pair_groups/{id}.

sfc port pair group list

List port pair group. Class ListSfcPortPairGroup, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:140. Output: list. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pair_groups.

sfc port pair group set

Set port pair group properties. Class SetSfcPortPairGroup, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:164. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pair_groupyesStorePort pair group to modify (name or ID)
--nameStoreName of the port pair group
--descriptionStoreDescription for the port pair group
--port-pairAppend[]Port pair (name or ID). This option can be repeated.
--no-port-pairStoreTrueRemove all port pair from port pair group

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pair_groups/{name}.

Body with all options [observed]: {"port_pair_group": {"description": "x", "name": "x", "port_pairs": ["11111111-2222-4333-8444-555555555555"]}}

sfc port pair group show

Display port pair group details. Class ShowSfcPortPairGroup, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:222. Output: single. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pair_groupyesStorePort pair group to display (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pair_groups/{name}; GET /network/v2.0/sfc/port_pair_groups/{id}.

sfc port pair group unset

Unset port pairs from port pair group. Class UnsetSfcPortPairGroup, neutronclient/osc/v2/sfc/sfc_port_pair_group.py:245. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pair_groupyesStorePort pair group to unset (name or ID)
--port-pairAppend exclusive group 0Remove port pair(s) from the port pair group (name or ID). This option can be repeated.
--all-port-pairStoreTrue exclusive group 0Remove all port pairs from the port pair group

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pair_groups/{name}.

Body with all options [observed]: {"port_pair_group": {"port_pairs": []}}

sfc port pair list

List port pairs. Class ListSfcPortPair, neutronclient/osc/v2/sfc/sfc_port_pair.py:133. Output: list. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pairs.

sfc port pair set

Set port pair properties. Class SetSfcPortPair, neutronclient/osc/v2/sfc/sfc_port_pair.py:156. Output: none. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pairyesStorePort pair to modify (name or ID)
--nameStoreName of the port pair
--descriptionStoreDescription for the port pair

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pairs/{name}.

Body with all options [observed]: {"port_pair": {"description": "x", "name": "x"}}

sfc port pair show

Display port pair details. Class ShowSfcPortPair, neutronclient/osc/v2/sfc/sfc_port_pair.py:191. Output: single. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
port_pairyesStorePort pair to display (name or ID)

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_pairs/{name}; GET /network/v2.0/sfc/port_pairs/{id}.

sfc service graph create

Create a service graph. Class CreateSfcServiceGraph, neutronclient/osc/v2/sfc/sfc_service_graph.py:46. Output: single. Client: openstacksdk. Unit vectors: 5. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
nameyesStoreName of the service graph.
--descriptionStoreDescription for the service graph.
--branching-pointyesAppend[]Service graph branching point: the key is the source Port Chain while the value is a list of destination Port Chains. This option can be repeated.

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/port_chains/{name}; GET /network/v2.0/sfc/port_chains/{name}; POST /network/v2.0/sfc/service_graphs.

Body with all options [observed]: {"service_graph": {"description": "x", "name": "x", "port_chains": {"11111111-2222-4333-8444-555555555555": ["9c96e6ac-51f4-5ad3-add1-5f6deffde30f"]}}}

sfc service graph delete

Delete a given service graph. Class DeleteSfcServiceGraph, neutronclient/osc/v2/sfc/sfc_service_graph.py:119. Output: none. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
service_graphyesStore nargs=+ID or name of the service graph(s) to delete.

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/service_graphs/{name}; DELETE /network/v2.0/sfc/service_graphs/{id}.

sfc service graph list

List service graphs. Class ListSfcServiceGraph, neutronclient/osc/v2/sfc/sfc_service_graph.py:153. Output: list. Client: openstacksdk. Unit vectors: 2. Exit on the stub: 404 mode 1, {} mode 1, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
--longStoreTrueList additional fields in output

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/service_graphs.

sfc service graph set

Set service graph properties. Class SetSfcServiceGraph, neutronclient/osc/v2/sfc/sfc_service_graph.py:84. Output: none. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
service_graphyesStoreService graph to modify (name or ID)
--nameStoreName of the service graph
--descriptionStoreDescription for the service graph

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/service_graphs/{name}.

Body with all options [observed]: {"service_graph": {"description": "x", "name": "x"}}

sfc service graph show

Show information of a given service graph. Class ShowSfcServiceGraph, neutronclient/osc/v2/sfc/sfc_service_graph.py:176. Output: single. Client: openstacksdk. Unit vectors: 1. Exit on the stub: 404 mode 1, {} mode 0, rich mode 0, all options 0 [observed].

ArgumentRequiredKindDefaultChoicesHelp
service_graphyesStoreID or name of the service graph to display.

Requests with the minimum arguments, rich stub [observed]: GET /network/v2.0/sfc/service_graphs/{name}; GET /network/v2.0/sfc/service_graphs/{id}.

Source: reverse-spec-python-neutronclient/01-cli-commands_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.