diff --git a/nexus/src/external_api/http_entrypoints.rs b/nexus/src/external_api/http_entrypoints.rs index f8a39bab7a..8a8564d37c 100644 --- a/nexus/src/external_api/http_entrypoints.rs +++ b/nexus/src/external_api/http_entrypoints.rs @@ -182,19 +182,9 @@ pub fn external_api() -> NexusApiDescription { api.register(sled_physical_disk_list)?; api.register(physical_disk_list)?; - api.register(rack_list_v1)?; - api.register(rack_view_v1)?; - api.register(sled_list_v1)?; - api.register(sled_view_v1)?; - api.register(sled_physical_disk_list_v1)?; - api.register(physical_disk_list_v1)?; - api.register(saga_list)?; api.register(saga_view)?; - api.register(saga_list_v1)?; - api.register(saga_view_v1)?; - api.register(user_builtin_list)?; api.register(user_builtin_view)?; @@ -212,18 +202,11 @@ pub fn external_api() -> NexusApiDescription { api.register(silo_list)?; api.register(silo_create)?; api.register(silo_view)?; - api.register(silo_view_by_id)?; api.register(silo_delete)?; api.register(silo_policy_view)?; api.register(silo_policy_update)?; - api.register(silo_list_v1)?; - api.register(silo_create_v1)?; - api.register(silo_view_v1)?; - api.register(silo_delete_v1)?; api.register(silo_identity_provider_list)?; - api.register(silo_policy_view_v1)?; - api.register(silo_policy_update_v1)?; api.register(saml_identity_provider_create)?; api.register(saml_identity_provider_view)?; @@ -256,10 +239,10 @@ pub fn external_api() -> NexusApiDescription { api.register(update_deployments_list)?; api.register(update_deployment_view)?; - api.register(user_list_v1)?; - api.register(silo_user_list_v1)?; - api.register(silo_user_view_v1)?; - api.register(group_list_v1)?; + api.register(user_list)?; + api.register(silo_user_list)?; + api.register(silo_user_view)?; + api.register(group_list)?; api.register(group_view)?; // Console API operations @@ -449,43 +432,6 @@ async fn policy_update( path = "/v1/system/silos", tags = ["system"], }] -async fn silo_list_v1( - rqctx: RequestContext>, - query_params: Query, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let nexus = &apictx.nexus; - let query = query_params.into_inner(); - let pag_params = data_page_params_for(&rqctx, &query)?; - let scan_params = ScanByNameOrId::from_query(&query)?; - let paginated_by = name_or_id_pagination(&pag_params, scan_params)?; - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let silos = nexus - .silos_list(&opctx, &paginated_by) - .await? - .into_iter() - .map(|p| p.try_into()) - .collect::, Error>>()?; - Ok(HttpResponseOk(ScanByNameOrId::results_page( - &query, - silos, - &marker_for_name_or_id, - )?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - -/// List silos -/// -/// Lists silos that are discoverable based on the current permissions. -/// Use `GET /v1/system/silos` instead -#[endpoint { - method = GET, - path = "/system/silos", - tags = ["system"], - deprecated = true -}] async fn silo_list( rqctx: RequestContext>, query_params: Query, @@ -519,37 +465,14 @@ async fn silo_list( path = "/v1/system/silos", tags = ["system"], }] -async fn silo_create_v1( - rqctx: RequestContext>, - new_silo_params: TypedBody, -) -> Result, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let nexus = &apictx.nexus; - let silo = - nexus.silo_create(&opctx, new_silo_params.into_inner()).await?; - Ok(HttpResponseCreated(silo.try_into()?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - -/// Create a silo -/// Use `POST /v1/system/silos` instead -#[endpoint { - method = POST, - path = "/system/silos", - tags = ["system"], - deprecated = true -}] async fn silo_create( rqctx: RequestContext>, new_silo_params: TypedBody, ) -> Result, HttpError> { let apictx = rqctx.context(); - let nexus = &apictx.nexus; let handler = async { let opctx = crate::context::op_context_for_external_api(&rqctx).await?; + let nexus = &apictx.nexus; let silo = nexus.silo_create(&opctx, new_silo_params.into_inner()).await?; Ok(HttpResponseCreated(silo.try_into()?)) @@ -565,7 +488,7 @@ async fn silo_create( path = "/v1/system/silos/{silo}", tags = ["system"], }] -async fn silo_view_v1( +async fn silo_view( rqctx: RequestContext>, path_params: Path, ) -> Result, HttpError> { @@ -581,65 +504,6 @@ async fn silo_view_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Path parameters for Silo requests -#[derive(Deserialize, JsonSchema)] -struct SiloPathParam { - /// The silo's unique name. - silo_name: Name, -} - -/// Fetch a silo -/// -/// Fetch a silo by name. -/// Use `GET /v1/system/silos/{silo}` instead. -#[endpoint { - method = GET, - path = "/system/silos/{silo_name}", - tags = ["system"], - deprecated = true, -}] -async fn silo_view( - rqctx: RequestContext>, - path_params: Path, -) -> Result, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let silo = path.silo_name.into(); - let silo_lookup = nexus.silo_lookup(&opctx, &silo)?; - let (.., silo) = silo_lookup.fetch().await?; - Ok(HttpResponseOk(silo.try_into()?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - -/// Fetch a silo by id -/// Use `GET /v1/system/silos/{id}` instead. -#[endpoint { - method = GET, - path = "/system/by-id/silos/{id}", - tags = ["system"], - deprecated = true -}] -async fn silo_view_by_id( - rqctx: RequestContext>, - path_params: Path, -) -> Result, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let silo = path.id.into(); - let silo_lookup = nexus.silo_lookup(&opctx, &silo)?; - let (.., silo) = silo_lookup.fetch().await?; - Ok(HttpResponseOk(silo.try_into()?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - /// Delete a silo /// /// Delete a silo by name. @@ -648,7 +512,7 @@ async fn silo_view_by_id( path = "/v1/system/silos/{silo}", tags = ["system"], }] -async fn silo_delete_v1( +async fn silo_delete( rqctx: RequestContext>, path_params: Path, ) -> Result { @@ -664,40 +528,13 @@ async fn silo_delete_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Delete a silo -/// -/// Delete a silo by name. -/// Use `DELETE /v1/system/silos/{silo}` instead. -#[endpoint { - method = DELETE, - path = "/system/silos/{silo_name}", - tags = ["system"], - deprecated = true, -}] -async fn silo_delete( - rqctx: RequestContext>, - path_params: Path, -) -> Result { - let apictx = rqctx.context(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let nexus = &apictx.nexus; - let params = path_params.into_inner(); - let silo = params.silo_name.into(); - let silo_lookup = nexus.silo_lookup(&opctx, &silo)?; - nexus.silo_delete(&opctx, &silo_lookup).await?; - Ok(HttpResponseDeleted()) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - /// Fetch a silo's IAM policy #[endpoint { method = GET, path = "/v1/system/silos/{silo}/policy", tags = ["system"], }] -async fn silo_policy_view_v1( +async fn silo_policy_view( rqctx: RequestContext>, path_params: Path, ) -> Result>, HttpError> { @@ -713,38 +550,13 @@ async fn silo_policy_view_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Fetch a silo's IAM policy -/// Use `GET /v1/system/silos/{silo}/policy` instead. -#[endpoint { - method = GET, - path = "/system/silos/{silo_name}/policy", - tags = ["system"], - deprecated = true -}] -async fn silo_policy_view( - rqctx: RequestContext>, - path_params: Path, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let silo = &path.silo_name.into(); - let silo_lookup = nexus.silo_lookup(&opctx, &silo)?; - let policy = nexus.silo_fetch_policy(&opctx, &silo_lookup).await?; - Ok(HttpResponseOk(policy)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - /// Update a silo's IAM policy #[endpoint { method = PUT, path = "/v1/system/silos/{silo}/policy", tags = ["system"], }] -async fn silo_policy_update_v1( +async fn silo_policy_update( rqctx: RequestContext>, path_params: Path, new_policy: TypedBody>, @@ -766,37 +578,6 @@ async fn silo_policy_update_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Update a silo's IAM policy -/// Use `PUT /v1/system/silos/{silo}/policy` instead -#[endpoint { - method = PUT, - path = "/system/silos/{silo_name}/policy", - tags = ["system"], - deprecated = true -}] -async fn silo_policy_update( - rqctx: RequestContext>, - path_params: Path, - new_policy: TypedBody>, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let new_policy = new_policy.into_inner(); - let nasgns = new_policy.role_assignments.len(); - // This should have been validated during parsing. - bail_unless!(nasgns <= shared::MAX_ROLE_ASSIGNMENTS_PER_RESOURCE); - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let silo_name = &path.silo_name; - let silo_lookup = nexus.db_lookup(&opctx).silo_name(silo_name); - let policy = - nexus.silo_update_policy(&opctx, &silo_lookup, &new_policy).await?; - Ok(HttpResponseOk(policy)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - // Silo-specific user endpoints /// List users in a silo @@ -805,7 +586,7 @@ async fn silo_policy_update( path = "/v1/system/users", tags = ["system"], }] -async fn silo_user_list_v1( +async fn silo_user_list( rqctx: RequestContext>, query_params: Query>, ) -> Result>, HttpError> { @@ -846,7 +627,7 @@ struct UserParam { path = "/v1/system/users/{user_id}", tags = ["system"], }] -async fn silo_user_view_v1( +async fn silo_user_view( rqctx: RequestContext>, path_params: Path, query_params: Query, @@ -976,12 +757,10 @@ async fn saml_identity_provider_view( /// Users can only be created in Silos with `provision_type` == `Fixed`. /// Otherwise, Silo users are just-in-time (JIT) provisioned when a user first /// logs in using an external Identity Provider. -/// Use `POST /v1/system/identity-providers/local/users` instead #[endpoint { method = POST, path = "/v1/system/identity-providers/local/users", tags = ["system"], - deprecated = true }] async fn local_idp_user_create( rqctx: RequestContext>, @@ -3627,7 +3406,7 @@ async fn vpc_router_route_update( path = "/v1/system/hardware/racks", tags = ["system"], }] -async fn rack_list_v1( +async fn rack_list( rqctx: RequestContext>, query_params: Query, ) -> Result>, HttpError> { @@ -3651,38 +3430,6 @@ async fn rack_list_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// List racks -/// Use `GET /v1/system/hardware/racks` instead -#[endpoint { - method = GET, - path = "/system/hardware/racks", - tags = ["system"], - deprecated = true, -}] -async fn rack_list( - rqctx: RequestContext>, - query_params: Query, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let nexus = &apictx.nexus; - let query = query_params.into_inner(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let racks = nexus - .racks_list(&opctx, &data_page_params_for(&rqctx, &query)?) - .await? - .into_iter() - .map(|r| r.into()) - .collect(); - Ok(HttpResponseOk(ScanById::results_page( - &query, - racks, - &|_, rack: &Rack| rack.identity.id, - )?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - /// Path parameters for Rack requests #[derive(Deserialize, JsonSchema)] struct RackPathParam { @@ -3696,7 +3443,7 @@ struct RackPathParam { path = "/v1/system/hardware/racks/{rack_id}", tags = ["system"], }] -async fn rack_view_v1( +async fn rack_view( rqctx: RequestContext>, path_params: Path, ) -> Result, HttpError> { @@ -3711,29 +3458,6 @@ async fn rack_view_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Fetch a rack -/// Use `GET /v1/system/hardware/racks/{rack_id}` instead -#[endpoint { - method = GET, - path = "/system/hardware/racks/{rack_id}", - tags = ["system"], - deprecated = true, -}] -async fn rack_view( - rqctx: RequestContext>, - path_params: Path, -) -> Result, HttpError> { - let apictx = rqctx.context(); - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let rack_info = nexus.rack_lookup(&opctx, &path.rack_id).await?; - Ok(HttpResponseOk(rack_info.into())) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - // Sleds /// List sleds @@ -3742,7 +3466,7 @@ async fn rack_view( path = "/v1/system/hardware/sleds", tags = ["system"], }] -async fn sled_list_v1( +async fn sled_list( rqctx: RequestContext>, query_params: Query, ) -> Result>, HttpError> { @@ -3766,38 +3490,6 @@ async fn sled_list_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// List sleds -/// Use `GET /v1/system/hardware/sleds instead` -#[endpoint { - method = GET, - path = "/system/hardware/sleds", - tags = ["system"], - deprecated = true, -}] -async fn sled_list( - rqctx: RequestContext>, - query_params: Query, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let nexus = &apictx.nexus; - let query = query_params.into_inner(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let sleds = nexus - .sleds_list(&opctx, &data_page_params_for(&rqctx, &query)?) - .await? - .into_iter() - .map(|s| s.into()) - .collect(); - Ok(HttpResponseOk(ScanById::results_page( - &query, - sleds, - &|_, sled: &Sled| sled.identity.id, - )?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - /// Path parameters for Sled requests #[derive(Deserialize, JsonSchema)] struct SledPathParam { @@ -3811,7 +3503,7 @@ struct SledPathParam { path = "/v1/system/hardware/sleds/{sled_id}", tags = ["system"], }] -async fn sled_view_v1( +async fn sled_view( rqctx: RequestContext>, path_params: Path, ) -> Result, HttpError> { @@ -3826,29 +3518,6 @@ async fn sled_view_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Fetch a sled -/// Use `GET /v1/system/hardware/sleds/{sled_id}` instead -#[endpoint { - method = GET, - path = "/system/hardware/sleds/{sled_id}", - tags = ["system"], - deprecated = true, -}] -async fn sled_view( - rqctx: RequestContext>, - path_params: Path, -) -> Result, HttpError> { - let apictx = rqctx.context(); - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let sled_info = nexus.sled_lookup(&opctx, &path.sled_id).await?; - Ok(HttpResponseOk(sled_info.into())) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - // Physical disks /// List physical disks @@ -3857,38 +3526,6 @@ async fn sled_view( path = "/v1/system/hardware/disks", tags = ["system"], }] -async fn physical_disk_list_v1( - rqctx: RequestContext>, - query_params: Query, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let nexus = &apictx.nexus; - let query = query_params.into_inner(); - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let disks = nexus - .physical_disk_list(&opctx, &data_page_params_for(&rqctx, &query)?) - .await? - .into_iter() - .map(|s| s.into()) - .collect(); - Ok(HttpResponseOk(ScanById::results_page( - &query, - disks, - &|_, disk: &PhysicalDisk| disk.identity.id, - )?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - -/// List physical disks -/// Use `GET /v1/system/hardware/disks` instead -#[endpoint { - method = GET, - path = "/system/hardware/disks", - tags = ["system"], - deprecated = true, -}] async fn physical_disk_list( rqctx: RequestContext>, query_params: Query, @@ -3919,44 +3556,6 @@ async fn physical_disk_list( path = "/v1/system/hardware/sleds/{sled_id}/disks", tags = ["system"], }] -async fn sled_physical_disk_list_v1( - rqctx: RequestContext>, - path_params: Path, - query_params: Query, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let handler = async { - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let query = query_params.into_inner(); - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let disks = nexus - .sled_list_physical_disks( - &opctx, - path.sled_id, - &data_page_params_for(&rqctx, &query)?, - ) - .await? - .into_iter() - .map(|s| s.into()) - .collect(); - Ok(HttpResponseOk(ScanById::results_page( - &query, - disks, - &|_, disk: &PhysicalDisk| disk.identity.id, - )?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - -/// List physical disks attached to sleds -/// Use `GET /v1/system/hardware/sleds/{sled_id}/disks` instead -#[endpoint { - method = GET, - path = "/system/hardware/sleds/{sled_id}/disks", - tags = ["system"], - deprecated = true, -}] async fn sled_physical_disk_list( rqctx: RequestContext>, path_params: Path, @@ -4360,7 +3959,7 @@ async fn update_deployment_view( path = "/v1/system/sagas", tags = ["system"], }] -async fn saga_list_v1( +async fn saga_list( rqctx: RequestContext>, query_params: Query, ) -> Result>, HttpError> { @@ -4381,35 +3980,6 @@ async fn saga_list_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// List sagas -/// Use `GET v1/system/sagas` instead -#[endpoint { - method = GET, - path = "/system/sagas", - tags = ["system"], - deprecated = true, -}] -async fn saga_list( - rqctx: RequestContext>, - query_params: Query, -) -> Result>, HttpError> { - let apictx = rqctx.context(); - let nexus = &apictx.nexus; - let query = query_params.into_inner(); - let pagparams = data_page_params_for(&rqctx, &query)?; - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let saga_stream = nexus.sagas_list(&opctx, &pagparams).await?; - let view_list = to_list(saga_stream).await; - Ok(HttpResponseOk(ScanById::results_page( - &query, - view_list, - &|_, saga: &Saga| saga.id, - )?)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - /// Path parameters for Saga requests #[derive(Deserialize, JsonSchema)] struct SagaPathParam { @@ -4422,7 +3992,7 @@ struct SagaPathParam { path = "/v1/system/sagas/{saga_id}", tags = ["system"], }] -async fn saga_view_v1( +async fn saga_view( rqctx: RequestContext>, path_params: Path, ) -> Result, HttpError> { @@ -4437,29 +4007,6 @@ async fn saga_view_v1( apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await } -/// Fetch a saga -/// Use `GET v1/system/sagas/{saga_id}` instead -#[endpoint { - method = GET, - path = "/system/sagas/{saga_id}", - tags = ["system"], - deprecated = true, -}] -async fn saga_view( - rqctx: RequestContext>, - path_params: Path, -) -> Result, HttpError> { - let apictx = rqctx.context(); - let nexus = &apictx.nexus; - let path = path_params.into_inner(); - let handler = async { - let opctx = crate::context::op_context_for_external_api(&rqctx).await?; - let saga = nexus.saga_get(&opctx, path.saga_id).await?; - Ok(HttpResponseOk(saga)) - }; - apictx.external_latencies.instrument_dropshot_handler(&rqctx, handler).await -} - // Silo users /// List users @@ -4468,7 +4015,7 @@ async fn saga_view( path = "/v1/users", tags = ["silos"], }] -async fn user_list_v1( +async fn user_list( rqctx: RequestContext>, query_params: Query>, ) -> Result>, HttpError> { @@ -4509,7 +4056,7 @@ async fn user_list_v1( path = "/v1/groups", tags = ["silos"], }] -async fn group_list_v1( +async fn group_list( rqctx: RequestContext>, query_params: Query, ) -> Result>, HttpError> { diff --git a/nexus/tests/integration_tests/instances.rs b/nexus/tests/integration_tests/instances.rs index 1a139700ea..66c5987096 100644 --- a/nexus/tests/integration_tests/instances.rs +++ b/nexus/tests/integration_tests/instances.rs @@ -137,7 +137,7 @@ async fn test_instances_access_before_create_returns_not_found( } #[nexus_test] -async fn test_v1_instance_access(cptestctx: &ControlPlaneTestContext) { +async fn test_instance_access(cptestctx: &ControlPlaneTestContext) { let client = &cptestctx.external_client; populate_ip_pool(&client, "default", None).await; diff --git a/nexus/tests/integration_tests/role_assignments.rs b/nexus/tests/integration_tests/role_assignments.rs index 09a72100fd..5b60386f80 100644 --- a/nexus/tests/integration_tests/role_assignments.rs +++ b/nexus/tests/integration_tests/role_assignments.rs @@ -101,7 +101,7 @@ trait RoleAssignmentTest { async fn test_role_assignments_fleet(cptestctx: &ControlPlaneTestContext) { // There's no operation to read the Fleet directly, so we list Sleds as a // proxy for something that requires Fleet-level "read" permission. - const RESOURCE_URL: &'static str = "/system/hardware/sleds"; + const RESOURCE_URL: &'static str = "/v1/system/hardware/sleds"; struct FleetRoleAssignmentTest; impl RoleAssignmentTest for FleetRoleAssignmentTest { diff --git a/nexus/tests/output/nexus_tags.txt b/nexus/tests/output/nexus_tags.txt index 06bd5cff2d..70487656a4 100644 --- a/nexus/tests/output/nexus_tags.txt +++ b/nexus/tests/output/nexus_tags.txt @@ -80,11 +80,11 @@ current_user_view /v1/me API operations found with tag "silos" OPERATION ID URL PATH -group_list_v1 /v1/groups +group_list /v1/groups group_view /v1/groups/{group} policy_update /v1/policy policy_view /v1/policy -user_list_v1 /v1/users +user_list /v1/users API operations found with tag "snapshots" OPERATION ID URL PATH @@ -114,40 +114,25 @@ ip_pool_view /v1/system/ip-pools/{pool} local_idp_user_create /v1/system/identity-providers/local/users local_idp_user_delete /v1/system/identity-providers/local/users/{user_id} local_idp_user_set_password /v1/system/identity-providers/local/users/{user_id}/set-password -physical_disk_list /system/hardware/disks -physical_disk_list_v1 /v1/system/hardware/disks -rack_list /system/hardware/racks -rack_list_v1 /v1/system/hardware/racks -rack_view /system/hardware/racks/{rack_id} -rack_view_v1 /v1/system/hardware/racks/{rack_id} -saga_list /system/sagas -saga_list_v1 /v1/system/sagas -saga_view /system/sagas/{saga_id} -saga_view_v1 /v1/system/sagas/{saga_id} +physical_disk_list /v1/system/hardware/disks +rack_list /v1/system/hardware/racks +rack_view /v1/system/hardware/racks/{rack_id} +saga_list /v1/system/sagas +saga_view /v1/system/sagas/{saga_id} saml_identity_provider_create /v1/system/identity-providers/saml saml_identity_provider_view /v1/system/identity-providers/saml/{provider} -silo_create /system/silos -silo_create_v1 /v1/system/silos -silo_delete /system/silos/{silo_name} -silo_delete_v1 /v1/system/silos/{silo} +silo_create /v1/system/silos +silo_delete /v1/system/silos/{silo} silo_identity_provider_list /v1/system/identity-providers -silo_list /system/silos -silo_list_v1 /v1/system/silos -silo_policy_update /system/silos/{silo_name}/policy -silo_policy_update_v1 /v1/system/silos/{silo}/policy -silo_policy_view /system/silos/{silo_name}/policy -silo_policy_view_v1 /v1/system/silos/{silo}/policy -silo_user_list_v1 /v1/system/users -silo_user_view_v1 /v1/system/users/{user_id} -silo_view /system/silos/{silo_name} -silo_view_by_id /system/by-id/silos/{id} -silo_view_v1 /v1/system/silos/{silo} -sled_list /system/hardware/sleds -sled_list_v1 /v1/system/hardware/sleds -sled_physical_disk_list /system/hardware/sleds/{sled_id}/disks -sled_physical_disk_list_v1 /v1/system/hardware/sleds/{sled_id}/disks -sled_view /system/hardware/sleds/{sled_id} -sled_view_v1 /v1/system/hardware/sleds/{sled_id} +silo_list /v1/system/silos +silo_policy_update /v1/system/silos/{silo}/policy +silo_policy_view /v1/system/silos/{silo}/policy +silo_user_list /v1/system/users +silo_user_view /v1/system/users/{user_id} +silo_view /v1/system/silos/{silo} +sled_list /v1/system/hardware/sleds +sled_physical_disk_list /v1/system/hardware/sleds/{sled_id}/disks +sled_view /v1/system/hardware/sleds/{sled_id} system_component_version_list /v1/system/update/components system_image_create /system/images system_image_delete /system/images/{image_name} diff --git a/nexus/tests/output/uncovered-authz-endpoints.txt b/nexus/tests/output/uncovered-authz-endpoints.txt index a986d4bb96..1fb538f9f0 100644 --- a/nexus/tests/output/uncovered-authz-endpoints.txt +++ b/nexus/tests/output/uncovered-authz-endpoints.txt @@ -1,22 +1,9 @@ API endpoints with no coverage in authz tests: system_image_delete (delete "/system/images/{image_name}") -silo_delete (delete "/system/silos/{silo_name}") login_saml_begin (get "/login/{silo_name}/saml/{provider_name}") system_image_view_by_id (get "/system/by-id/images/{id}") -silo_view_by_id (get "/system/by-id/silos/{id}") -physical_disk_list (get "/system/hardware/disks") -rack_list (get "/system/hardware/racks") -rack_view (get "/system/hardware/racks/{rack_id}") -sled_list (get "/system/hardware/sleds") -sled_view (get "/system/hardware/sleds/{sled_id}") -sled_physical_disk_list (get "/system/hardware/sleds/{sled_id}/disks") system_image_list (get "/system/images") system_image_view (get "/system/images/{image_name}") -saga_list (get "/system/sagas") -saga_view (get "/system/sagas/{saga_id}") -silo_list (get "/system/silos") -silo_view (get "/system/silos/{silo_name}") -silo_policy_view (get "/system/silos/{silo_name}/policy") device_auth_request (post "/device/auth") device_auth_confirm (post "/device/confirm") device_access_token (post "/device/token") @@ -25,5 +12,3 @@ login_local (post "/login/{silo_name}/local") login_saml (post "/login/{silo_name}/saml/{provider_name}") logout (post "/logout") system_image_create (post "/system/images") -silo_create (post "/system/silos") -silo_policy_update (put "/system/silos/{silo_name}/policy") diff --git a/openapi/nexus.json b/openapi/nexus.json index ba2a991dd0..97b69a8cfc 100644 --- a/openapi/nexus.json +++ b/openapi/nexus.json @@ -344,645 +344,14 @@ "deprecated": true } }, - "/system/by-id/silos/{id}": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a silo by id", - "description": "Use `GET /v1/system/silos/{id}` instead.", - "operationId": "silo_view_by_id", - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, - "/system/hardware/disks": { - "get": { - "tags": [ - "system" - ], - "summary": "List physical disks", - "description": "Use `GET /v1/system/hardware/disks` instead", - "operationId": "physical_disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true, - "x-dropshot-pagination": true - } - }, - "/system/hardware/racks": { - "get": { - "tags": [ - "system" - ], - "summary": "List racks", - "description": "Use `GET /v1/system/hardware/racks` instead", - "operationId": "rack_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RackResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true, - "x-dropshot-pagination": true - } - }, - "/system/hardware/racks/{rack_id}": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a rack", - "description": "Use `GET /v1/system/hardware/racks/{rack_id}` instead", - "operationId": "rack_view", - "parameters": [ - { - "in": "path", - "name": "rack_id", - "description": "The rack's unique ID.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Rack" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, - "/system/hardware/sleds": { - "get": { - "tags": [ - "system" - ], - "summary": "List sleds", - "description": "Use `GET /v1/system/hardware/sleds instead`", - "operationId": "sled_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true, - "x-dropshot-pagination": true - } - }, - "/system/hardware/sleds/{sled_id}": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a sled", - "description": "Use `GET /v1/system/hardware/sleds/{sled_id}` instead", - "operationId": "sled_view", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "The sled's unique ID.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Sled" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, - "/system/hardware/sleds/{sled_id}/disks": { - "get": { - "tags": [ - "system" - ], - "summary": "List physical disks attached to sleds", - "description": "Use `GET /v1/system/hardware/sleds/{sled_id}/disks` instead", - "operationId": "sled_physical_disk_list", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "The sled's unique ID.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true, - "x-dropshot-pagination": true - } - }, - "/system/images": { - "get": { - "tags": [ - "system" - ], - "summary": "List system-wide images", - "description": "Returns a list of all the system-wide images. System-wide images are returned sorted by creation date, with the most recent images appearing first.", - "operationId": "system_image_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalImageResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": true - }, - "post": { - "tags": [ - "system" - ], - "summary": "Create a system-wide image", - "description": "Create a new system-wide image. This image can then be used by any user in any silo as a base for instances.", - "operationId": "system_image_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalImageCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalImage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, - "/system/images/{image_name}": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a system-wide image", - "description": "Returns the details of a specific system-wide image.", - "operationId": "system_image_view", - "parameters": [ - { - "in": "path", - "name": "image_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalImage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - }, - "delete": { - "tags": [ - "system" - ], - "summary": "Delete a system-wide image", - "description": "Permanently delete a system-wide image. This operation cannot be undone. Any instances using the system-wide image will continue to run, however new instances can not be created with this image.", - "operationId": "system_image_delete", - "parameters": [ - { - "in": "path", - "name": "image_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, - "/system/sagas": { - "get": { - "tags": [ - "system" - ], - "summary": "List sagas", - "description": "Use `GET v1/system/sagas` instead", - "operationId": "saga_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SagaResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true, - "x-dropshot-pagination": true - } - }, - "/system/sagas/{saga_id}": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a saga", - "description": "Use `GET v1/system/sagas/{saga_id}` instead", - "operationId": "saga_view", - "parameters": [ - { - "in": "path", - "name": "saga_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Saga" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, - "/system/silos": { + "/system/images": { "get": { "tags": [ "system" ], - "summary": "List silos", - "description": "Lists silos that are discoverable based on the current permissions. Use `GET /v1/system/silos` instead", - "operationId": "silo_list", + "summary": "List system-wide images", + "description": "Returns a list of all the system-wide images. System-wide images are returned sorted by creation date, with the most recent images appearing first.", + "operationId": "system_image_list", "parameters": [ { "in": "query", @@ -1008,7 +377,7 @@ "in": "query", "name": "sort_by", "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" + "$ref": "#/components/schemas/NameSortMode" } } ], @@ -1018,7 +387,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SiloResultsPage" + "$ref": "#/components/schemas/GlobalImageResultsPage" } } } @@ -1030,21 +399,20 @@ "$ref": "#/components/responses/Error" } }, - "deprecated": true, "x-dropshot-pagination": true }, "post": { "tags": [ "system" ], - "summary": "Create a silo", - "description": "Use `POST /v1/system/silos` instead", - "operationId": "silo_create", + "summary": "Create a system-wide image", + "description": "Create a new system-wide image. This image can then be used by any user in any silo as a base for instances.", + "operationId": "system_image_create", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SiloCreate" + "$ref": "#/components/schemas/GlobalImageCreate" } } }, @@ -1056,7 +424,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Silo" + "$ref": "#/components/schemas/GlobalImage" } } } @@ -1071,19 +439,18 @@ "deprecated": true } }, - "/system/silos/{silo_name}": { + "/system/images/{image_name}": { "get": { "tags": [ "system" ], - "summary": "Fetch a silo", - "description": "Fetch a silo by name. Use `GET /v1/system/silos/{silo}` instead.", - "operationId": "silo_view", + "summary": "Fetch a system-wide image", + "description": "Returns the details of a specific system-wide image.", + "operationId": "system_image_view", "parameters": [ { "in": "path", - "name": "silo_name", - "description": "The silo's unique name.", + "name": "image_name", "required": true, "schema": { "$ref": "#/components/schemas/Name" @@ -1096,7 +463,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Silo" + "$ref": "#/components/schemas/GlobalImage" } } } @@ -1114,14 +481,13 @@ "tags": [ "system" ], - "summary": "Delete a silo", - "description": "Delete a silo by name. Use `DELETE /v1/system/silos/{silo}` instead.", - "operationId": "silo_delete", + "summary": "Delete a system-wide image", + "description": "Permanently delete a system-wide image. This operation cannot be undone. Any instances using the system-wide image will continue to run, however new instances can not be created with this image.", + "operationId": "system_image_delete", "parameters": [ { "in": "path", - "name": "silo_name", - "description": "The silo's unique name.", + "name": "image_name", "required": true, "schema": { "$ref": "#/components/schemas/Name" @@ -1142,94 +508,6 @@ "deprecated": true } }, - "/system/silos/{silo_name}/policy": { - "get": { - "tags": [ - "system" - ], - "summary": "Fetch a silo's IAM policy", - "description": "Use `GET /v1/system/silos/{silo}/policy` instead.", - "operationId": "silo_policy_view", - "parameters": [ - { - "in": "path", - "name": "silo_name", - "description": "The silo's unique name.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - }, - "put": { - "tags": [ - "system" - ], - "summary": "Update a silo's IAM policy", - "description": "Use `PUT /v1/system/silos/{silo}/policy` instead", - "operationId": "silo_policy_update", - "parameters": [ - { - "in": "path", - "name": "silo_name", - "description": "The silo's unique name.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "deprecated": true - } - }, "/v1/disks": { "get": { "tags": [ @@ -1515,7 +793,7 @@ "silos" ], "summary": "List groups", - "operationId": "group_list_v1", + "operationId": "group_list", "parameters": [ { "in": "query", @@ -3731,7 +3009,7 @@ "system" ], "summary": "List physical disks", - "operationId": "physical_disk_list_v1", + "operationId": "physical_disk_list", "parameters": [ { "in": "query", @@ -3788,7 +3066,7 @@ "system" ], "summary": "List racks", - "operationId": "rack_list_v1", + "operationId": "rack_list", "parameters": [ { "in": "query", @@ -3845,7 +3123,7 @@ "system" ], "summary": "Fetch a rack", - "operationId": "rack_view_v1", + "operationId": "rack_view", "parameters": [ { "in": "path", @@ -3884,7 +3162,7 @@ "system" ], "summary": "List sleds", - "operationId": "sled_list_v1", + "operationId": "sled_list", "parameters": [ { "in": "query", @@ -3941,7 +3219,7 @@ "system" ], "summary": "Fetch a sled", - "operationId": "sled_view_v1", + "operationId": "sled_view", "parameters": [ { "in": "path", @@ -3980,7 +3258,7 @@ "system" ], "summary": "List physical disks attached to sleds", - "operationId": "sled_physical_disk_list_v1", + "operationId": "sled_physical_disk_list", "parameters": [ { "in": "path", @@ -4111,7 +3389,7 @@ "system" ], "summary": "Create a user", - "description": "Users can only be created in Silos with `provision_type` == `Fixed`. Otherwise, Silo users are just-in-time (JIT) provisioned when a user first logs in using an external Identity Provider. Use `POST /v1/system/identity-providers/local/users` instead", + "description": "Users can only be created in Silos with `provision_type` == `Fixed`. Otherwise, Silo users are just-in-time (JIT) provisioned when a user first logs in using an external Identity Provider.", "operationId": "local_idp_user_create", "parameters": [ { @@ -4150,8 +3428,7 @@ "5XX": { "$ref": "#/components/responses/Error" } - }, - "deprecated": true + } } }, "/v1/system/identity-providers/local/users/{user_id}": { @@ -5072,7 +4349,7 @@ "system" ], "summary": "List sagas", - "operationId": "saga_list_v1", + "operationId": "saga_list", "parameters": [ { "in": "query", @@ -5129,7 +4406,7 @@ "system" ], "summary": "Fetch a saga", - "operationId": "saga_view_v1", + "operationId": "saga_view", "parameters": [ { "in": "path", @@ -5168,7 +4445,7 @@ ], "summary": "List silos", "description": "Lists silos that are discoverable based on the current permissions.", - "operationId": "silo_list_v1", + "operationId": "silo_list", "parameters": [ { "in": "query", @@ -5223,7 +4500,7 @@ "system" ], "summary": "Create a silo", - "operationId": "silo_create_v1", + "operationId": "silo_create", "requestBody": { "content": { "application/json": { @@ -5261,7 +4538,7 @@ ], "summary": "Fetch a silo", "description": "Fetch a silo by name.", - "operationId": "silo_view_v1", + "operationId": "silo_view", "parameters": [ { "in": "path", @@ -5297,7 +4574,7 @@ ], "summary": "Delete a silo", "description": "Delete a silo by name.", - "operationId": "silo_delete_v1", + "operationId": "silo_delete", "parameters": [ { "in": "path", @@ -5327,7 +4604,7 @@ "system" ], "summary": "Fetch a silo's IAM policy", - "operationId": "silo_policy_view_v1", + "operationId": "silo_policy_view", "parameters": [ { "in": "path", @@ -5362,7 +4639,7 @@ "system" ], "summary": "Update a silo's IAM policy", - "operationId": "silo_policy_update_v1", + "operationId": "silo_policy_update", "parameters": [ { "in": "path", @@ -5797,7 +5074,7 @@ "system" ], "summary": "List users in a silo", - "operationId": "silo_user_list_v1", + "operationId": "silo_user_list", "parameters": [ { "in": "query", @@ -5861,7 +5138,7 @@ "system" ], "summary": "Fetch a user", - "operationId": "silo_user_view_v1", + "operationId": "silo_user_view", "parameters": [ { "in": "path", @@ -6002,7 +5279,7 @@ "silos" ], "summary": "List users", - "operationId": "user_list_v1", + "operationId": "user_list", "parameters": [ { "in": "query", @@ -12798,18 +12075,6 @@ } } }, - "IdSortMode": { - "description": "Supported set of sort modes for scanning by id only.\n\nCurrently, we only support scanning in ascending order.", - "oneOf": [ - { - "description": "sort in increasing order of \"id\"", - "type": "string", - "enum": [ - "id_ascending" - ] - } - ] - }, "NameSortMode": { "description": "Supported set of sort modes for scanning by name only\n\nCurrently, we only support scanning in ascending order.", "oneOf": [ @@ -12859,6 +12124,18 @@ "write_bytes" ] }, + "IdSortMode": { + "description": "Supported set of sort modes for scanning by id only.\n\nCurrently, we only support scanning in ascending order.", + "oneOf": [ + { + "description": "sort in increasing order of \"id\"", + "type": "string", + "enum": [ + "id_ascending" + ] + } + ] + }, "SystemMetricName": { "type": "string", "enum": [