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

Reverse-spec · Clients

python-ironicclient — Cli commands

CLI commands — python-ironicclient — branch stable/2026.2

Branch stable/2026.2 @ af2ceeb9c4f2 — repository https://opendev.org/openstack/python-ironicclient — analysed on 2026-11-01

python-ironicclient exposes no API of its own. It is a **plugin of the openstack command line**, plus a separate baremetal shell. Both turn commands into calls to the Ironic REST API. Its contract with the outside world is the requests it sends: see interactions and the client contract.

[observed] means seen against a local stub, which is not Ironic.

1. Shared mechanics

Plugin and command loading

  • Plugin: openstack.cli.extension = baremetal (pyproject.toml:45, ironicclient/osc/plugin.py:17), loaded by openstackclient:openstackclient/common/clientmanager.py:279. Commands are in openstack.baremetal.v1 (pyproject.toml:47), one entry per command.
  • Base classes: ironicclient/osc/command.py:49 only adds typing to the osc-lib and cliff classes. Output type follows from the class: Lister (24 commands), ShowOne (28), Command with no table (66).
  • Client construction: ironicclient/osc/plugin.py:53 builds one ironicclient.v1.client.Client per process, on first use. It takes the session from osc-lib and resolves the endpoint at once from the catalog, with baremetal_endpoint_override taking priority (osc-lib:osc_lib/clientmanager.py:285). The client does not read the version documents of the service. It passes no max_retries, so the defaults apply (ironicclient/common/http.py:57).

API version selection

The option is --os-baremetal-api-version (env OS_BAREMETAL_API_VERSION), ironicclient/osc/plugin.py:103. Values are 1, 1.1 to 1.115, latest.

ValueHeader sent firstOn a 406Source
none, latest, 11.115negotiate down, then retry [observed]ironicclient/osc/plugin.py:69, ironicclient/v1/client.py:78
1.N1.NRequested API version 1.N is not supported…, exit 1 [observed]ironicclient/osc/plugin.py:155, ironicclient/common/http.py:222
out of range, by optionnoneargparse error, exit 2 [observed]ironicclient/osc/plugin.py:107
out of range, by envnoneInvalid baremetal client version '1.999', exit 1 [observed]osc-lib:osc_lib/utils/__init__.py:467

Negotiation itself is in 03 § 3.

Client-side checks

  • Version gates: nearly all version checks are the server's. The exceptions are runbooks, at 1.112: --description on create, set and unset (ironicclient/osc/v1/baremetal_runbook.py:119, ironicclient/osc/v1/baremetal_runbook.py:256, ironicclient/osc/v1/baremetal_runbook.py:359) and the 4 trait operations (ironicclient/v1/runbook.py:174, ironicclient/v1/runbook.py:206, ironicclient/v1/runbook.py:240, ironicclient/v1/runbook.py:270). check_api_version_support compares with the version the client is set to, not with the server's (ironicclient/common/utils.py:522), and accepts an unparsable version.
  • List arguments: a negative --limit is refused before any request, for example ironicclient/osc/v1/baremetal_node.py:958 [observed]. --fields choices come from the *_DETAILED_RESOURCE tables of ironicclient/v1/resource_fields.py:269.
  • Exclusive arguments: --clean-steps or --runbook is required on clean (ironicclient/osc/v1/baremetal_node.py:338). --runbook with --disable-ramdisk is refused at ironicclient/osc/v1/baremetal_node.py:117 [observed].

Value conversion

  • **key=value in create and in --extra-style options**: split on the first =, and the value is parsed as JSON if possible (ironicclient/common/utils.py:52), so --extra a=1 gives a number.
  • **set and unset send a JSON Patch**: args_array_to_patch builds add or remove operations (ironicclient/common/utils.py:108). set uses add, never replace. Each value goes through the same JSON parsing, so --name 123 sends a number [observed].
  • JSON arguments (--steps, --deploy-steps, --network-data, and so on) accept a JSON string, a YAML or JSON file, or - for stdin (ironicclient/common/utils.py:449). A file is checked first (ironicclient/common/utils.py:403).

Several resources in one command

