Initial commit: stateful OpenStack API laboratory simulator.

Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm
packaging, API contract packs, and pytest/Pulumi coverage labs.
This commit is contained in:
2026-07-18 04:26:48 +03:00
commit 6033967e6a
509 changed files with 464404 additions and 0 deletions
@@ -0,0 +1,919 @@
{
"default_microversion": "1.1",
"max_microversion": "1.84",
"operations": [
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "ironic_versions",
"path": "/v1",
"requires_auth": true,
"requires_project": false,
"resource_type": "version",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "nodes",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_list",
"path": "/v1/nodes",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "nodes",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "node",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_create",
"path": "/v1/nodes",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "nodes",
"introduced_in": "yoga",
"item_key": "node",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_show",
"path": "/v1/nodes/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "nodes",
"introduced_in": "yoga",
"item_key": "node",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_update",
"path": "/v1/nodes/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "nodes",
"introduced_in": "yoga",
"item_key": "node",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_patch",
"path": "/v1/nodes/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "nodes",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_delete",
"path": "/v1/nodes/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "ports",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "port_list",
"path": "/v1/ports",
"requires_auth": true,
"requires_project": true,
"resource_type": "port",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "ports",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "port",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "port_create",
"path": "/v1/ports",
"requires_auth": true,
"requires_project": true,
"resource_type": "port",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "ports",
"introduced_in": "yoga",
"item_key": "port",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "port_show",
"path": "/v1/ports/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "port",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "ports",
"introduced_in": "yoga",
"item_key": "port",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "port_update",
"path": "/v1/ports/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "port",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "ports",
"introduced_in": "yoga",
"item_key": "port",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "port_patch",
"path": "/v1/ports/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "port",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "ports",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "port_delete",
"path": "/v1/ports/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "port",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "portgroups",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "portgroup_list",
"path": "/v1/portgroups",
"requires_auth": true,
"requires_project": true,
"resource_type": "portgroup",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "portgroups",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "portgroup",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "portgroup_create",
"path": "/v1/portgroups",
"requires_auth": true,
"requires_project": true,
"resource_type": "portgroup",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "portgroups",
"introduced_in": "yoga",
"item_key": "portgroup",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "portgroup_show",
"path": "/v1/portgroups/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "portgroup",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "portgroups",
"introduced_in": "yoga",
"item_key": "portgroup",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "portgroup_update",
"path": "/v1/portgroups/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "portgroup",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "portgroups",
"introduced_in": "yoga",
"item_key": "portgroup",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "portgroup_patch",
"path": "/v1/portgroups/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "portgroup",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "portgroups",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "portgroup_delete",
"path": "/v1/portgroups/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "portgroup",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "chassis",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "chassis_list",
"path": "/v1/chassis",
"requires_auth": true,
"requires_project": true,
"resource_type": "chassis",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "chassis",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "chassi",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "chassis_create",
"path": "/v1/chassis",
"requires_auth": true,
"requires_project": true,
"resource_type": "chassis",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "chassis",
"introduced_in": "yoga",
"item_key": "chassi",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "chassis_show",
"path": "/v1/chassis/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "chassis",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "chassis",
"introduced_in": "yoga",
"item_key": "chassi",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "chassis_update",
"path": "/v1/chassis/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "chassis",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "chassis",
"introduced_in": "yoga",
"item_key": "chassi",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "chassis_patch",
"path": "/v1/chassis/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "chassis",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "chassis",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "chassis_delete",
"path": "/v1/chassis/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "chassis",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "allocations",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "allocation_list",
"path": "/v1/allocations",
"requires_auth": true,
"requires_project": true,
"resource_type": "allocation",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "allocations",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "allocation",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "allocation_create",
"path": "/v1/allocations",
"requires_auth": true,
"requires_project": true,
"resource_type": "allocation",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "allocations",
"introduced_in": "yoga",
"item_key": "allocation",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "allocation_show",
"path": "/v1/allocations/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "allocation",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "allocations",
"introduced_in": "yoga",
"item_key": "allocation",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "allocation_update",
"path": "/v1/allocations/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "allocation",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "allocations",
"introduced_in": "yoga",
"item_key": "allocation",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "allocation_patch",
"path": "/v1/allocations/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "allocation",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "allocations",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "allocation_delete",
"path": "/v1/allocations/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "allocation",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "deploy_templates",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "deploy_template_list",
"path": "/v1/deploy_templates",
"requires_auth": true,
"requires_project": true,
"resource_type": "deploy_template",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "deploy_templates",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "deploy_template",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "deploy_template_create",
"path": "/v1/deploy_templates",
"requires_auth": true,
"requires_project": true,
"resource_type": "deploy_template",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "deploy_templates",
"introduced_in": "yoga",
"item_key": "deploy_template",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "deploy_template_show",
"path": "/v1/deploy_templates/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "deploy_template",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "deploy_templates",
"introduced_in": "yoga",
"item_key": "deploy_template",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "deploy_template_update",
"path": "/v1/deploy_templates/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "deploy_template",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "deploy_templates",
"introduced_in": "yoga",
"item_key": "deploy_template",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "deploy_template_patch",
"path": "/v1/deploy_templates/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "deploy_template",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "deploy_templates",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "deploy_template_delete",
"path": "/v1/deploy_templates/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "deploy_template",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "connectors",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_connector_list",
"path": "/v1/volume/connectors",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_connector",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "connectors",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "connector",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_connector_create",
"path": "/v1/volume/connectors",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_connector",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "connectors",
"introduced_in": "yoga",
"item_key": "connector",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_connector_show",
"path": "/v1/volume/connectors/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_connector",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "connectors",
"introduced_in": "yoga",
"item_key": "connector",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_connector_update",
"path": "/v1/volume/connectors/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_connector",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "connectors",
"introduced_in": "yoga",
"item_key": "connector",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_connector_patch",
"path": "/v1/volume/connectors/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_connector",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "connectors",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_connector_delete",
"path": "/v1/volume/connectors/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_connector",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "targets",
"introduced_in": "yoga",
"kind": "collection",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_target_list",
"path": "/v1/volume/targets",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_target",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "targets",
"create_status": 201,
"introduced_in": "yoga",
"item_key": "target",
"kind": "collection",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_target_create",
"path": "/v1/volume/targets",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_target",
"service": "ironic",
"status_code": 201
},
{
"collection_key": "targets",
"introduced_in": "yoga",
"item_key": "target",
"kind": "item",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_target_show",
"path": "/v1/volume/targets/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_target",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "targets",
"introduced_in": "yoga",
"item_key": "target",
"kind": "item",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_target_update",
"path": "/v1/volume/targets/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_target",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "targets",
"introduced_in": "yoga",
"item_key": "target",
"kind": "item",
"method": "PATCH",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_target_patch",
"path": "/v1/volume/targets/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_target",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "targets",
"introduced_in": "yoga",
"kind": "item",
"method": "DELETE",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "volume_target_delete",
"path": "/v1/volume/targets/{id}",
"requires_auth": true,
"requires_project": true,
"resource_type": "volume_target",
"service": "ironic",
"status_code": 204
},
{
"collection_key": "drivers",
"introduced_in": "yoga",
"kind": "custom",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "ironic_drivers",
"path": "/v1/drivers",
"requires_auth": true,
"requires_project": true,
"resource_type": "driver",
"service": "ironic",
"status_code": 200
},
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "ironic_driver_show",
"path": "/v1/drivers/{name}",
"requires_auth": true,
"requires_project": true,
"resource_type": "driver",
"service": "ironic",
"status_code": 200
},
{
"collection_key": "conductors",
"introduced_in": "yoga",
"kind": "custom",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "ironic_conductors",
"path": "/v1/conductors",
"requires_auth": true,
"requires_project": true,
"resource_type": "conductor",
"service": "ironic",
"status_code": 200
},
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_provision_state",
"path": "/v1/nodes/{id}/states/provision",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 204
},
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_power_state",
"path": "/v1/nodes/{id}/states/power",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 204
},
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "PUT",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_raid_state",
"path": "/v1/nodes/{id}/states/raid",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 204
},
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_states",
"path": "/v1/nodes/{id}/states",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 200
},
{
"collection_key": null,
"introduced_in": "yoga",
"kind": "custom",
"method": "GET",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_vendor_passthru",
"path": "/v1/nodes/{id}/vendor_passthru",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 200
},
{
"introduced_in": "yoga",
"kind": "action",
"method": "POST",
"microversion_max": "1.84",
"microversion_min": "1.1",
"operation_id": "node_action",
"path": "/v1/nodes/{id}/vifs",
"requires_auth": true,
"requires_project": true,
"resource_type": "node",
"service": "ironic",
"status_code": 204
}
],
"port": 6385,
"service": "ironic",
"type": "baremetal",
"version_path": "/"
}