diff --git a/nexus/src/external_api/http_entrypoints.rs b/nexus/src/external_api/http_entrypoints.rs index 5384b9f412..54d7ada148 100644 --- a/nexus/src/external_api/http_entrypoints.rs +++ b/nexus/src/external_api/http_entrypoints.rs @@ -38,6 +38,7 @@ use dropshot::ResultsPage; use dropshot::TypedBody; use dropshot::WhichPage; use ipnetwork::IpNetwork; +use omicron_common::api::external::http_pagination::data_page_params_for; use omicron_common::api::external::http_pagination::data_page_params_nameid_id; use omicron_common::api::external::http_pagination::data_page_params_nameid_name; use omicron_common::api::external::http_pagination::marker_for_name; @@ -64,9 +65,7 @@ use omicron_common::api::external::RouterRouteUpdateParams; use omicron_common::api::external::Saga; use omicron_common::api::external::VpcFirewallRuleUpdateParams; use omicron_common::api::external::VpcFirewallRules; -use omicron_common::{ - api::external::http_pagination::data_page_params_for, bail_unless, -}; +use omicron_common::bail_unless; use ref_cast::RefCast; use schemars::JsonSchema; use serde::Deserialize; @@ -79,142 +78,141 @@ type NexusApiDescription = ApiDescription>; /// Returns a description of the external nexus API pub fn external_api() -> NexusApiDescription { fn register_endpoints(api: &mut NexusApiDescription) -> Result<(), String> { - api.register(policy_get)?; - api.register(policy_put)?; - - api.register(silos_get)?; - api.register(silos_post)?; - api.register(silos_get_silo)?; - api.register(silos_delete_silo)?; - api.register(silos_get_identity_providers)?; - api.register(silos_get_silo_policy)?; - api.register(silos_put_silo_policy)?; - - api.register(silo_saml_idp_create)?; - api.register(silo_saml_idp_fetch)?; - - api.register(organizations_get)?; - api.register(organizations_post)?; - api.register(organizations_get_organization)?; - api.register(organizations_delete_organization)?; - api.register(organizations_put_organization)?; - api.register(organization_get_policy)?; - api.register(organization_put_policy)?; - - api.register(organization_projects_get)?; - api.register(organization_projects_post)?; - api.register(organization_projects_get_project)?; - api.register(organization_projects_delete_project)?; - api.register(organization_projects_put_project)?; - api.register(organization_projects_get_project_policy)?; - api.register(organization_projects_put_project_policy)?; - - api.register(ip_pools_get)?; - api.register(ip_pools_post)?; - api.register(ip_pools_get_ip_pool)?; - api.register(ip_pools_delete_ip_pool)?; - api.register(ip_pools_put_ip_pool)?; - - api.register(ip_pool_ranges_get)?; - api.register(ip_pool_ranges_add)?; - api.register(ip_pool_ranges_delete)?; - - api.register(project_disks_get)?; - api.register(project_disks_post)?; - api.register(project_disks_get_disk)?; - api.register(project_disks_delete_disk)?; - - api.register(project_instances_get)?; - api.register(project_instances_post)?; - api.register(project_instances_get_instance)?; - api.register(project_instances_delete_instance)?; - api.register(project_instances_migrate_instance)?; - api.register(project_instances_instance_reboot)?; - api.register(project_instances_instance_start)?; - api.register(project_instances_instance_stop)?; - api.register(project_instances_instance_serial_get)?; - - // Globally-scoped Images API - api.register(images_get)?; - api.register(images_post)?; - api.register(images_get_image)?; - api.register(images_delete_image)?; + api.register(policy_view)?; + api.register(policy_update)?; + + api.register(organization_list)?; + api.register(organization_create)?; + api.register(organization_view)?; + api.register(organization_delete)?; + api.register(organization_update)?; + api.register(organization_policy_view)?; + api.register(organization_policy_update)?; + + api.register(project_list)?; + api.register(project_create)?; + api.register(project_view)?; + api.register(project_delete)?; + api.register(project_update)?; + api.register(project_policy_view)?; + api.register(project_policy_update)?; + + api.register(ip_pool_list)?; + api.register(ip_pool_create)?; + api.register(ip_pool_view)?; + api.register(ip_pool_delete)?; + api.register(ip_pool_update)?; + + api.register(ip_pool_range_list)?; + api.register(ip_pool_range_add)?; + api.register(ip_pool_range_remove)?; + + api.register(disk_list)?; + api.register(disk_create)?; + api.register(disk_view)?; + api.register(disk_delete)?; + + api.register(instance_list)?; + api.register(instance_create)?; + api.register(instance_view)?; + api.register(instance_delete)?; + api.register(instance_migrate)?; + api.register(instance_reboot)?; + api.register(instance_start)?; + api.register(instance_stop)?; + api.register(instance_serial_console)?; // Project-scoped images API - api.register(project_images_get)?; - api.register(project_images_post)?; - api.register(project_images_get_image)?; - api.register(project_images_delete_image)?; - - api.register(instance_disks_get)?; - api.register(instance_disks_attach)?; - api.register(instance_disks_detach)?; - - api.register(project_snapshots_get)?; - api.register(project_snapshots_post)?; - api.register(project_snapshots_get_snapshot)?; - api.register(project_snapshots_delete_snapshot)?; - - api.register(project_vpcs_get)?; - api.register(project_vpcs_post)?; - api.register(project_vpcs_get_vpc)?; - api.register(project_vpcs_put_vpc)?; - api.register(project_vpcs_delete_vpc)?; - - api.register(vpc_subnets_get)?; - api.register(vpc_subnets_get_subnet)?; - api.register(vpc_subnets_post)?; - api.register(vpc_subnets_delete_subnet)?; - api.register(vpc_subnets_put_subnet)?; - - api.register(subnet_network_interfaces_get)?; - - api.register(instance_network_interfaces_post)?; - api.register(instance_network_interfaces_get)?; - api.register(instance_network_interfaces_get_interface)?; - api.register(instance_network_interfaces_put_interface)?; - api.register(instance_network_interfaces_delete_interface)?; - - api.register(vpc_routers_get)?; - api.register(vpc_routers_get_router)?; - api.register(vpc_routers_post)?; - api.register(vpc_routers_delete_router)?; - api.register(vpc_routers_put_router)?; - - api.register(vpc_firewall_rules_get)?; - api.register(vpc_firewall_rules_put)?; - - api.register(routers_routes_get)?; - api.register(routers_routes_get_route)?; - api.register(routers_routes_post)?; - api.register(routers_routes_delete_route)?; - api.register(routers_routes_put_route)?; - - api.register(hardware_racks_get)?; - api.register(hardware_racks_get_rack)?; - api.register(hardware_sleds_get)?; - api.register(hardware_sleds_get_sled)?; + api.register(image_list)?; + api.register(image_create)?; + api.register(image_view)?; + api.register(image_delete)?; + + api.register(instance_disk_list)?; + api.register(instance_disk_attach)?; + api.register(instance_disk_detach)?; + + api.register(snapshot_list)?; + api.register(snapshot_create)?; + api.register(snapshot_view)?; + api.register(snapshot_delete)?; + + api.register(vpc_list)?; + api.register(vpc_create)?; + api.register(vpc_view)?; + api.register(vpc_update)?; + api.register(vpc_delete)?; + + api.register(vpc_subnet_list)?; + api.register(vpc_subnet_view)?; + api.register(vpc_subnet_create)?; + api.register(vpc_subnet_delete)?; + api.register(vpc_subnet_update)?; + api.register(vpc_subnet_list_network_interfaces)?; + + api.register(instance_network_interface_create)?; + api.register(instance_network_interface_list)?; + api.register(instance_network_interface_view)?; + api.register(instance_network_interface_update)?; + api.register(instance_network_interface_delete)?; + + api.register(vpc_router_list)?; + api.register(vpc_router_view)?; + api.register(vpc_router_create)?; + api.register(vpc_router_delete)?; + api.register(vpc_router_update)?; + + api.register(vpc_router_route_list)?; + api.register(vpc_router_route_view)?; + api.register(vpc_router_route_create)?; + api.register(vpc_router_route_delete)?; + api.register(vpc_router_route_update)?; + + api.register(vpc_firewall_rules_view)?; + api.register(vpc_firewall_rules_update)?; + + api.register(rack_list)?; + api.register(rack_view)?; + api.register(sled_list)?; + api.register(sled_view)?; + + api.register(saga_list)?; + api.register(saga_view)?; + + api.register(system_user_list)?; + api.register(system_user_view)?; - api.register(updates_refresh)?; + api.register(timeseries_schema_get)?; - api.register(sagas_get)?; - api.register(sagas_get_saga)?; + api.register(role_list)?; + api.register(role_view)?; - api.register(silo_users_get)?; + api.register(session_sshkey_list)?; + api.register(session_sshkey_view)?; + api.register(session_sshkey_create)?; + api.register(session_sshkey_delete)?; - api.register(builtin_users_get)?; - api.register(builtin_users_get_user)?; + // Fleet-wide API operations + api.register(silo_list)?; + api.register(silo_create)?; + api.register(silo_view)?; + api.register(silo_delete)?; + api.register(silo_identity_provider_list)?; + api.register(silo_policy_view)?; + api.register(silo_policy_update)?; - api.register(timeseries_schema_get)?; + api.register(silo_identity_provider_create)?; + api.register(silo_identity_provider_view)?; - api.register(roles_get)?; - api.register(roles_get_role)?; + api.register(image_global_list)?; + api.register(image_global_create)?; + api.register(image_global_view)?; + api.register(image_global_delete)?; - api.register(sshkeys_get)?; - api.register(sshkeys_get_key)?; - api.register(sshkeys_post)?; - api.register(sshkeys_delete_key)?; + api.register(updates_refresh)?; + api.register(user_list)?; + // Console API operations api.register(console_api::spoof_login)?; api.register(console_api::spoof_login_form)?; api.register(console_api::login_redirect)?; @@ -286,7 +284,7 @@ pub fn external_api() -> NexusApiDescription { path = "/policy", tags = ["policy"], }] -async fn policy_get( +async fn policy_view( rqctx: Arc>>, ) -> Result>, HttpError> { let apictx = rqctx.context(); @@ -306,7 +304,7 @@ async fn policy_get( path = "/policy", tags = ["policy"], }] -async fn policy_put( +async fn policy_update( rqctx: Arc>>, new_policy: TypedBody>, ) -> Result>, HttpError> { @@ -331,7 +329,7 @@ async fn policy_put( path = "/silos", tags = ["silos"], }] -async fn silos_get( +async fn silo_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -374,7 +372,7 @@ async fn silos_get( path = "/silos", tags = ["silos"], }] -async fn silos_post( +async fn silo_create( rqctx: Arc>>, new_silo_params: TypedBody, ) -> Result, HttpError> { @@ -402,7 +400,7 @@ struct SiloPathParam { path = "/silos/{silo_name}", tags = ["silos"], }] -async fn silos_get_silo( +async fn silo_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -424,7 +422,7 @@ async fn silos_get_silo( path = "/silos/{silo_name}", tags = ["silos"], }] -async fn silos_delete_silo( +async fn silo_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -446,7 +444,7 @@ async fn silos_delete_silo( path = "/silos/{silo_name}/policy", tags = ["silos"], }] -async fn silos_get_silo_policy( +async fn silo_policy_view( rqctx: Arc>>, path_params: Path, ) -> Result>, HttpError> { @@ -469,7 +467,7 @@ async fn silos_get_silo_policy( path = "/silos/{silo_name}/policy", tags = ["silos"], }] -async fn silos_put_silo_policy( +async fn silo_policy_update( rqctx: Arc>>, path_params: Path, new_policy: TypedBody>, @@ -500,7 +498,7 @@ async fn silos_put_silo_policy( path = "/silos/{silo_name}/identity_providers", tags = ["silos"], }] -async fn silos_get_identity_providers( +async fn silo_identity_provider_list( rqctx: Arc>>, path_params: Path, query_params: Query, @@ -537,7 +535,7 @@ async fn silos_get_identity_providers( path = "/silos/{silo_name}/saml_identity_providers", tags = ["silos"], }] -async fn silo_saml_idp_create( +async fn silo_identity_provider_create( rqctx: Arc>>, path_params: Path, new_provider: TypedBody, @@ -574,7 +572,7 @@ struct SiloSamlPathParam { path = "/silos/{silo_name}/saml_identity_providers/{provider_name}", tags = ["silos"], }] -async fn silo_saml_idp_fetch( +async fn silo_identity_provider_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -598,13 +596,15 @@ async fn silo_saml_idp_fetch( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } +// TODO: no DELETE for identity providers? + /// List all organizations. #[endpoint { method = GET, path = "/organizations", tags = ["organizations"], }] -async fn organizations_get( +async fn organization_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -647,7 +647,7 @@ async fn organizations_get( path = "/organizations", tags = ["organizations"], }] -async fn organizations_post( +async fn organization_create( rqctx: Arc>>, new_organization: TypedBody, ) -> Result, HttpError> { @@ -676,7 +676,7 @@ struct OrganizationPathParam { path = "/organizations/{organization_name}", tags = ["organizations"], }] -async fn organizations_get_organization( +async fn organization_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -699,7 +699,7 @@ async fn organizations_get_organization( path = "/organizations/{organization_name}", tags = ["organizations"], }] -async fn organizations_delete_organization( +async fn organization_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -726,7 +726,7 @@ async fn organizations_delete_organization( path = "/organizations/{organization_name}", tags = ["organizations"], }] -async fn organizations_put_organization( +async fn organization_update( rqctx: Arc>>, path_params: Path, updated_organization: TypedBody, @@ -755,7 +755,7 @@ async fn organizations_put_organization( path = "/organizations/{organization_name}/policy", tags = ["organizations"], }] -async fn organization_get_policy( +async fn organization_policy_view( rqctx: Arc>>, path_params: Path, ) -> Result>, HttpError> @@ -780,7 +780,7 @@ async fn organization_get_policy( path = "/organizations/{organization_name}/policy", tags = ["organizations"], }] -async fn organization_put_policy( +async fn organization_policy_update( rqctx: Arc>>, path_params: Path, new_policy: TypedBody>, @@ -811,7 +811,7 @@ async fn organization_put_policy( path = "/organizations/{organization_name}/projects", tags = ["projects"], }] -async fn organization_projects_get( +async fn project_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -869,7 +869,7 @@ async fn organization_projects_get( path = "/organizations/{organization_name}/projects", tags = ["projects"], }] -async fn organization_projects_post( +async fn project_create( rqctx: Arc>>, path_params: Path, new_project: TypedBody, @@ -907,7 +907,7 @@ struct ProjectPathParam { path = "/organizations/{organization_name}/projects/{project_name}", tags = ["projects"], }] -async fn organization_projects_get_project( +async fn project_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -932,7 +932,7 @@ async fn organization_projects_get_project( path = "/organizations/{organization_name}/projects/{project_name}", tags = ["projects"], }] -async fn organization_projects_delete_project( +async fn project_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -960,7 +960,7 @@ async fn organization_projects_delete_project( path = "/organizations/{organization_name}/projects/{project_name}", tags = ["projects"], }] -async fn organization_projects_put_project( +async fn project_update( rqctx: Arc>>, path_params: Path, updated_project: TypedBody, @@ -991,7 +991,7 @@ async fn organization_projects_put_project( path = "/organizations/{organization_name}/projects/{project_name}/policy", tags = ["projects"], }] -async fn organization_projects_get_project_policy( +async fn project_policy_view( rqctx: Arc>>, path_params: Path, ) -> Result>, HttpError> { @@ -1017,7 +1017,7 @@ async fn organization_projects_get_project_policy( path = "/organizations/{organization_name}/projects/{project_name}/policy", tags = ["projects"], }] -async fn organization_projects_put_project_policy( +async fn project_policy_update( rqctx: Arc>>, path_params: Path, new_policy: TypedBody>, @@ -1060,7 +1060,7 @@ pub struct IpPoolPathParam { path = "/ip-pools", tags = ["ip-pools"], }] -async fn ip_pools_get( +async fn ip_pool_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -1101,7 +1101,7 @@ async fn ip_pools_get( path = "/ip-pools", tags = ["ip-pools"], }] -async fn ip_pools_post( +async fn ip_pool_create( rqctx: Arc>>, pool_params: TypedBody, ) -> Result, HttpError> { @@ -1122,7 +1122,7 @@ async fn ip_pools_post( path = "/ip-pools/{pool_name}", tags = ["ip-pools"], }] -async fn ip_pools_get_ip_pool( +async fn ip_pool_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1144,7 +1144,7 @@ async fn ip_pools_get_ip_pool( path = "/ip-pools/{pool_name}", tags = ["ip-pools"], }] -async fn ip_pools_delete_ip_pool( +async fn ip_pool_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -1166,7 +1166,7 @@ async fn ip_pools_delete_ip_pool( path = "/ip-pools/{pool_name}", tags = ["ip-pools"], }] -async fn ip_pools_put_ip_pool( +async fn ip_pool_update( rqctx: Arc>>, path_params: Path, updates: TypedBody, @@ -1194,7 +1194,7 @@ type IpPoolRangePaginationParams = PaginationParams; path = "/ip-pools/{pool_name}/ranges", tags = ["ip-pools"], }] -async fn ip_pool_ranges_get( +async fn ip_pool_range_list( rqctx: Arc>>, path_params: Path, query_params: Query, @@ -1238,7 +1238,7 @@ async fn ip_pool_ranges_get( path = "/ip-pools/{pool_name}/ranges/add", tags = ["ip-pools"], }] -async fn ip_pool_ranges_add( +async fn ip_pool_range_add( rqctx: Arc>>, path_params: Path, range_params: TypedBody, @@ -1259,10 +1259,10 @@ async fn ip_pool_ranges_add( /// Remove a range from an existing IP Pool. #[endpoint { method = POST, - path = "/ip-pools/{pool_name}/ranges/delete", + path = "/ip-pools/{pool_name}/ranges/remove", tags = ["ip-pools"], }] -async fn ip_pool_ranges_delete( +async fn ip_pool_range_remove( rqctx: Arc>>, path_params: Path, range_params: TypedBody, @@ -1288,7 +1288,7 @@ async fn ip_pool_ranges_delete( path = "/organizations/{organization_name}/projects/{project_name}/disks", tags = ["disks"] }] -async fn project_disks_get( +async fn disk_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -1329,7 +1329,7 @@ async fn project_disks_get( path = "/organizations/{organization_name}/projects/{project_name}/disks", tags = ["disks"] }] -async fn project_disks_post( +async fn disk_create( rqctx: Arc>>, path_params: Path, new_disk: TypedBody, @@ -1369,7 +1369,7 @@ struct DiskPathParam { path = "/organizations/{organization_name}/projects/{project_name}/disks/{disk_name}", tags = ["disks"], }] -async fn project_disks_get_disk( +async fn disk_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1395,7 +1395,7 @@ async fn project_disks_get_disk( path = "/organizations/{organization_name}/projects/{project_name}/disks/{disk_name}", tags = ["disks"], }] -async fn project_disks_delete_disk( +async fn disk_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -1428,7 +1428,7 @@ async fn project_disks_delete_disk( path = "/organizations/{organization_name}/projects/{project_name}/instances", tags = ["instances"], }] -async fn project_instances_get( +async fn instance_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -1475,7 +1475,7 @@ async fn project_instances_get( path = "/organizations/{organization_name}/projects/{project_name}/instances", tags = ["instances"], }] -async fn project_instances_post( +async fn instance_create( rqctx: Arc>>, path_params: Path, new_instance: TypedBody, @@ -1515,7 +1515,7 @@ struct InstancePathParam { path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}", tags = ["instances"], }] -async fn project_instances_get_instance( +async fn instance_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1546,7 +1546,7 @@ async fn project_instances_get_instance( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}", tags = ["instances"], }] -async fn project_instances_delete_instance( +async fn instance_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -1577,7 +1577,7 @@ async fn project_instances_delete_instance( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/migrate", tags = ["instances"], }] -async fn project_instances_migrate_instance( +async fn instance_migrate( rqctx: Arc>>, path_params: Path, migrate_params: TypedBody, @@ -1611,7 +1611,7 @@ async fn project_instances_migrate_instance( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/reboot", tags = ["instances"], }] -async fn project_instances_instance_reboot( +async fn instance_reboot( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1642,7 +1642,7 @@ async fn project_instances_instance_reboot( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/start", tags = ["instances"], }] -async fn project_instances_instance_start( +async fn instance_start( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1674,7 +1674,7 @@ async fn project_instances_instance_start( tags = ["instances"], }] // Our naming convention kind of falls apart here. -async fn project_instances_instance_stop( +async fn instance_stop( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1702,10 +1702,10 @@ async fn project_instances_instance_stop( /// Get contents of an instance's serial console. #[endpoint { method = GET, - path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/serial", + path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/serial-console", tags = ["instances"], }] -async fn project_instances_instance_serial_get( +async fn instance_serial_console( rqctx: Arc>>, path_params: Path, query_params: Query, @@ -1739,7 +1739,7 @@ async fn project_instances_instance_serial_get( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks", tags = ["instances"], }] -async fn instance_disks_get( +async fn instance_disk_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -1780,7 +1780,7 @@ async fn instance_disks_get( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/attach", tags = ["instances"], }] -async fn instance_disks_attach( +async fn instance_disk_attach( rqctx: Arc>>, path_params: Path, disk_to_attach: TypedBody, @@ -1812,7 +1812,7 @@ async fn instance_disks_attach( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/detach", tags = ["instances"], }] -async fn instance_disks_detach( +async fn instance_disk_detach( rqctx: Arc>>, path_params: Path, disk_to_detach: TypedBody, @@ -1850,7 +1850,7 @@ async fn instance_disks_detach( path = "/images", tags = ["images:global"], }] -async fn images_get( +async fn image_global_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -1887,7 +1887,7 @@ async fn images_get( path = "/images", tags = ["images:global"] }] -async fn images_post( +async fn image_global_create( rqctx: Arc>>, new_image: TypedBody, ) -> Result, HttpError> { @@ -1916,7 +1916,7 @@ struct GlobalImagePathParam { path = "/images/{image_name}", tags = ["images:global"], }] -async fn images_get_image( +async fn image_global_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -1942,7 +1942,7 @@ async fn images_get_image( path = "/images/{image_name}", tags = ["images:global"], }] -async fn images_delete_image( +async fn image_global_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -1967,7 +1967,7 @@ async fn images_delete_image( path = "/organizations/{organization_name}/projects/{project_name}/images", tags = ["images"], }] -async fn project_images_get( +async fn image_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2009,7 +2009,7 @@ async fn project_images_get( path = "/organizations/{organization_name}/projects/{project_name}/images", tags = ["images"] }] -async fn project_images_post( +async fn image_create( rqctx: Arc>>, path_params: Path, new_image: TypedBody, @@ -2051,7 +2051,7 @@ struct ImagePathParam { path = "/organizations/{organization_name}/projects/{project_name}/images/{image_name}", tags = ["images"], }] -async fn project_images_get_image( +async fn image_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2086,7 +2086,7 @@ async fn project_images_get_image( path = "/organizations/{organization_name}/projects/{project_name}/images/{image_name}", tags = ["images"], }] -async fn project_images_delete_image( +async fn image_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -2121,7 +2121,7 @@ async fn project_images_delete_image( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces", tags = ["instances"], }] -async fn instance_network_interfaces_get( +async fn instance_network_interface_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2163,7 +2163,7 @@ async fn instance_network_interfaces_get( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces", tags = ["instances"], }] -async fn instance_network_interfaces_post( +async fn instance_network_interface_create( rqctx: Arc>>, path_params: Path, interface_params: TypedBody, @@ -2209,7 +2209,7 @@ pub struct NetworkInterfacePathParam { path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name}", tags = ["instances"], }] -async fn instance_network_interfaces_delete_interface( +async fn instance_network_interface_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -2242,7 +2242,7 @@ async fn instance_network_interfaces_delete_interface( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name}", tags = ["instances"], }] -async fn instance_network_interfaces_get_interface( +async fn instance_network_interface_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2275,7 +2275,7 @@ async fn instance_network_interfaces_get_interface( path = "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name}", tags = ["instances"], }] -async fn instance_network_interfaces_put_interface( +async fn instance_network_interface_update( rqctx: Arc>>, path_params: Path, updated_iface: TypedBody, @@ -2313,7 +2313,7 @@ async fn instance_network_interfaces_put_interface( path = "/organizations/{organization_name}/projects/{project_name}/snapshots", tags = ["snapshots"], }] -async fn project_snapshots_get( +async fn snapshot_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2353,7 +2353,7 @@ async fn project_snapshots_get( path = "/organizations/{organization_name}/projects/{project_name}/snapshots", tags = ["snapshots"], }] -async fn project_snapshots_post( +async fn snapshot_create( rqctx: Arc>>, path_params: Path, new_snapshot: TypedBody, @@ -2393,7 +2393,7 @@ struct SnapshotPathParam { path = "/organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name}", tags = ["snapshots"], }] -async fn project_snapshots_get_snapshot( +async fn snapshot_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2424,7 +2424,7 @@ async fn project_snapshots_get_snapshot( path = "/organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name}", tags = ["snapshots"], }] -async fn project_snapshots_delete_snapshot( +async fn snapshot_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -2457,7 +2457,7 @@ async fn project_snapshots_delete_snapshot( path = "/organizations/{organization_name}/projects/{project_name}/vpcs", tags = ["vpcs"], }] -async fn project_vpcs_get( +async fn vpc_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2506,7 +2506,7 @@ struct VpcPathParam { path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}", tags = ["vpcs"], }] -async fn project_vpcs_get_vpc( +async fn vpc_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2532,7 +2532,7 @@ async fn project_vpcs_get_vpc( path = "/organizations/{organization_name}/projects/{project_name}/vpcs", tags = ["vpcs"], }] -async fn project_vpcs_post( +async fn vpc_create( rqctx: Arc>>, path_params: Path, new_vpc: TypedBody, @@ -2564,7 +2564,7 @@ async fn project_vpcs_post( path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}", tags = ["vpcs"], }] -async fn project_vpcs_put_vpc( +async fn vpc_update( rqctx: Arc>>, path_params: Path, updated_vpc: TypedBody, @@ -2594,7 +2594,7 @@ async fn project_vpcs_put_vpc( path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}", tags = ["vpcs"], }] -async fn project_vpcs_delete_vpc( +async fn vpc_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -2623,9 +2623,9 @@ async fn project_vpcs_delete_vpc( #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets", - tags = ["subnets"], + tags = ["vpcs"], }] -async fn vpc_subnets_get( +async fn vpc_subnet_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2671,9 +2671,9 @@ struct VpcSubnetPathParam { #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}", - tags = ["subnets"], + tags = ["vpcs"], }] -async fn vpc_subnets_get_subnet( +async fn vpc_subnet_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2700,9 +2700,9 @@ async fn vpc_subnets_get_subnet( #[endpoint { method = POST, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets", - tags = ["subnets"], + tags = ["vpcs"], }] -async fn vpc_subnets_post( +async fn vpc_subnet_create( rqctx: Arc>>, path_params: Path, create_params: TypedBody, @@ -2730,9 +2730,9 @@ async fn vpc_subnets_post( #[endpoint { method = DELETE, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}", - tags = ["subnets"], + tags = ["vpcs"], }] -async fn vpc_subnets_delete_subnet( +async fn vpc_subnet_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -2759,9 +2759,9 @@ async fn vpc_subnets_delete_subnet( #[endpoint { method = PUT, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}", - tags = ["subnets"], + tags = ["vpcs"], }] -async fn vpc_subnets_put_subnet( +async fn vpc_subnet_update( rqctx: Arc>>, path_params: Path, subnet_params: TypedBody, @@ -2790,9 +2790,9 @@ async fn vpc_subnets_put_subnet( #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}/network-interfaces", - tags = ["subnets"], + tags = ["vpcs"], }] -async fn subnet_network_interfaces_get( +async fn vpc_subnet_list_network_interfaces( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2828,13 +2828,14 @@ async fn subnet_network_interfaces_get( // VPC Firewalls +// TODO Is the number of firewall rules bounded? /// List firewall rules for a VPC. #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules", - tags = ["firewall"], + tags = ["vpcs"], }] -async fn vpc_firewall_rules_get( +async fn vpc_firewall_rules_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2865,9 +2866,9 @@ async fn vpc_firewall_rules_get( #[endpoint { method = PUT, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules", - tags = ["firewall"], + tags = ["vpcs"], }] -async fn vpc_firewall_rules_put( +async fn vpc_firewall_rules_update( rqctx: Arc>>, path_params: Path, router_params: TypedBody, @@ -2901,9 +2902,9 @@ async fn vpc_firewall_rules_put( #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers", - tags = ["routers"], + tags = ["vpcs"], }] -async fn vpc_routers_get( +async fn vpc_router_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -2949,9 +2950,9 @@ struct VpcRouterPathParam { #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}", - tags = ["routers"], + tags = ["vpcs"], }] -async fn vpc_routers_get_router( +async fn vpc_router_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -2978,9 +2979,9 @@ async fn vpc_routers_get_router( #[endpoint { method = POST, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers", - tags = ["routers"], + tags = ["vpcs"], }] -async fn vpc_routers_post( +async fn vpc_router_create( rqctx: Arc>>, path_params: Path, create_params: TypedBody, @@ -3009,9 +3010,9 @@ async fn vpc_routers_post( #[endpoint { method = DELETE, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}", - tags = ["routers"], + tags = ["vpcs"], }] -async fn vpc_routers_delete_router( +async fn vpc_router_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -3038,9 +3039,9 @@ async fn vpc_routers_delete_router( #[endpoint { method = PUT, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}", - tags = ["routers"], + tags = ["vpcs"], }] -async fn vpc_routers_put_router( +async fn vpc_router_update( rqctx: Arc>>, path_params: Path, router_params: TypedBody, @@ -3071,9 +3072,9 @@ async fn vpc_routers_put_router( #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes", - tags = ["routes"], + tags = ["vpcs"], }] -async fn routers_routes_get( +async fn vpc_router_route_list( rqctx: Arc>>, query_params: Query, path_params: Path, @@ -3121,9 +3122,9 @@ struct RouterRoutePathParam { #[endpoint { method = GET, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}", - tags = ["routes"], + tags = ["vpcs"], }] -async fn routers_routes_get_route( +async fn vpc_router_route_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3151,9 +3152,9 @@ async fn routers_routes_get_route( #[endpoint { method = POST, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes", - tags = ["routes"], + tags = ["vpcs"], }] -async fn routers_routes_post( +async fn vpc_router_route_create( rqctx: Arc>>, path_params: Path, create_params: TypedBody, @@ -3183,9 +3184,9 @@ async fn routers_routes_post( #[endpoint { method = DELETE, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}", - tags = ["routes"], + tags = ["vpcs"], }] -async fn routers_routes_delete_route( +async fn vpc_router_route_delete( rqctx: Arc>>, path_params: Path, ) -> Result { @@ -3213,9 +3214,9 @@ async fn routers_routes_delete_route( #[endpoint { method = PUT, path = "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}", - tags = ["routes"], + tags = ["vpcs"], }] -async fn routers_routes_put_route( +async fn vpc_router_route_update( rqctx: Arc>>, path_params: Path, router_params: TypedBody, @@ -3247,9 +3248,9 @@ async fn routers_routes_put_route( #[endpoint { method = GET, path = "/hardware/racks", - tags = ["racks"], + tags = ["hardware"], }] -async fn hardware_racks_get( +async fn rack_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -3284,9 +3285,9 @@ struct RackPathParam { #[endpoint { method = GET, path = "/hardware/racks/{rack_id}", - tags = ["racks"], + tags = ["hardware"], }] -async fn hardware_racks_get_rack( +async fn rack_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3307,9 +3308,9 @@ async fn hardware_racks_get_rack( #[endpoint { method = GET, path = "/hardware/sleds", - tags = ["sleds"], + tags = ["hardware"], }] -async fn hardware_sleds_get( +async fn sled_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -3344,9 +3345,9 @@ struct SledPathParam { #[endpoint { method = GET, path = "/hardware/sleds/{sled_id}", - tags = ["sleds"], + tags = ["hardware"], }] -async fn hardware_sleds_get_sled( +async fn sled_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3390,7 +3391,7 @@ async fn updates_refresh( path = "/sagas", tags = ["sagas"], }] -async fn sagas_get( +async fn saga_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -3423,7 +3424,7 @@ struct SagaPathParam { path = "/sagas/{saga_id}", tags = ["sagas"], }] -async fn sagas_get_saga( +async fn saga_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3446,7 +3447,7 @@ async fn sagas_get_saga( path = "/users", tags = ["silos"], }] -async fn silo_users_get( +async fn user_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -3476,10 +3477,10 @@ async fn silo_users_get( /// List the built-in system users #[endpoint { method = GET, - path = "/users_builtin", + path = "/system/user", tags = ["system"], }] -async fn builtin_users_get( +async fn system_user_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -3515,10 +3516,10 @@ struct UserPathParam { /// Fetch a specific built-in system user #[endpoint { method = GET, - path = "/users_builtin/{user_name}", + path = "/system/user/{user_name}", tags = ["system"], }] -async fn builtin_users_get_user( +async fn system_user_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3572,7 +3573,7 @@ struct RolePage { path = "/roles", tags = ["roles"], }] -async fn roles_get( +async fn role_list( rqctx: Arc>>, query_params: Query>, ) -> Result>, HttpError> { @@ -3626,7 +3627,7 @@ struct RolePathParam { path = "/roles/{role_name}", tags = ["roles"], }] -async fn roles_get_role( +async fn role_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3648,9 +3649,9 @@ async fn roles_get_role( #[endpoint { method = GET, path = "/session/me/sshkeys", - tags = ["sshkeys"], + tags = ["session"], }] -async fn sshkeys_get( +async fn session_sshkey_list( rqctx: Arc>>, query_params: Query, ) -> Result>, HttpError> { @@ -3681,9 +3682,9 @@ async fn sshkeys_get( #[endpoint { method = POST, path = "/session/me/sshkeys", - tags = ["sshkeys"], + tags = ["session"], }] -async fn sshkeys_post( +async fn session_sshkey_create( rqctx: Arc>>, new_key: TypedBody, ) -> Result, HttpError> { @@ -3710,9 +3711,9 @@ struct SshKeyPathParams { #[endpoint { method = GET, path = "/session/me/sshkeys/{ssh_key_name}", - tags = ["sshkeys"], + tags = ["session"], }] -async fn sshkeys_get_key( +async fn session_sshkey_view( rqctx: Arc>>, path_params: Path, ) -> Result, HttpError> { @@ -3734,9 +3735,9 @@ async fn sshkeys_get_key( #[endpoint { method = DELETE, path = "/session/me/sshkeys/{ssh_key_name}", - tags = ["sshkeys"], + tags = ["session"], }] -async fn sshkeys_delete_key( +async fn session_sshkey_delete( rqctx: Arc>>, path_params: Path, ) -> Result { diff --git a/nexus/src/external_api/tag-config.json b/nexus/src/external_api/tag-config.json index 592ef0ec37..960fe81c8f 100644 --- a/nexus/src/external_api/tag-config.json +++ b/nexus/src/external_api/tag-config.json @@ -80,7 +80,7 @@ "url": "http://oxide.computer/docs/#xxx" } }, - "racks": { + "hardware": { "description": "These operations pertain to hardware inventory and management. Racks are the unit of expansion of an Oxide deployment. Racks are in turn composed of sleds, switches, power supplies, and a cabled backplane.", "external_docs": { "url": "http://oxide.computer/docs/#xxx" @@ -110,20 +110,14 @@ "url": "http://oxide.computer/docs/#xxx" } }, - "sleds": { - "description": "This tag should be moved into hardware", - "external_docs": { - "url": "http://oxide.computer/docs/#xxx" - } - }, "snapshots": { "description": "Snapshots of Virtual Disks at a particular point in time.", "external_docs": { "url": "http://oxide.computer/docs/#xxx" } }, - "sshkeys": { - "description": "Public SSH keys for an individual user", + "session": { + "description": "Information pertaining to the current session.", "external_docs": { "url": "http://oxide.computer/docs/#xxx" } @@ -153,4 +147,4 @@ } } } -} +} \ No newline at end of file diff --git a/nexus/tests/integration_tests/endpoints.rs b/nexus/tests/integration_tests/endpoints.rs index e928c365c9..cbb1dfd6ca 100644 --- a/nexus/tests/integration_tests/endpoints.rs +++ b/nexus/tests/integration_tests/endpoints.rs @@ -199,7 +199,7 @@ lazy_static! { pub static ref DEMO_INSTANCE_NICS_URL: String = format!("{}/network-interfaces", *DEMO_INSTANCE_URL); pub static ref DEMO_INSTANCE_SERIAL_URL: String = - format!("{}/serial", *DEMO_INSTANCE_URL); + format!("{}/serial-console", *DEMO_INSTANCE_URL); pub static ref DEMO_INSTANCE_CREATE: params::InstanceCreate = params::InstanceCreate { identity: IdentityMetadataCreateParams { @@ -299,7 +299,7 @@ lazy_static! { ).unwrap()); pub static ref DEMO_IP_POOL_RANGES_URL: String = format!("{}/ranges", *DEMO_IP_POOL_URL); pub static ref DEMO_IP_POOL_RANGES_ADD_URL: String = format!("{}/add", *DEMO_IP_POOL_RANGES_URL); - pub static ref DEMO_IP_POOL_RANGES_DEL_URL: String = format!("{}/delete", *DEMO_IP_POOL_RANGES_URL); + pub static ref DEMO_IP_POOL_RANGES_DEL_URL: String = format!("{}/remove", *DEMO_IP_POOL_RANGES_URL); // Snapshots pub static ref DEMO_SNAPSHOT_NAME: Name = "demo-snapshot".parse().unwrap(); @@ -456,7 +456,7 @@ impl AllowedMethod { lazy_static! { pub static ref URL_USERS_DB_INIT: String = - format!("/users_builtin/{}", authn::USER_DB_INIT.name); + format!("/system/user/{}", authn::USER_DB_INIT.name); /// List of endpoints to be verified pub static ref VERIFY_ENDPOINTS: Vec = vec![ @@ -1000,7 +1000,7 @@ lazy_static! { }, VerifyEndpoint { - url: "/users_builtin", + url: "/system/user", visibility: Visibility::Public, allowed_methods: vec![AllowedMethod::Get], }, diff --git a/nexus/tests/integration_tests/instances.rs b/nexus/tests/integration_tests/instances.rs index 4f0cb41271..221b5bc9e7 100644 --- a/nexus/tests/integration_tests/instances.rs +++ b/nexus/tests/integration_tests/instances.rs @@ -2298,17 +2298,17 @@ async fn test_instance_serial(cptestctx: &ControlPlaneTestContext) { let nexus = &apictx.nexus; // Create a project that we'll use for testing. - create_ip_pool(&client, POOL_NAME, None).await; - create_organization(&client, ORGANIZATION_NAME).await; + create_ip_pool(client, POOL_NAME, None).await; + create_organization(client, ORGANIZATION_NAME).await; let url_instances = format!( "/organizations/{}/projects/{}/instances", ORGANIZATION_NAME, PROJECT_NAME ); - let _ = create_project(&client, ORGANIZATION_NAME, PROJECT_NAME).await; + let _ = create_project(client, ORGANIZATION_NAME, PROJECT_NAME).await; // Make sure we get a 404 if we try to access the serial console before creation. let instance_serial_url = - format!("{}/kris-picks/serial?from_start=0", url_instances); + format!("{}/kris-picks/serial-console?from_start=0", url_instances); let error: HttpErrorResponseBody = NexusRequest::expect_failure( client, StatusCode::NOT_FOUND, diff --git a/nexus/tests/integration_tests/ip_pools.rs b/nexus/tests/integration_tests/ip_pools.rs index e6f1a6e863..d3fbcc22db 100644 --- a/nexus/tests/integration_tests/ip_pools.rs +++ b/nexus/tests/integration_tests/ip_pools.rs @@ -188,8 +188,8 @@ async fn test_ip_pool_basic_crud(cptestctx: &ControlPlaneTestContext) { // that the modification time has changed. let new_pool_name = "p1"; let new_ip_pool_url = format!("{}/{}", ip_pools_url, new_pool_name); - let new_ip_pool_del_range_url = - format!("{}/ranges/delete", new_ip_pool_url); + let new_ip_pool_rem_range_url = + format!("{}/ranges/remove", new_ip_pool_url); let updates = IpPoolUpdate { identity: IdentityMetadataUpdateParams { name: Some(String::from(new_pool_name).parse().unwrap()), @@ -249,7 +249,7 @@ async fn test_ip_pool_basic_crud(cptestctx: &ControlPlaneTestContext) { // Delete the range, then verify we can delete the pool and everything looks // gravy. NexusRequest::new( - RequestBuilder::new(client, Method::POST, &new_ip_pool_del_range_url) + RequestBuilder::new(client, Method::POST, &new_ip_pool_rem_range_url) .body(Some(&range)) .expect_status(Some(StatusCode::NO_CONTENT)), ) @@ -566,7 +566,7 @@ async fn test_ip_range_delete_with_allocated_external_ip_fails( let ip_pool_url = format!("{}/{}", ip_pools_url, pool_name); let ip_pool_ranges_url = format!("{}/ranges", ip_pool_url); let ip_pool_add_range_url = format!("{}/add", ip_pool_ranges_url); - let ip_pool_del_range_url = format!("{}/delete", ip_pool_ranges_url); + let ip_pool_rem_range_url = format!("{}/remove", ip_pool_ranges_url); // Add a pool and range. let params = IpPoolCreate { @@ -618,7 +618,7 @@ async fn test_ip_range_delete_with_allocated_external_ip_fails( // We should not be able to delete the range, since there's an external IP // address in use out of it. let err: HttpErrorResponseBody = NexusRequest::new( - RequestBuilder::new(client, Method::POST, &ip_pool_del_range_url) + RequestBuilder::new(client, Method::POST, &ip_pool_rem_range_url) .body(Some(&range)) .expect_status(Some(StatusCode::BAD_REQUEST)), ) @@ -663,7 +663,7 @@ async fn test_ip_range_delete_with_allocated_external_ip_fails( // Now verify that we _can_ delete the IP range. NexusRequest::new( - RequestBuilder::new(client, Method::POST, &ip_pool_del_range_url) + RequestBuilder::new(client, Method::POST, &ip_pool_rem_range_url) .body(Some(&range)) .expect_status(Some(StatusCode::NO_CONTENT)), ) diff --git a/nexus/tests/integration_tests/users_builtin.rs b/nexus/tests/integration_tests/users_builtin.rs index bb8317e9d6..baa1f6fcf6 100644 --- a/nexus/tests/integration_tests/users_builtin.rs +++ b/nexus/tests/integration_tests/users_builtin.rs @@ -13,7 +13,7 @@ use std::collections::BTreeMap; async fn test_users_builtin(cptestctx: &ControlPlaneTestContext) { let testctx = &cptestctx.external_client; - let mut users = NexusRequest::object_get(&testctx, "/users_builtin") + let mut users = NexusRequest::object_get(testctx, "/system/user") .authn_as(AuthnMode::PrivilegedUser) .execute() .await diff --git a/nexus/tests/output/nexus_tags.txt b/nexus/tests/output/nexus_tags.txt index 95d99abfe4..2ceaa81bdc 100644 --- a/nexus/tests/output/nexus_tags.txt +++ b/nexus/tests/output/nexus_tags.txt @@ -1,14 +1,16 @@ API operations found with tag "disks" OPERATION ID URL PATH -project_disks_delete_disk /organizations/{organization_name}/projects/{project_name}/disks/{disk_name} -project_disks_get /organizations/{organization_name}/projects/{project_name}/disks -project_disks_get_disk /organizations/{organization_name}/projects/{project_name}/disks/{disk_name} -project_disks_post /organizations/{organization_name}/projects/{project_name}/disks +disk_create /organizations/{organization_name}/projects/{project_name}/disks +disk_delete /organizations/{organization_name}/projects/{project_name}/disks/{disk_name} +disk_list /organizations/{organization_name}/projects/{project_name}/disks +disk_view /organizations/{organization_name}/projects/{project_name}/disks/{disk_name} -API operations found with tag "firewall" +API operations found with tag "hardware" OPERATION ID URL PATH -vpc_firewall_rules_get /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules -vpc_firewall_rules_put /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules +rack_list /hardware/racks +rack_view /hardware/racks/{rack_id} +sled_list /hardware/sleds +sled_view /hardware/sleds/{sled_id} API operations found with tag "hidden" OPERATION ID URL PATH @@ -22,48 +24,48 @@ spoof_login /login API operations found with tag "images" OPERATION ID URL PATH -project_images_delete_image /organizations/{organization_name}/projects/{project_name}/images/{image_name} -project_images_get /organizations/{organization_name}/projects/{project_name}/images -project_images_get_image /organizations/{organization_name}/projects/{project_name}/images/{image_name} -project_images_post /organizations/{organization_name}/projects/{project_name}/images +image_create /organizations/{organization_name}/projects/{project_name}/images +image_delete /organizations/{organization_name}/projects/{project_name}/images/{image_name} +image_list /organizations/{organization_name}/projects/{project_name}/images +image_view /organizations/{organization_name}/projects/{project_name}/images/{image_name} API operations found with tag "images:global" OPERATION ID URL PATH -images_delete_image /images/{image_name} -images_get /images -images_get_image /images/{image_name} -images_post /images +image_global_create /images +image_global_delete /images/{image_name} +image_global_list /images +image_global_view /images/{image_name} API operations found with tag "instances" OPERATION ID URL PATH -instance_disks_attach /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/attach -instance_disks_detach /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/detach -instance_disks_get /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks -instance_network_interfaces_delete_interface /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name} -instance_network_interfaces_get /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces -instance_network_interfaces_get_interface /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name} -instance_network_interfaces_post /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces -instance_network_interfaces_put_interface /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name} -project_instances_delete_instance /organizations/{organization_name}/projects/{project_name}/instances/{instance_name} -project_instances_get /organizations/{organization_name}/projects/{project_name}/instances -project_instances_get_instance /organizations/{organization_name}/projects/{project_name}/instances/{instance_name} -project_instances_instance_reboot /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/reboot -project_instances_instance_serial_get /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/serial -project_instances_instance_start /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/start -project_instances_instance_stop /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/stop -project_instances_migrate_instance /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/migrate -project_instances_post /organizations/{organization_name}/projects/{project_name}/instances +instance_create /organizations/{organization_name}/projects/{project_name}/instances +instance_delete /organizations/{organization_name}/projects/{project_name}/instances/{instance_name} +instance_disk_attach /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/attach +instance_disk_detach /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/detach +instance_disk_list /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks +instance_list /organizations/{organization_name}/projects/{project_name}/instances +instance_migrate /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/migrate +instance_network_interface_create /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces +instance_network_interface_delete /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name} +instance_network_interface_list /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces +instance_network_interface_update /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name} +instance_network_interface_view /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name} +instance_reboot /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/reboot +instance_serial_console /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/serial-console +instance_start /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/start +instance_stop /organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/stop +instance_view /organizations/{organization_name}/projects/{project_name}/instances/{instance_name} API operations found with tag "ip-pools" OPERATION ID URL PATH -ip_pool_ranges_add /ip-pools/{pool_name}/ranges/add -ip_pool_ranges_delete /ip-pools/{pool_name}/ranges/delete -ip_pool_ranges_get /ip-pools/{pool_name}/ranges -ip_pools_delete_ip_pool /ip-pools/{pool_name} -ip_pools_get /ip-pools -ip_pools_get_ip_pool /ip-pools/{pool_name} -ip_pools_post /ip-pools -ip_pools_put_ip_pool /ip-pools/{pool_name} +ip_pool_create /ip-pools +ip_pool_delete /ip-pools/{pool_name} +ip_pool_list /ip-pools +ip_pool_range_add /ip-pools/{pool_name}/ranges/add +ip_pool_range_list /ip-pools/{pool_name}/ranges +ip_pool_range_remove /ip-pools/{pool_name}/ranges/remove +ip_pool_update /ip-pools/{pool_name} +ip_pool_view /ip-pools/{pool_name} API operations found with tag "login" OPERATION ID URL PATH @@ -76,105 +78,70 @@ timeseries_schema_get /timeseries/schema API operations found with tag "organizations" OPERATION ID URL PATH -organization_get_policy /organizations/{organization_name}/policy -organization_put_policy /organizations/{organization_name}/policy -organizations_delete_organization /organizations/{organization_name} -organizations_get /organizations -organizations_get_organization /organizations/{organization_name} -organizations_post /organizations -organizations_put_organization /organizations/{organization_name} +organization_create /organizations +organization_delete /organizations/{organization_name} +organization_list /organizations +organization_policy_update /organizations/{organization_name}/policy +organization_policy_view /organizations/{organization_name}/policy +organization_update /organizations/{organization_name} +organization_view /organizations/{organization_name} API operations found with tag "policy" OPERATION ID URL PATH -policy_get /policy -policy_put /policy +policy_update /policy +policy_view /policy API operations found with tag "projects" OPERATION ID URL PATH -organization_projects_delete_project /organizations/{organization_name}/projects/{project_name} -organization_projects_get /organizations/{organization_name}/projects -organization_projects_get_project /organizations/{organization_name}/projects/{project_name} -organization_projects_get_project_policy /organizations/{organization_name}/projects/{project_name}/policy -organization_projects_post /organizations/{organization_name}/projects -organization_projects_put_project /organizations/{organization_name}/projects/{project_name} -organization_projects_put_project_policy /organizations/{organization_name}/projects/{project_name}/policy - -API operations found with tag "racks" -OPERATION ID URL PATH -hardware_racks_get /hardware/racks -hardware_racks_get_rack /hardware/racks/{rack_id} +project_create /organizations/{organization_name}/projects +project_delete /organizations/{organization_name}/projects/{project_name} +project_list /organizations/{organization_name}/projects +project_policy_update /organizations/{organization_name}/projects/{project_name}/policy +project_policy_view /organizations/{organization_name}/projects/{project_name}/policy +project_update /organizations/{organization_name}/projects/{project_name} +project_view /organizations/{organization_name}/projects/{project_name} API operations found with tag "roles" OPERATION ID URL PATH -roles_get /roles -roles_get_role /roles/{role_name} - -API operations found with tag "routers" -OPERATION ID URL PATH -vpc_routers_delete_router /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name} -vpc_routers_get /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers -vpc_routers_get_router /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name} -vpc_routers_post /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers -vpc_routers_put_router /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name} - -API operations found with tag "routes" -OPERATION ID URL PATH -routers_routes_delete_route /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name} -routers_routes_get /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes -routers_routes_get_route /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name} -routers_routes_post /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes -routers_routes_put_route /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name} +role_list /roles +role_view /roles/{role_name} API operations found with tag "sagas" OPERATION ID URL PATH -sagas_get /sagas -sagas_get_saga /sagas/{saga_id} +saga_list /sagas +saga_view /sagas/{saga_id} -API operations found with tag "silos" +API operations found with tag "session" OPERATION ID URL PATH -silo_saml_idp_create /silos/{silo_name}/saml_identity_providers -silo_saml_idp_fetch /silos/{silo_name}/saml_identity_providers/{provider_name} -silo_users_get /users -silos_delete_silo /silos/{silo_name} -silos_get /silos -silos_get_identity_providers /silos/{silo_name}/identity_providers -silos_get_silo /silos/{silo_name} -silos_get_silo_policy /silos/{silo_name}/policy -silos_post /silos -silos_put_silo_policy /silos/{silo_name}/policy +session_sshkey_create /session/me/sshkeys +session_sshkey_delete /session/me/sshkeys/{ssh_key_name} +session_sshkey_list /session/me/sshkeys +session_sshkey_view /session/me/sshkeys/{ssh_key_name} -API operations found with tag "sleds" +API operations found with tag "silos" OPERATION ID URL PATH -hardware_sleds_get /hardware/sleds -hardware_sleds_get_sled /hardware/sleds/{sled_id} +silo_create /silos +silo_delete /silos/{silo_name} +silo_identity_provider_create /silos/{silo_name}/saml_identity_providers +silo_identity_provider_list /silos/{silo_name}/identity_providers +silo_identity_provider_view /silos/{silo_name}/saml_identity_providers/{provider_name} +silo_list /silos +silo_policy_update /silos/{silo_name}/policy +silo_policy_view /silos/{silo_name}/policy +silo_view /silos/{silo_name} +user_list /users API operations found with tag "snapshots" OPERATION ID URL PATH -project_snapshots_delete_snapshot /organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name} -project_snapshots_get /organizations/{organization_name}/projects/{project_name}/snapshots -project_snapshots_get_snapshot /organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name} -project_snapshots_post /organizations/{organization_name}/projects/{project_name}/snapshots - -API operations found with tag "sshkeys" -OPERATION ID URL PATH -sshkeys_delete_key /session/me/sshkeys/{ssh_key_name} -sshkeys_get /session/me/sshkeys -sshkeys_get_key /session/me/sshkeys/{ssh_key_name} -sshkeys_post /session/me/sshkeys - -API operations found with tag "subnets" -OPERATION ID URL PATH -subnet_network_interfaces_get /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}/network-interfaces -vpc_subnets_delete_subnet /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name} -vpc_subnets_get /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets -vpc_subnets_get_subnet /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name} -vpc_subnets_post /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets -vpc_subnets_put_subnet /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name} +snapshot_create /organizations/{organization_name}/projects/{project_name}/snapshots +snapshot_delete /organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name} +snapshot_list /organizations/{organization_name}/projects/{project_name}/snapshots +snapshot_view /organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name} API operations found with tag "system" OPERATION ID URL PATH -builtin_users_get /users_builtin -builtin_users_get_user /users_builtin/{user_name} +system_user_list /system/user +system_user_view /system/user/{user_name} API operations found with tag "updates" OPERATION ID URL PATH @@ -182,9 +149,27 @@ updates_refresh /updates/refresh API operations found with tag "vpcs" OPERATION ID URL PATH -project_vpcs_delete_vpc /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name} -project_vpcs_get /organizations/{organization_name}/projects/{project_name}/vpcs -project_vpcs_get_vpc /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name} -project_vpcs_post /organizations/{organization_name}/projects/{project_name}/vpcs -project_vpcs_put_vpc /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name} +vpc_create /organizations/{organization_name}/projects/{project_name}/vpcs +vpc_delete /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name} +vpc_firewall_rules_update /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules +vpc_firewall_rules_view /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules +vpc_list /organizations/{organization_name}/projects/{project_name}/vpcs +vpc_router_create /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers +vpc_router_delete /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name} +vpc_router_list /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers +vpc_router_route_create /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes +vpc_router_route_delete /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name} +vpc_router_route_list /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes +vpc_router_route_update /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name} +vpc_router_route_view /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name} +vpc_router_update /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name} +vpc_router_view /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name} +vpc_subnet_create /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets +vpc_subnet_delete /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name} +vpc_subnet_list /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets +vpc_subnet_list_network_interfaces /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}/network-interfaces +vpc_subnet_update /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name} +vpc_subnet_view /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name} +vpc_update /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name} +vpc_view /organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name} diff --git a/nexus/tests/output/uncovered-authz-endpoints.txt b/nexus/tests/output/uncovered-authz-endpoints.txt index 04fd2cc3a8..dd197825a4 100644 --- a/nexus/tests/output/uncovered-authz-endpoints.txt +++ b/nexus/tests/output/uncovered-authz-endpoints.txt @@ -1,16 +1,16 @@ API endpoints with no coverage in authz tests: -sshkeys_delete_key (delete "/session/me/sshkeys/{ssh_key_name}") +session_sshkey_delete (delete "/session/me/sshkeys/{ssh_key_name}") device_auth_verify (get "/device/verify") login (get "/login/{silo_name}/{provider_name}") session_me (get "/session/me") -sshkeys_get (get "/session/me/sshkeys") -sshkeys_get_key (get "/session/me/sshkeys/{ssh_key_name}") -silos_get_identity_providers (get "/silos/{silo_name}/identity_providers") -silo_users_get (get "/users") +session_sshkey_list (get "/session/me/sshkeys") +session_sshkey_view (get "/session/me/sshkeys/{ssh_key_name}") +silo_identity_provider_list (get "/silos/{silo_name}/identity_providers") +user_list (get "/users") device_auth_request (post "/device/auth") device_auth_confirm (post "/device/confirm") device_access_token (post "/device/token") spoof_login (post "/login") consume_credentials (post "/login/{silo_name}/{provider_name}") logout (post "/logout") -sshkeys_post (post "/session/me/sshkeys") +session_sshkey_create (post "/session/me/sshkeys") diff --git a/openapi/nexus.json b/openapi/nexus.json index 9e354e60d1..b21a90036d 100644 --- a/openapi/nexus.json +++ b/openapi/nexus.json @@ -146,10 +146,10 @@ "/hardware/racks": { "get": { "tags": [ - "racks" + "hardware" ], "summary": "List racks in the system.", - "operationId": "hardware_racks_get", + "operationId": "rack_list", "parameters": [ { "in": "query", @@ -206,10 +206,10 @@ "/hardware/racks/{rack_id}": { "get": { "tags": [ - "racks" + "hardware" ], "summary": "Fetch information about a particular rack.", - "operationId": "hardware_racks_get_rack", + "operationId": "rack_view", "parameters": [ { "in": "path", @@ -246,10 +246,10 @@ "/hardware/sleds": { "get": { "tags": [ - "sleds" + "hardware" ], "summary": "List sleds in the system.", - "operationId": "hardware_sleds_get", + "operationId": "sled_list", "parameters": [ { "in": "query", @@ -306,10 +306,10 @@ "/hardware/sleds/{sled_id}": { "get": { "tags": [ - "sleds" + "hardware" ], "summary": "Fetch information about a sled in the system.", - "operationId": "hardware_sleds_get_sled", + "operationId": "sled_view", "parameters": [ { "in": "path", @@ -350,7 +350,7 @@ ], "summary": "List global images.", "description": "Returns a list of all the global images. Global images are returned sorted by creation date, with the most recent images appearing first.", - "operationId": "images_get", + "operationId": "image_global_list", "parameters": [ { "in": "query", @@ -409,7 +409,7 @@ ], "summary": "Create a global image.", "description": "Create a new global image. This image can then be used by any user as a base for instances.", - "operationId": "images_post", + "operationId": "image_global_create", "requestBody": { "content": { "application/json": { @@ -447,7 +447,7 @@ ], "summary": "Get a global image.", "description": "Returns the details of a specific global image.", - "operationId": "images_get_image", + "operationId": "image_global_view", "parameters": [ { "in": "path", @@ -484,7 +484,7 @@ ], "summary": "Delete a global image.", "description": "Permanently delete a global image. This operation cannot be undone. Any instances using the global image will continue to run, however new instances can not be created with this image.", - "operationId": "images_delete_image", + "operationId": "image_global_delete", "parameters": [ { "in": "path", @@ -515,7 +515,7 @@ "ip-pools" ], "summary": "List IP Pools.", - "operationId": "ip_pools_get", + "operationId": "ip_pool_list", "parameters": [ { "in": "query", @@ -573,7 +573,7 @@ "ip-pools" ], "summary": "Create a new IP Pool.", - "operationId": "ip_pools_post", + "operationId": "ip_pool_create", "requestBody": { "content": { "application/json": { @@ -610,7 +610,7 @@ "ip-pools" ], "summary": "Fetch a single IP Pool.", - "operationId": "ip_pools_get_ip_pool", + "operationId": "ip_pool_view", "parameters": [ { "in": "path", @@ -646,7 +646,7 @@ "ip-pools" ], "summary": "Update an IP Pool.", - "operationId": "ip_pools_put_ip_pool", + "operationId": "ip_pool_update", "parameters": [ { "in": "path", @@ -692,7 +692,7 @@ "ip-pools" ], "summary": "Delete an IP Pool.", - "operationId": "ip_pools_delete_ip_pool", + "operationId": "ip_pool_delete", "parameters": [ { "in": "path", @@ -724,7 +724,7 @@ ], "summary": "List the ranges of IP addresses within an existing IP Pool.", "description": "Note that ranges are listed sorted by their first address.", - "operationId": "ip_pool_ranges_get", + "operationId": "ip_pool_range_list", "parameters": [ { "in": "path", @@ -785,7 +785,7 @@ "ip-pools" ], "summary": "Add a new range to an existing IP Pool.", - "operationId": "ip_pool_ranges_add", + "operationId": "ip_pool_range_add", "parameters": [ { "in": "path", @@ -827,13 +827,13 @@ } } }, - "/ip-pools/{pool_name}/ranges/delete": { + "/ip-pools/{pool_name}/ranges/remove": { "post": { "tags": [ "ip-pools" ], "summary": "Remove a range from an existing IP Pool.", - "operationId": "ip_pool_ranges_delete", + "operationId": "ip_pool_range_remove", "parameters": [ { "in": "path", @@ -1009,7 +1009,7 @@ "organizations" ], "summary": "List all organizations.", - "operationId": "organizations_get", + "operationId": "organization_list", "parameters": [ { "in": "query", @@ -1067,7 +1067,7 @@ "organizations" ], "summary": "Create a new organization.", - "operationId": "organizations_post", + "operationId": "organization_create", "requestBody": { "content": { "application/json": { @@ -1104,7 +1104,7 @@ "organizations" ], "summary": "Fetch a specific organization", - "operationId": "organizations_get_organization", + "operationId": "organization_view", "parameters": [ { "in": "path", @@ -1141,7 +1141,7 @@ "organizations" ], "summary": "Update a specific organization.", - "operationId": "organizations_put_organization", + "operationId": "organization_update", "parameters": [ { "in": "path", @@ -1188,7 +1188,7 @@ "organizations" ], "summary": "Delete a specific organization.", - "operationId": "organizations_delete_organization", + "operationId": "organization_delete", "parameters": [ { "in": "path", @@ -1220,7 +1220,7 @@ "organizations" ], "summary": "Fetch the IAM policy for this Organization", - "operationId": "organization_get_policy", + "operationId": "organization_policy_view", "parameters": [ { "in": "path", @@ -1257,7 +1257,7 @@ "organizations" ], "summary": "Update the IAM policy for this Organization", - "operationId": "organization_put_policy", + "operationId": "organization_policy_update", "parameters": [ { "in": "path", @@ -1306,7 +1306,7 @@ "projects" ], "summary": "List all projects.", - "operationId": "organization_projects_get", + "operationId": "project_list", "parameters": [ { "in": "query", @@ -1374,7 +1374,7 @@ "projects" ], "summary": "Create a new project.", - "operationId": "organization_projects_post", + "operationId": "project_create", "parameters": [ { "in": "path", @@ -1423,7 +1423,7 @@ "projects" ], "summary": "Fetch a specific project", - "operationId": "organization_projects_get_project", + "operationId": "project_view", "parameters": [ { "in": "path", @@ -1470,7 +1470,7 @@ "projects" ], "summary": "Update a specific project.", - "operationId": "organization_projects_put_project", + "operationId": "project_update", "parameters": [ { "in": "path", @@ -1527,7 +1527,7 @@ "projects" ], "summary": "Delete a specific project.", - "operationId": "organization_projects_delete_project", + "operationId": "project_delete", "parameters": [ { "in": "path", @@ -1569,7 +1569,7 @@ "disks" ], "summary": "List disks in a project.", - "operationId": "project_disks_get", + "operationId": "disk_list", "parameters": [ { "in": "query", @@ -1647,7 +1647,7 @@ "disks" ], "summary": "Create a disk in a project.", - "operationId": "project_disks_post", + "operationId": "disk_create", "parameters": [ { "in": "path", @@ -1706,7 +1706,7 @@ "disks" ], "summary": "Fetch a single disk in a project.", - "operationId": "project_disks_get_disk", + "operationId": "disk_view", "parameters": [ { "in": "path", @@ -1760,7 +1760,7 @@ "disks" ], "summary": "Delete a disk from a project.", - "operationId": "project_disks_delete_disk", + "operationId": "disk_delete", "parameters": [ { "in": "path", @@ -1810,7 +1810,7 @@ ], "summary": "List images", "description": "List images in a project. The images are returned sorted by creation date, with the most recent images appearing first.", - "operationId": "project_images_get", + "operationId": "image_list", "parameters": [ { "in": "query", @@ -1889,7 +1889,7 @@ ], "summary": "Create an image", "description": "Create a new image in a project.", - "operationId": "project_images_post", + "operationId": "image_create", "parameters": [ { "in": "path", @@ -1949,7 +1949,7 @@ ], "summary": "Get an image", "description": "Get the details of a specific image in a project.", - "operationId": "project_images_get_image", + "operationId": "image_view", "parameters": [ { "in": "path", @@ -2004,7 +2004,7 @@ ], "summary": "Delete an image", "description": "Permanently delete an image from a project. This operation cannot be undone. Any instances in the project using the image will continue to run, however new instances can not be created with this image.", - "operationId": "project_images_delete_image", + "operationId": "image_delete", "parameters": [ { "in": "path", @@ -2053,7 +2053,7 @@ "instances" ], "summary": "List instances in a project.", - "operationId": "project_instances_get", + "operationId": "instance_list", "parameters": [ { "in": "query", @@ -2131,7 +2131,7 @@ "instances" ], "summary": "Create an instance in a project.", - "operationId": "project_instances_post", + "operationId": "instance_create", "parameters": [ { "in": "path", @@ -2190,7 +2190,7 @@ "instances" ], "summary": "Get an instance in a project.", - "operationId": "project_instances_get_instance", + "operationId": "instance_view", "parameters": [ { "in": "path", @@ -2244,7 +2244,7 @@ "instances" ], "summary": "Delete an instance from a project.", - "operationId": "project_instances_delete_instance", + "operationId": "instance_delete", "parameters": [ { "in": "path", @@ -2293,7 +2293,7 @@ "instances" ], "summary": "List disks attached to this instance.", - "operationId": "instance_disks_get", + "operationId": "instance_disk_list", "parameters": [ { "in": "query", @@ -2379,7 +2379,7 @@ "tags": [ "instances" ], - "operationId": "instance_disks_attach", + "operationId": "instance_disk_attach", "parameters": [ { "in": "path", @@ -2444,7 +2444,7 @@ "tags": [ "instances" ], - "operationId": "instance_disks_detach", + "operationId": "instance_disk_detach", "parameters": [ { "in": "path", @@ -2510,7 +2510,7 @@ "instances" ], "summary": "Migrate an instance to a different propolis-server, possibly on a different sled.", - "operationId": "project_instances_migrate_instance", + "operationId": "instance_migrate", "parameters": [ { "in": "path", @@ -2576,7 +2576,7 @@ "instances" ], "summary": "List network interfaces attached to this instance.", - "operationId": "instance_network_interfaces_get", + "operationId": "instance_network_interface_list", "parameters": [ { "in": "query", @@ -2661,7 +2661,7 @@ "instances" ], "summary": "Create a network interface for an instance.", - "operationId": "instance_network_interfaces_post", + "operationId": "instance_network_interface_create", "parameters": [ { "in": "path", @@ -2727,7 +2727,7 @@ "instances" ], "summary": "Get an interface attached to an instance.", - "operationId": "instance_network_interfaces_get_interface", + "operationId": "instance_network_interface_view", "parameters": [ { "in": "path", @@ -2790,7 +2790,7 @@ "instances" ], "summary": "Update information about an instance's network interface", - "operationId": "instance_network_interfaces_put_interface", + "operationId": "instance_network_interface_update", "parameters": [ { "in": "path", @@ -2864,7 +2864,7 @@ ], "summary": "Detach a network interface from an instance.", "description": "Note that the primary interface for an instance cannot be deleted if there are any secondary interfaces. A new primary interface must be designated first. The primary interface can be deleted if there are no secondary interfaces.", - "operationId": "instance_network_interfaces_delete_interface", + "operationId": "instance_network_interface_delete", "parameters": [ { "in": "path", @@ -2922,7 +2922,7 @@ "instances" ], "summary": "Reboot an instance.", - "operationId": "project_instances_instance_reboot", + "operationId": "instance_reboot", "parameters": [ { "in": "path", @@ -2972,13 +2972,13 @@ } } }, - "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/serial": { + "/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/serial-console": { "get": { "tags": [ "instances" ], "summary": "Get contents of an instance's serial console.", - "operationId": "project_instances_instance_serial_get", + "operationId": "instance_serial_console", "parameters": [ { "in": "path", @@ -3070,7 +3070,7 @@ "instances" ], "summary": "Boot an instance.", - "operationId": "project_instances_instance_start", + "operationId": "instance_start", "parameters": [ { "in": "path", @@ -3126,7 +3126,7 @@ "instances" ], "summary": "Halt an instance.", - "operationId": "project_instances_instance_stop", + "operationId": "instance_stop", "parameters": [ { "in": "path", @@ -3182,7 +3182,7 @@ "projects" ], "summary": "Fetch the IAM policy for this Project", - "operationId": "organization_projects_get_project_policy", + "operationId": "project_policy_view", "parameters": [ { "in": "path", @@ -3229,7 +3229,7 @@ "projects" ], "summary": "Update the IAM policy for this Project", - "operationId": "organization_projects_put_project_policy", + "operationId": "project_policy_update", "parameters": [ { "in": "path", @@ -3288,7 +3288,7 @@ "snapshots" ], "summary": "List snapshots in a project.", - "operationId": "project_snapshots_get", + "operationId": "snapshot_list", "parameters": [ { "in": "query", @@ -3366,7 +3366,7 @@ "snapshots" ], "summary": "Create a snapshot of a disk.", - "operationId": "project_snapshots_post", + "operationId": "snapshot_create", "parameters": [ { "in": "path", @@ -3425,7 +3425,7 @@ "snapshots" ], "summary": "Get a snapshot in a project.", - "operationId": "project_snapshots_get_snapshot", + "operationId": "snapshot_view", "parameters": [ { "in": "path", @@ -3479,7 +3479,7 @@ "snapshots" ], "summary": "Delete a snapshot from a project.", - "operationId": "project_snapshots_delete_snapshot", + "operationId": "snapshot_delete", "parameters": [ { "in": "path", @@ -3528,7 +3528,7 @@ "vpcs" ], "summary": "List VPCs in a project.", - "operationId": "project_vpcs_get", + "operationId": "vpc_list", "parameters": [ { "in": "query", @@ -3606,7 +3606,7 @@ "vpcs" ], "summary": "Create a VPC in a project.", - "operationId": "project_vpcs_post", + "operationId": "vpc_create", "parameters": [ { "in": "path", @@ -3665,7 +3665,7 @@ "vpcs" ], "summary": "Get a VPC in a project.", - "operationId": "project_vpcs_get_vpc", + "operationId": "vpc_view", "parameters": [ { "in": "path", @@ -3719,7 +3719,7 @@ "vpcs" ], "summary": "Update a VPC.", - "operationId": "project_vpcs_put_vpc", + "operationId": "vpc_update", "parameters": [ { "in": "path", @@ -3783,7 +3783,7 @@ "vpcs" ], "summary": "Delete a vpc from a project.", - "operationId": "project_vpcs_delete_vpc", + "operationId": "vpc_delete", "parameters": [ { "in": "path", @@ -3829,10 +3829,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules": { "get": { "tags": [ - "firewall" + "vpcs" ], "summary": "List firewall rules for a VPC.", - "operationId": "vpc_firewall_rules_get", + "operationId": "vpc_firewall_rules_view", "parameters": [ { "in": "path", @@ -3883,10 +3883,10 @@ }, "put": { "tags": [ - "firewall" + "vpcs" ], "summary": "Replace the firewall rules for a VPC", - "operationId": "vpc_firewall_rules_put", + "operationId": "vpc_firewall_rules_update", "parameters": [ { "in": "path", @@ -3949,10 +3949,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers": { "get": { "tags": [ - "routers" + "vpcs" ], "summary": "List VPC Custom and System Routers", - "operationId": "vpc_routers_get", + "operationId": "vpc_router_list", "parameters": [ { "in": "query", @@ -4034,10 +4034,10 @@ }, "post": { "tags": [ - "routers" + "vpcs" ], "summary": "Create a VPC Router", - "operationId": "vpc_routers_post", + "operationId": "vpc_router_create", "parameters": [ { "in": "path", @@ -4100,10 +4100,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}": { "get": { "tags": [ - "routers" + "vpcs" ], "summary": "Get a VPC Router", - "operationId": "vpc_routers_get_router", + "operationId": "vpc_router_view", "parameters": [ { "in": "path", @@ -4163,10 +4163,10 @@ }, "put": { "tags": [ - "routers" + "vpcs" ], "summary": "Update a VPC Router", - "operationId": "vpc_routers_put_router", + "operationId": "vpc_router_update", "parameters": [ { "in": "path", @@ -4236,10 +4236,10 @@ }, "delete": { "tags": [ - "routers" + "vpcs" ], "summary": "Delete a router from its VPC", - "operationId": "vpc_routers_delete_router", + "operationId": "vpc_router_delete", "parameters": [ { "in": "path", @@ -4294,10 +4294,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes": { "get": { "tags": [ - "routes" + "vpcs" ], "summary": "List a Router's routes", - "operationId": "routers_routes_get", + "operationId": "vpc_router_route_list", "parameters": [ { "in": "query", @@ -4388,10 +4388,10 @@ }, "post": { "tags": [ - "routes" + "vpcs" ], "summary": "Create a VPC Router", - "operationId": "routers_routes_post", + "operationId": "vpc_router_route_create", "parameters": [ { "in": "path", @@ -4463,10 +4463,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}": { "get": { "tags": [ - "routes" + "vpcs" ], "summary": "Get a VPC Router route", - "operationId": "routers_routes_get_route", + "operationId": "vpc_router_route_view", "parameters": [ { "in": "path", @@ -4535,10 +4535,10 @@ }, "put": { "tags": [ - "routes" + "vpcs" ], "summary": "Update a Router route", - "operationId": "routers_routes_put_route", + "operationId": "vpc_router_route_update", "parameters": [ { "in": "path", @@ -4617,10 +4617,10 @@ }, "delete": { "tags": [ - "routes" + "vpcs" ], "summary": "Delete a route from its router", - "operationId": "routers_routes_delete_route", + "operationId": "vpc_router_route_delete", "parameters": [ { "in": "path", @@ -4684,10 +4684,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets": { "get": { "tags": [ - "subnets" + "vpcs" ], "summary": "List subnets in a VPC.", - "operationId": "vpc_subnets_get", + "operationId": "vpc_subnet_list", "parameters": [ { "in": "query", @@ -4769,10 +4769,10 @@ }, "post": { "tags": [ - "subnets" + "vpcs" ], "summary": "Create a subnet in a VPC.", - "operationId": "vpc_subnets_post", + "operationId": "vpc_subnet_create", "parameters": [ { "in": "path", @@ -4835,10 +4835,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}": { "get": { "tags": [ - "subnets" + "vpcs" ], "summary": "Get subnet in a VPC.", - "operationId": "vpc_subnets_get_subnet", + "operationId": "vpc_subnet_view", "parameters": [ { "in": "path", @@ -4898,10 +4898,10 @@ }, "put": { "tags": [ - "subnets" + "vpcs" ], "summary": "Update a VPC Subnet.", - "operationId": "vpc_subnets_put_subnet", + "operationId": "vpc_subnet_update", "parameters": [ { "in": "path", @@ -4971,10 +4971,10 @@ }, "delete": { "tags": [ - "subnets" + "vpcs" ], "summary": "Delete a subnet from a VPC.", - "operationId": "vpc_subnets_delete_subnet", + "operationId": "vpc_subnet_delete", "parameters": [ { "in": "path", @@ -5029,10 +5029,10 @@ "/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}/network-interfaces": { "get": { "tags": [ - "subnets" + "vpcs" ], "summary": "List network interfaces in a VPC subnet.", - "operationId": "subnet_network_interfaces_get", + "operationId": "vpc_subnet_list_network_interfaces", "parameters": [ { "in": "query", @@ -5128,7 +5128,7 @@ "policy" ], "summary": "Fetch the top-level IAM policy", - "operationId": "policy_get", + "operationId": "policy_view", "responses": { "200": { "description": "successful operation", @@ -5153,7 +5153,7 @@ "policy" ], "summary": "Update the top-level IAM policy", - "operationId": "policy_put", + "operationId": "policy_update", "requestBody": { "content": { "application/json": { @@ -5190,7 +5190,7 @@ "roles" ], "summary": "List the built-in roles", - "operationId": "roles_get", + "operationId": "role_list", "parameters": [ { "in": "query", @@ -5242,7 +5242,7 @@ "roles" ], "summary": "Fetch a specific built-in role", - "operationId": "roles_get_role", + "operationId": "role_view", "parameters": [ { "in": "path", @@ -5281,7 +5281,7 @@ "sagas" ], "summary": "List all sagas (for debugging)", - "operationId": "sagas_get", + "operationId": "saga_list", "parameters": [ { "in": "query", @@ -5341,7 +5341,7 @@ "sagas" ], "summary": "Fetch information about a single saga (for debugging)", - "operationId": "sagas_get_saga", + "operationId": "saga_view", "parameters": [ { "in": "path", @@ -5404,10 +5404,10 @@ "/session/me/sshkeys": { "get": { "tags": [ - "sshkeys" + "session" ], "summary": "List the current user's SSH public keys", - "operationId": "sshkeys_get", + "operationId": "session_sshkey_list", "parameters": [ { "in": "query", @@ -5462,10 +5462,10 @@ }, "post": { "tags": [ - "sshkeys" + "session" ], "summary": "Create a new SSH public key for the current user", - "operationId": "sshkeys_post", + "operationId": "session_sshkey_create", "requestBody": { "content": { "application/json": { @@ -5499,10 +5499,10 @@ "/session/me/sshkeys/{ssh_key_name}": { "get": { "tags": [ - "sshkeys" + "session" ], "summary": "Get (by name) an SSH public key belonging to the current user", - "operationId": "sshkeys_get_key", + "operationId": "session_sshkey_view", "parameters": [ { "in": "path", @@ -5535,10 +5535,10 @@ }, "delete": { "tags": [ - "sshkeys" + "session" ], "summary": "Delete (by name) an SSH public key belonging to the current user", - "operationId": "sshkeys_delete_key", + "operationId": "session_sshkey_delete", "parameters": [ { "in": "path", @@ -5568,7 +5568,7 @@ "tags": [ "silos" ], - "operationId": "silos_get", + "operationId": "silo_list", "parameters": [ { "in": "query", @@ -5626,7 +5626,7 @@ "silos" ], "summary": "Create a new silo.", - "operationId": "silos_post", + "operationId": "silo_create", "requestBody": { "content": { "application/json": { @@ -5663,7 +5663,7 @@ "silos" ], "summary": "Fetch a specific silo", - "operationId": "silos_get_silo", + "operationId": "silo_view", "parameters": [ { "in": "path", @@ -5700,7 +5700,7 @@ "silos" ], "summary": "Delete a specific silo.", - "operationId": "silos_delete_silo", + "operationId": "silo_delete", "parameters": [ { "in": "path", @@ -5732,7 +5732,7 @@ "silos" ], "summary": "List Silo identity providers", - "operationId": "silos_get_identity_providers", + "operationId": "silo_identity_provider_list", "parameters": [ { "in": "path", @@ -5802,7 +5802,7 @@ "silos" ], "summary": "Fetch the IAM policy for this Silo", - "operationId": "silos_get_silo_policy", + "operationId": "silo_policy_view", "parameters": [ { "in": "path", @@ -5839,7 +5839,7 @@ "silos" ], "summary": "Update the IAM policy for this Silo", - "operationId": "silos_put_silo_policy", + "operationId": "silo_policy_update", "parameters": [ { "in": "path", @@ -5888,7 +5888,7 @@ "silos" ], "summary": "Create a new SAML identity provider for a silo.", - "operationId": "silo_saml_idp_create", + "operationId": "silo_identity_provider_create", "parameters": [ { "in": "path", @@ -5937,7 +5937,7 @@ "silos" ], "summary": "GET a silo's SAML identity provider", - "operationId": "silo_saml_idp_fetch", + "operationId": "silo_identity_provider_view", "parameters": [ { "in": "path", @@ -5980,13 +5980,13 @@ } } }, - "/timeseries/schema": { + "/system/user": { "get": { "tags": [ - "metrics" + "system" ], - "summary": "List all timeseries schema", - "operationId": "timeseries_schema_get", + "summary": "List the built-in system users", + "operationId": "system_user_list", "parameters": [ { "in": "query", @@ -6009,6 +6009,14 @@ "type": "string" }, "style": "form" + }, + { + "in": "query", + "name": "sort_by", + "schema": { + "$ref": "#/components/schemas/NameSortMode" + }, + "style": "form" } ], "responses": { @@ -6017,7 +6025,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeseriesSchemaResultsPage" + "$ref": "#/components/schemas/UserBuiltinResultsPage" } } } @@ -6032,16 +6040,35 @@ "x-dropshot-pagination": true } }, - "/updates/refresh": { - "post": { + "/system/user/{user_name}": { + "get": { "tags": [ - "updates" + "system" + ], + "summary": "Fetch a specific built-in system user", + "operationId": "system_user_view", + "parameters": [ + { + "in": "path", + "name": "user_name", + "description": "The built-in user's unique name.", + "required": true, + "schema": { + "$ref": "#/components/schemas/Name" + }, + "style": "simple" + } ], - "summary": "Refresh update metadata", - "operationId": "updates_refresh", "responses": { - "204": { - "description": "resource updated" + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserBuiltin" + } + } + } }, "4XX": { "$ref": "#/components/responses/Error" @@ -6052,13 +6079,13 @@ } } }, - "/users": { + "/timeseries/schema": { "get": { "tags": [ - "silos" + "metrics" ], - "summary": "List users", - "operationId": "silo_users_get", + "summary": "List all timeseries schema", + "operationId": "timeseries_schema_get", "parameters": [ { "in": "query", @@ -6081,14 +6108,6 @@ "type": "string" }, "style": "form" - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - }, - "style": "form" } ], "responses": { @@ -6097,7 +6116,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserResultsPage" + "$ref": "#/components/schemas/TimeseriesSchemaResultsPage" } } } @@ -6112,13 +6131,33 @@ "x-dropshot-pagination": true } }, - "/users_builtin": { + "/updates/refresh": { + "post": { + "tags": [ + "updates" + ], + "summary": "Refresh update metadata", + "operationId": "updates_refresh", + "responses": { + "204": { + "description": "resource updated" + }, + "4XX": { + "$ref": "#/components/responses/Error" + }, + "5XX": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/users": { "get": { "tags": [ - "system" + "silos" ], - "summary": "List the built-in system users", - "operationId": "builtin_users_get", + "summary": "List users", + "operationId": "user_list", "parameters": [ { "in": "query", @@ -6146,7 +6185,7 @@ "in": "query", "name": "sort_by", "schema": { - "$ref": "#/components/schemas/NameSortMode" + "$ref": "#/components/schemas/IdSortMode" }, "style": "form" } @@ -6157,7 +6196,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserBuiltinResultsPage" + "$ref": "#/components/schemas/UserResultsPage" } } } @@ -6171,45 +6210,6 @@ }, "x-dropshot-pagination": true } - }, - "/users_builtin/{user_name}": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a specific built-in system user", - "operationId": "builtin_users_get_user", - "parameters": [ - { - "in": "path", - "name": "user_name", - "description": "The built-in user's unique name.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - }, - "style": "simple" - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserBuiltin" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } } }, "components": { @@ -10518,6 +10518,13 @@ "url": "http://oxide.computer/docs/#xxx" } }, + { + "name": "hardware", + "description": "These operations pertain to hardware inventory and management. Racks are the unit of expansion of an Oxide deployment. Racks are in turn composed of sleds, switches, power supplies, and a cabled backplane.", + "externalDocs": { + "url": "http://oxide.computer/docs/#xxx" + } + }, { "name": "hidden", "description": "TODO operations that will not ship to customers", @@ -10588,13 +10595,6 @@ "url": "http://oxide.computer/docs/#xxx" } }, - { - "name": "racks", - "description": "These operations pertain to hardware inventory and management. Racks are the unit of expansion of an Oxide deployment. Racks are in turn composed of sleds, switches, power supplies, and a cabled backplane.", - "externalDocs": { - "url": "http://oxide.computer/docs/#xxx" - } - }, { "name": "roles", "description": "Roles are a component of Identity and Access Management (IAM) that allow a user or agent account access to additional permissions.", @@ -10624,15 +10624,15 @@ } }, { - "name": "silos", - "description": "Silos represent a logical partition of users and resources.", + "name": "session", + "description": "Information pertaining to the current session.", "externalDocs": { "url": "http://oxide.computer/docs/#xxx" } }, { - "name": "sleds", - "description": "This tag should be moved into hardware", + "name": "silos", + "description": "Silos represent a logical partition of users and resources.", "externalDocs": { "url": "http://oxide.computer/docs/#xxx" } @@ -10644,13 +10644,6 @@ "url": "http://oxide.computer/docs/#xxx" } }, - { - "name": "sshkeys", - "description": "Public SSH keys for an individual user", - "externalDocs": { - "url": "http://oxide.computer/docs/#xxx" - } - }, { "name": "subnets", "description": "This tag should be moved into a generic network tag",