BehaviourCommandsSource
continue, print each success, report all failures at the end, exit 1 [observed]every delete, trait add and removeironicclient/osc/v1/baremetal_node.py:719
stop at the first failure; earlier resources stay changed [observed]provision states, power, boot device, boot mode, secure boot, console, maintenance, inject NMI, node set, node unsetironicclient/osc/v1/baremetal_node.py:122, ironicclient/osc/v1/baremetal_node.py:1208

Lists

--limit absent: one request, next is ignored. --limit 0: follow next to the end. --limit N: send limit=N, follow next until N items are there (ironicclient/common/base.py:189) [observed]. --marker is passed through. --sort is applied by the client, on the page received (ironicclient/osc/v1/baremetal_node.py:994). --long asks for detail, --fields for a subset; they exclude each other in the parser and in the manager (ironicclient/v1/node.py:1453).

2. Functional description by resource

Nodes (baremetal node, 51 commands)

A node is one physical server managed by Ironic. Commands fall into groups:

  • Registration: create needs --driver. It sends a POST /v1/nodes holding only the options given (ironicclient/osc/v1/baremetal_node.py:668), and hides links, ports, portgroups, states and volume from the result (ironicclient/osc/v1/baremetal_node.py:686). delete unregisters.
  • Read: list has 27 filter and display options, translated at ironicclient/v1/node.py:1457. show --instance looks a node up by Nova instance, through GET /v1/nodes/detail?instance_uuid=, and reports Not Found unless exactly one node matches (ironicclient/v1/node.py:363) [observed]. validate shows the result per driver interface (ironicclient/osc/v1/baremetal_node.py:2126).
  • Provision state: 13 commands send PUT /v1/nodes/{id}/states/provision with a target (ironicclient/v1/node.py:785). The command name and the target often differ: | Command | Target | --wait expects | Poll interval | Extra | |---|---|---|---|---| | manage | manage | manageable | 2 s | | | provide | provide | available | 10 s | | | inspect | inspect | manageable | 2 s | | | deploy | active | active | 10 s | --config-drive, --deploy-steps | | undeploy | deleted | available | 10 s | | | rebuild | rebuild | active | 10 s | --config-drive, --deploy-steps | | clean | clean | manageable | 10 s | --clean-steps or --runbook; --disable-ramdisk | | service | service | active | 10 s | --service-steps or --runbook; --disable-ramdisk | | rescue | rescue | rescue | 10 s | --rescue-password required | | unrescue | unrescue | active | 10 s | | | adopt | adopt | active | 2 s | | | abort | abort | no --wait | | | | unhold | unhold | no --wait | | | Sources: ironicclient/v1/utils.py:27, ironicclient/osc/v1/baremetal_node.py:61. These calls only start the action: the response comes before the end of it. --wait is client-side polling, see 05. The response code and the node states come from Ironic; see reverse-spec-ironic/.
  • Config drive (ironicclient/v1/node.py:787): a JSON object is sent as is. A file is read, and sent as JSON if it holds JSON, otherwise as text. A directory is made into an ISO by a local binary (ironicclient/common/utils.py:261). Any other string fails, despite the help.
  • Power and boot: power on, power off [--soft], reboot [--soft] with --power-timeout (ironicclient/v1/node.py:572); soft maps to soft power off and soft rebooting [observed]. boot device set|show, boot mode set, secure boot on|off, inject nmi, console enable|disable|show, maintenance set|unset.
  • Attributes: set and unset cover the fields of ironicclient/osc/v1/baremetal_node.py:1689, interfaces, properties, extra, driver_info, instance_info and network_data. --target-raid-config uses its own PUT .../states/raid, sent first, because the node may be renamed in the same command (ironicclient/osc/v1/baremetal_node.py:1678). --reset-interfaces needs --driver and goes as a query parameter (ironicclient/v1/node.py:390). No value given: a warning Please specify what to set., exit 0 (ironicclient/osc/v1/baremetal_node.py:1748).
  • Traits: trait add|list|remove. add trait and remove trait are older names of the same classes, kept for compatibility (pyproject.toml:74). remove --all is one DELETE .../traits.
  • VIFs: vif attach|detach|list, with free --vif-info key=value entries; id is reserved (ironicclient/v1/node.py:494).
  • Inventory data: bios setting list|show, firmware list, history list|get, inventory save, children list. inventory save prints JSON on stdout, or writes --file (ironicclient/osc/v1/baremetal_node.py:2604).
  • Vendor passthru: passthru list, passthru call with --http-method and --arg. The answer is printed raw (ironicclient/osc/v1/baremetal_node.py:1130).

Ports, port groups, volume connectors and targets

The NICs and storage links of a node. CRUD on /v1/ports, /v1/portgroups, /v1/volume/connectors, /v1/volume/targets. port show --address and port group show --address look up through a filtered list and need exactly one match (ironicclient/v1/port.py:76, ironicclient/v1/portgroup.py:105). volume target create refuses a negative --boot-index (ironicclient/osc/v1/baremetal_volume_target.py:99).

Allocations

Ask Ironic to pick a node: allocation create needs --resource-class, or --node for a backfill (ironicclient/osc/v1/baremetal_allocation.py:103). --wait polls every second (ironicclient/v1/allocation.py:89). Failure shows last_error.

Chassis, conductors, shards, drivers

  • chassis: plain CRUD on /v1/chassis.
  • conductor list|show, shard list: read only.
  • driver list always sends detail= (ironicclient/osc/v1/baremetal_driver.py:74). driver show hides links and properties. driver property list, driver raid property list, driver passthru list|call.

Deploy templates, runbooks, inspection rules

  • deploy template: CRUD on /v1/deploy_templates, --steps required on create.
  • runbook: CRUD on /v1/runbooks plus trait add|list|remove. --public and --disable-ramdisk take an explicit boolean string (ironicclient/common/utils.py:324).
  • inspection rule: CRUD on /v1/inspection_rules, --actions required, --conditions optional, JSON values. See the defects in 02 § 5. No unit test covers these 6 commands.

Bulk creation (baremetal create)

Reads .yaml or .json files that may nest chassis → nodes → portgroups → ports (ironicclient/v1/create_resources.py:26). It first validates all files against a small JSON schema, and creates nothing if one fails (ironicclient/v1/create_resources.py:69). It then creates each resource in turn, skips the children of a failed parent, and reports all errors at the end (ironicclient/v1/create_resources.py:80). Nothing is rolled back. traits on a node goes through a separate PUT (ironicclient/v1/create_resources.py:184).

3. The baremetal shell

ironicclient/shell.py:108 is a cliff App with the same entry points and with the baremetal prefix removed from the names (ironicclient/shell.py:95). Differences from the plugin:

Topicopenstack baremetalbaremetalSource
Default authKeystone password flownoneironicclient/shell.py:33
Endpointcatalog or override--os-endpoint [observed], clouds.yaml, catalogironicclient/shell.py:78
Default version1.115 with downgradesame [observed]ironicclient/shell.py:67
--os-baremetal-api-version 1.Nchecked against a listnot checked by the parserironicclient/shell.py:130
latestreplaced by 1.115, first request has no GET /v1passed through: negotiates first, GET /v1 then the request [observed]ironicclient/common/http.py:436
Retriesfixed at 5 and 2 s--max-retries, --retry-interval [observed with 0]ironicclient/shell.py:138

With no endpoint and no credentials: The Bare Metal API endpoint cannot be detected…, exit 1 [observed].

4. Python API

Both shells use it, and other tools can too (ironicclient/client.py:30, ironicclient/client.py:132).

  • get_client('1', endpoint=…, token=…) picks the auth type: admin_token or none with an endpoint, token with a token and URL, otherwise password (ironicclient/client.py:74). It does not read clouds.yaml (ironicclient/client.py:88).
  • Client holds one manager per resource (ironicclient/v1/client.py:105).
  • Each manager method takes os_ironic_api_version and global_request_id, for one request (ironicclient/common/base.py:223).
  • Passing no version uses the cache, or 1.9 (ironicclient/common/http.py:44, ironicclient/v1/client.py:82). This is the only path that reads the cache, and the default differs a lot from the 1.115 of the shells.
  • Methods without a command, from _rewrite/python-api-probe_stable-2026.2.json: chassis.list_nodes, driver.update, driver.delete, events.create, node.list_ports, node.list_volume_connectors, node.list_volume_targets, node.states, portgroup.list_ports. driver.update and driver.delete target routes that Ironic's reverse-spec does not list, and that were not found in its driver controller [inferred].
  • wait_for_provision_state and allocation.wait are usable directly, with a custom poll_delay_function.

5. Which request each option produces

_rewrite/wire-options_stable-2026.2.json has one run per optional argument: 397 runs against the {} stub. options_on_wire in _rewrite/client-contract_stable-2026.2.json is the short form: route, query parameters, body keys or patch paths. Example, --chassis on node list becomes the query parameter chassis_uuid, and --port-group on port create becomes the body key portgroup_uuid.

6. All commands

Generated from _rewrite/client-contract_stable-2026.2.json. "Requests observed" joins the runs against the 404 and {} stubs with synthetic arguments, and reflects the client only. A few commands need one option to send anything; it is added by the EXTRA table of _rewrite/probe_plugin_stable-2026.2.py. {id} stands for any name or UUID.

(top level) (1)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal createCreate resources from filesironicclient/osc/v1/baremetal_create.py:23none1 (1)2POST /v1/chassis

allocation (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal allocation createCreate a new baremetal allocation.ironicclient/osc/v1/baremetal_allocation.py:31single9 (0)8POST /v1/allocations
baremetal allocation deleteUnregister baremetal allocation(s).ironicclient/osc/v1/baremetal_allocation.py:274none1 (1)3DELETE /v1/allocations/{id}
baremetal allocation listList baremetal allocations.ironicclient/osc/v1/baremetal_allocation.py:169list9 (0)9GET /v1/allocations
baremetal allocation setSet baremetal allocation properties.ironicclient/osc/v1/baremetal_allocation.py:311none3 (1)3PATCH /v1/allocations/{id}
baremetal allocation showShow baremetal allocation details.ironicclient/osc/v1/baremetal_allocation.py:125single2 (1)2GET /v1/allocations/{id}
baremetal allocation unsetUnset baremetal allocation properties.ironicclient/osc/v1/baremetal_allocation.py:361none3 (1)5PATCH /v1/allocations/{id}

chassis (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal chassis createCreate a new chassis.ironicclient/osc/v1/baremetal_chassis.py:34single3 (0)4POST /v1/chassis
baremetal chassis deleteDelete a chassis.ironicclient/osc/v1/baremetal_chassis.py:85none1 (1)3DELETE /v1/chassis/{id}
baremetal chassis listList the chassis.ironicclient/osc/v1/baremetal_chassis.py:123list5 (0)6GET /v1/chassis
baremetal chassis setSet chassis properties.ironicclient/osc/v1/baremetal_chassis.py:211none3 (1)4PATCH /v1/chassis/{id}
baremetal chassis showShow chassis details.ironicclient/osc/v1/baremetal_chassis.py:261single2 (1)5GET /v1/chassis/{id}
baremetal chassis unsetUnset chassis properties.ironicclient/osc/v1/baremetal_chassis.py:307none3 (1)4PATCH /v1/chassis/{id}

conductor (2)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal conductor listList baremetal conductorsironicclient/osc/v1/baremetal_conductor.py:34list5 (0)5GET /v1/conductors
baremetal conductor showShow baremetal conductor detailsironicclient/osc/v1/baremetal_conductor.py:120single2 (1)5GET /v1/conductors/{id}

deploy template (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal deploy template createCreate a new deploy templateironicclient/osc/v1/baremetal_deploy_template.py:40single4 (2)4POST /v1/deploy_templates
baremetal deploy template deleteDelete deploy template(s).ironicclient/osc/v1/baremetal_deploy_template.py:246none1 (1)4DELETE /v1/deploy_templates/{id}
baremetal deploy template listList baremetal deploy templates.ironicclient/osc/v1/baremetal_deploy_template.py:284list5 (0)5GET /v1/deploy_templates
baremetal deploy template setSet baremetal deploy template properties.ironicclient/osc/v1/baremetal_deploy_template.py:143none4 (1)3PATCH /v1/deploy_templates/{id}
baremetal deploy template showShow baremetal deploy template details.ironicclient/osc/v1/baremetal_deploy_template.py:97single2 (1)2GET /v1/deploy_templates/{id}
baremetal deploy template unsetUnset baremetal deploy template properties.ironicclient/osc/v1/baremetal_deploy_template.py:203none2 (1)4PATCH /v1/deploy_templates/{id}

driver (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal driver listList the enabled drivers.ironicclient/osc/v1/baremetal_driver.py:32list3 (0)7GET /v1/drivers
baremetal driver passthru callCall a vendor passthru method for a driver.ironicclient/osc/v1/baremetal_driver.py:156single4 (2)3POST /v1/drivers/{id}/vendor_passthru/{id}
baremetal driver passthru listList available vendor passthru methods for a driver.ironicclient/osc/v1/baremetal_driver.py:211list1 (1)2GET /v1/drivers/{id}/vendor_passthru/methods
baremetal driver property listList the driver properties.ironicclient/osc/v1/baremetal_driver.py:100list1 (1)2GET /v1/drivers/{id}/properties
baremetal driver raid property listList a driver's RAID logical disk properties.ironicclient/osc/v1/baremetal_driver.py:128list1 (1)2GET /v1/drivers/{id}/raid/logical_disk_properties
baremetal driver showShow information about a driver.ironicclient/osc/v1/baremetal_driver.py:249single2 (1)5GET /v1/drivers/{id}

inspection rule (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal inspection rule createCreate a new ruleironicclient/osc/v1/baremetal_inspection_rule.py:32single7 (1)0POST /v1/inspection_rules
baremetal inspection rule deleteDelete rule(s).ironicclient/osc/v1/baremetal_inspection_rule.py:304none1 (1)0DELETE /v1/inspection_rules/{id}
baremetal inspection rule listList baremetal rules.ironicclient/osc/v1/baremetal_inspection_rule.py:350list5 (0)0GET /v1/inspection_rules
baremetal inspection rule setSet baremetal rule properties.ironicclient/osc/v1/baremetal_inspection_rule.py:151none6 (1)0PATCH /v1/inspection_rules/{id}
baremetal inspection rule showShow baremetal rule details.ironicclient/osc/v1/baremetal_inspection_rule.py:105single2 (1)0GET /v1/inspection_rules/{id}
baremetal inspection rule unsetUnset baremetal rule properties.ironicclient/osc/v1/baremetal_inspection_rule.py:227none6 (1)0PATCH /v1/inspection_rules/{id}

node (51)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal node abortSet provision state of baremetal node to 'abort'ironicclient/osc/v1/baremetal_node.py:196none2 (1)1PUT /v1/nodes/{id}/states/provision
baremetal node add traitAdd traits to a node.ironicclient/osc/v1/baremetal_node.py:2309none2 (2)4PUT /v1/nodes/{id}/traits/{id}
baremetal node adoptSet provision state of baremetal node to 'adopt'ironicclient/osc/v1/baremetal_node.py:204none3 (1)3PUT /v1/nodes/{id}/states/provision
baremetal node bios setting listList a node's BIOS settings.ironicclient/osc/v1/baremetal_node.py:2400list3 (1)3GET /v1/nodes/{id}/bios
baremetal node bios setting showShow a specific BIOS setting for a node.ironicclient/osc/v1/baremetal_node.py:2464single2 (2)1GET /v1/nodes/{id}/bios/{id}
baremetal node boot device setSet the boot device for a nodeironicclient/osc/v1/baremetal_node.py:212none3 (2)4PUT /v1/nodes/{id}/management/boot_device
baremetal node boot device showShow the boot device information for a nodeironicclient/osc/v1/baremetal_node.py:252single2 (1)2GET /v1/nodes/{id}/management/boot_device
baremetal node boot mode setSet the boot mode for the next baremetal node deploymentironicclient/osc/v1/baremetal_node.py:295none2 (2)1PUT /v1/nodes/{id}/states/boot_mode
baremetal node children listGet a list of nodes associated as children.ironicclient/osc/v1/baremetal_node.py:2611single1 (1)1GET /v1/nodes/{id}/children
baremetal node cleanSet provision state of baremetal node to 'clean'ironicclient/osc/v1/baremetal_node.py:328none6 (1)9PUT /v1/nodes/{id}/states/provision
baremetal node console disableDisable console access for a nodeironicclient/osc/v1/baremetal_node.py:400none1 (1)1PUT /v1/nodes/{id}/states/console
baremetal node console enableEnable console access for a nodeironicclient/osc/v1/baremetal_node.py:426none1 (1)1PUT /v1/nodes/{id}/states/console
baremetal node console showShow console information for a nodeironicclient/osc/v1/baremetal_node.py:452single1 (1)1GET /v1/nodes/{id}/states/console
baremetal node createRegister a new node with the baremetal serviceironicclient/osc/v1/baremetal_node.py:482single32 (1)33POST /v1/nodes
baremetal node deleteUnregister baremetal node(s)ironicclient/osc/v1/baremetal_node.py:697none1 (1)3DELETE /v1/nodes/{id}
baremetal node deploySet provision state of baremetal node to 'deploy'ironicclient/osc/v1/baremetal_node.py:732none5 (1)7PUT /v1/nodes/{id}/states/provision
baremetal node firmware listList all Firmware Components of a nodeironicclient/osc/v1/baremetal_node.py:2646list1 (1)1GET /v1/nodes/{id}/firmware
baremetal node history getGet history event for a baremetal node.ironicclient/osc/v1/baremetal_node.py:2540single2 (2)1GET /v1/nodes/{id}/history/{id}
baremetal node history listGet history events for a baremetal node.ironicclient/osc/v1/baremetal_node.py:2499list2 (1)1GET /v1/nodes/{id}/history
baremetal node inject nmiInject NMI to baremetal nodeironicclient/osc/v1/baremetal_node.py:2252none1 (1)2PUT /v1/nodes/{id}/management/inject_nmi
baremetal node inspectSet provision state of baremetal node to 'inspect'ironicclient/osc/v1/baremetal_node.py:763none3 (1)4PUT /v1/nodes/{id}/states/provision
baremetal node inventory saveGet hardware inventory of a node (in JSON format) or save it to file.ironicclient/osc/v1/baremetal_node.py:2579none2 (1)1GET /v1/nodes/{id}/inventory
baremetal node listList baremetal nodesironicclient/osc/v1/baremetal_node.py:771list27 (0)32GET /v1/nodes
baremetal node maintenance setSet baremetal node to maintenance modeironicclient/osc/v1/baremetal_node.py:1001none2 (1)3PUT /v1/nodes/{id}/maintenance
baremetal node maintenance unsetUnset baremetal node from maintenance modeironicclient/osc/v1/baremetal_node.py:1035none1 (1)2DELETE /v1/nodes/{id}/maintenance
baremetal node manageSet provision state of baremetal node to 'manage'ironicclient/osc/v1/baremetal_node.py:1062none3 (1)4PUT /v1/nodes/{id}/states/provision
baremetal node passthru callCall a vendor passthru method for a nodeironicclient/osc/v1/baremetal_node.py:1078none4 (2)3POST /v1/nodes/{id}/vendor_passthru/{id}
baremetal node passthru listList vendor passthru methods for a nodeironicclient/osc/v1/baremetal_node.py:1133list1 (1)1GET /v1/nodes/{id}/vendor_passthru/methods
baremetal node power offPower off a nodeironicclient/osc/v1/baremetal_node.py:1214none3 (1)6PUT /v1/nodes/{id}/states/power
baremetal node power onPower on a nodeironicclient/osc/v1/baremetal_node.py:1234none2 (1)3PUT /v1/nodes/{id}/states/power
baremetal node provideSet provision state of baremetal node to 'provide'ironicclient/osc/v1/baremetal_node.py:1242none3 (1)4PUT /v1/nodes/{id}/states/provision
baremetal node rebootReboot baremetal nodeironicclient/osc/v1/baremetal_node.py:1250none3 (1)5PUT /v1/nodes/{id}/states/power
baremetal node rebuildSet provision state of baremetal node to 'rebuild'ironicclient/osc/v1/baremetal_node.py:1295none5 (1)5PUT /v1/nodes/{id}/states/provision
baremetal node remove traitRemove trait(s) from a node.ironicclient/osc/v1/baremetal_node.py:2349none3 (1)6DELETE /v1/nodes/{id}/traits
baremetal node rescueSet provision state of baremetal node to 'rescue'ironicclient/osc/v1/baremetal_node.py:1326none4 (2)4PUT /v1/nodes/{id}/states/provision
baremetal node secure boot offTurn secure boot offironicclient/osc/v1/baremetal_node.py:1373none1 (1)1PUT /v1/nodes/{id}/states/secure_boot
baremetal node secure boot onTurn secure boot onironicclient/osc/v1/baremetal_node.py:1347none1 (1)1PUT /v1/nodes/{id}/states/secure_boot
baremetal node serviceSet provision state of baremetal node to 'service'ironicclient/osc/v1/baremetal_node.py:364none6 (1)8PUT /v1/nodes/{id}/states/provision
baremetal node setSet baremetal propertiesironicclient/osc/v1/baremetal_node.py:1399none54 (1)59PATCH /v1/nodes/{id}
baremetal node showShow baremetal node detailsironicclient/osc/v1/baremetal_node.py:1751single3 (1)6GET /v1/nodes/{id}
baremetal node trait addAdd traits to a node.ironicclient/osc/v1/baremetal_node.py:2309none2 (2)4PUT /v1/nodes/{id}/traits/{id}
baremetal node trait listList a node's traits.ironicclient/osc/v1/baremetal_node.py:2279list1 (1)1GET /v1/nodes/{id}/traits
baremetal node trait removeRemove trait(s) from a node.ironicclient/osc/v1/baremetal_node.py:2349none3 (1)6DELETE /v1/nodes/{id}/traits
baremetal node undeploySet provision state of baremetal node to 'deleted'ironicclient/osc/v1/baremetal_node.py:1810none3 (1)4PUT /v1/nodes/{id}/states/provision
baremetal node unholdSet provision state of baremetal node to 'unhold'ironicclient/osc/v1/baremetal_node.py:1070none2 (1)1PUT /v1/nodes/{id}/states/provision
baremetal node unrescueSet provision state of baremetal node to 'unrescue'ironicclient/osc/v1/baremetal_node.py:1818none3 (1)3PUT /v1/nodes/{id}/states/provision
baremetal node unsetUnset baremetal propertiesironicclient/osc/v1/baremetal_node.py:1826none36 (1)38PATCH /v1/nodes/{id}
baremetal node validateValidate a node's driver interfacesironicclient/osc/v1/baremetal_node.py:2102list1 (1)2GET /v1/nodes/{id}/validate
baremetal node vif attachAttach VIF to a given nodeironicclient/osc/v1/baremetal_node.py:2170none5 (2)4POST /v1/nodes/{id}/vifs
baremetal node vif detachDetach VIF from a given nodeironicclient/osc/v1/baremetal_node.py:2223none2 (2)1DELETE /v1/nodes/{id}/vifs/{id}
baremetal node vif listShow attached VIFs for a nodeironicclient/osc/v1/baremetal_node.py:2139list1 (1)1GET /v1/nodes/{id}/vifs

port (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal port createCreate a new portironicclient/osc/v1/baremetal_port.py:34single13 (2)13POST /v1/ports
baremetal port deleteDelete port(s).ironicclient/osc/v1/baremetal_port.py:497none1 (1)4DELETE /v1/ports/{id}
baremetal port listList baremetal ports.ironicclient/osc/v1/baremetal_port.py:534list8 (0)8GET /v1/ports
baremetal port setSet baremetal port properties.ironicclient/osc/v1/baremetal_port.py:334none14 (1)15PATCH /v1/ports/{id}
baremetal port showShow baremetal port details.ironicclient/osc/v1/baremetal_port.py:157single3 (1)3GET /v1/ports/{id}
baremetal port unsetUnset baremetal port properties.ironicclient/osc/v1/baremetal_port.py:219none10 (1)11PATCH /v1/ports/{id}

port group (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal port group createCreate a new baremetal port group.ironicclient/osc/v1/baremetal_portgroup.py:34single11 (1)9POST /v1/portgroups
baremetal port group deleteUnregister baremetal port group(s).ironicclient/osc/v1/baremetal_portgroup.py:299none1 (1)3DELETE /v1/portgroups/{id}
baremetal port group listList baremetal port groups.ironicclient/osc/v1/baremetal_portgroup.py:192list8 (0)8GET /v1/portgroups
baremetal port group setSet baremetal port group properties.ironicclient/osc/v1/baremetal_portgroup.py:336none11 (1)14PATCH /v1/portgroups/{id}
baremetal port group showShow baremetal port group details.ironicclient/osc/v1/baremetal_portgroup.py:132single3 (1)3GET /v1/portgroups/{id}
baremetal port group unsetUnset baremetal port group properties.ironicclient/osc/v1/baremetal_portgroup.py:466none7 (1)9PATCH /v1/portgroups/{id}

runbook (9)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal runbook createCreate a new runbookironicclient/osc/v1/baremetal_runbook.py:40single8 (2)7POST /v1/runbooks
baremetal runbook deleteDelete runbook(s).ironicclient/osc/v1/baremetal_runbook.py:385none1 (1)4DELETE /v1/runbooks/{id}
baremetal runbook listList baremetal runbooks.ironicclient/osc/v1/baremetal_runbook.py:423list5 (0)5GET /v1/runbooks
baremetal runbook setSet baremetal runbook properties.ironicclient/osc/v1/baremetal_runbook.py:187none8 (1)5PATCH /v1/runbooks/{id}
baremetal runbook showShow baremetal runbook details.ironicclient/osc/v1/baremetal_runbook.py:141single2 (1)2GET /v1/runbooks/{id}
baremetal runbook trait addAdd traits to a runbook.ironicclient/osc/v1/baremetal_runbook.py:541none2 (2)2PUT /v1/runbooks/{id}/traits/{id}
baremetal runbook trait listList a runbook's traits.ironicclient/osc/v1/baremetal_runbook.py:513list1 (1)1GET /v1/runbooks/{id}/traits
baremetal runbook trait removeRemove trait(s) from a runbook.ironicclient/osc/v1/baremetal_runbook.py:579none3 (1)3DELETE /v1/runbooks/{id}/traits
baremetal runbook unsetUnset baremetal runbook properties.ironicclient/osc/v1/baremetal_runbook.py:299none7 (1)6PATCH /v1/runbooks/{id}

shard (1)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal shard listList baremetal shards.ironicclient/osc/v1/baremetal_shard.py:27list0 (0)1GET /v1/shards

volume connector (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal volume connector createCreate a new baremetal volume connector.ironicclient/osc/v1/baremetal_volume_connector.py:33single5 (3)7POST /v1/volume/connectors
baremetal volume connector deleteUnregister baremetal volume connector(s).ironicclient/osc/v1/baremetal_volume_connector.py:244none1 (1)5DELETE /v1/volume/connectors/{id}
baremetal volume connector listList baremetal volume connectors.ironicclient/osc/v1/baremetal_volume_connector.py:147list6 (0)12GET /v1/volume/connectors
baremetal volume connector setSet baremetal volume connector properties.ironicclient/osc/v1/baremetal_volume_connector.py:282none5 (1)9PATCH /v1/volume/connectors/{id}
baremetal volume connector showShow baremetal volume connector details.ironicclient/osc/v1/baremetal_volume_connector.py:99single2 (1)4GET /v1/volume/connectors/{id}
baremetal volume connector unsetUnset baremetal volume connector properties.ironicclient/osc/v1/baremetal_volume_connector.py:351none2 (1)4PATCH /v1/volume/connectors/{id}

volume target (6)

CommandPurposeDefined atOutputArgs (required)Unit vectorsRequests observed
baremetal volume target createCreate a new baremetal volume target.ironicclient/osc/v1/baremetal_volume_target.py:33single7 (4)9POST /v1/volume/targets
baremetal volume target deleteUnregister baremetal volume target(s).ironicclient/osc/v1/baremetal_volume_target.py:261none1 (1)5DELETE /v1/volume/targets/{id}
baremetal volume target listList baremetal volume targets.ironicclient/osc/v1/baremetal_volume_target.py:164list6 (0)12GET /v1/volume/targets
baremetal volume target setSet baremetal volume target properties.ironicclient/osc/v1/baremetal_volume_target.py:299none7 (1)13PATCH /v1/volume/targets/{id}
baremetal volume target showShow baremetal volume target details.ironicclient/osc/v1/baremetal_volume_target.py:118single2 (1)5GET /v1/volume/targets/{id}
baremetal volume target unsetUnset baremetal volume target properties.ironicclient/osc/v1/baremetal_volume_target.py:391none3 (1)6PATCH /v1/volume/targets/{id}

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