manta_server/server/
api_doc.rs

1//! OpenAPI specification document for the manta HTTP server.
2
3use utoipa::{
4  Modify, OpenApi,
5  openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme},
6};
7
8use super::handlers;
9
10/// Root OpenAPI document for the manta API.
11#[derive(OpenApi)]
12#[openapi(
13  paths(
14    handlers::health,
15    handlers::get_sessions,
16    handlers::get_image_analysis,
17    handlers::get_configurations,
18    handlers::get_nodes,
19    handlers::get_groups,
20    handlers::get_images,
21    handlers::get_templates,
22    handlers::get_boot_parameters,
23    handlers::get_kernel_parameters,
24    handlers::get_redfish_endpoints,
25    handlers::get_groups_nodes,
26    handlers::get_groups_hardware,
27    handlers::get_clusters_deprecated,
28    handlers::get_hardware_clusters_deprecated,
29    handlers::get_hardware_nodes_list,
30    handlers::delete_node,
31    handlers::add_node,
32    handlers::delete_group,
33    handlers::create_group,
34    handlers::add_nodes_to_group,
35    handlers::delete_group_members,
36    handlers::delete_boot_parameters,
37    handlers::add_boot_parameters,
38    handlers::update_boot_parameters,
39    handlers::delete_redfish_endpoint,
40    handlers::add_redfish_endpoint,
41    handlers::update_redfish_endpoint,
42    handlers::delete_session,
43    handlers::delete_images,
44    handlers::delete_configurations,
45    handlers::create_session,
46    handlers::apply_boot_config,
47    handlers::apply_kernel_parameters,
48    handlers::add_kernel_parameters,
49    handlers::delete_kernel_parameters,
50    handlers::migrate_nodes,
51    handlers::migrate_backup,
52    handlers::migrate_restore,
53    handlers::create_ephemeral_env,
54    handlers::post_power,
55    handlers::get_power_transition,
56    handlers::post_template_session,
57    handlers::get_session_logs,
58    handlers::post_sat_configuration,
59    handlers::post_sat_image_cfs_session,
60    handlers::post_sat_image_stamp,
61    handlers::post_sat_session_template,
62    handlers::post_sat_validate,
63    handlers::add_hw_component,
64    handlers::delete_hw_component,
65    handlers::apply_hw_configuration,
66    handlers::console_node_ws,
67    handlers::console_session_ws,
68    handlers::auth_token,
69    handlers::auth_validate,
70    handlers::get_available_groups,
71  ),
72  components(schemas(
73    handlers::ErrorResponse,
74    handlers::AddNodeRequest,
75    handlers::AddNodesToGroupRequest,
76    handlers::AddNodesToGroupResponse,
77    handlers::DeleteBootParametersRequest,
78    handlers::CreateSessionRequest,
79    handlers::ApplyBootConfigRequest,
80    handlers::KernelParamOp,
81    handlers::ApplyKernelParametersRequest,
82    handlers::MigrateNodesRequest,
83    handlers::MigrateBackupRequest,
84    handlers::MigrateRestoreRequest,
85    handlers::CreateEphemeralEnvRequest,
86    handlers::DeleteGroupMembersRequest,
87    handlers::PowerAction,
88    handlers::PowerTargetType,
89    handlers::PowerRequest,
90    handlers::BosOperation,
91    handlers::PostTemplateSessionRequest,
92    handlers::AddKernelParametersRequest,
93    handlers::DeleteKernelParametersRequest,
94    handlers::AddHwComponentRequest,
95    handlers::DeleteHwComponentRequest,
96    handlers::HwClusterMode,
97    handlers::ApplyHwConfigurationRequest,
98    manta_shared::types::auth::AuthTokenRequest,
99    manta_shared::types::auth::AuthTokenResponse,
100    manta_shared::types::auth::ValidateTokenRequest,
101    crate::service::boot_parameters::UpdateBootParametersParams,
102    manta_shared::types::api::redfish_endpoints::UpdateRedfishEndpointParams,
103    manta_shared::types::dto::NodeDetails,
104    manta_shared::types::api::responses::CreatedResponse,
105    manta_shared::types::api::responses::AddNodeResponse,
106    manta_shared::types::api::responses::CreateSessionResponse,
107    manta_shared::types::api::responses::EphemeralEnvResponse,
108    manta_shared::types::api::responses::CompletedResponse,
109    manta_shared::types::api::responses::MigrateNodesPairResult,
110    manta_shared::types::api::responses::MigrateNodesResponse,
111    manta_shared::types::api::analysis::BackendSummary,
112    manta_shared::types::api::configuration_analysis::ConfigurationAnalysis,
113    manta_backend_dispatcher::types::Group,
114    manta_backend_dispatcher::types::Member,
115    manta_backend_dispatcher::types::bss::BootParameters,
116  )),
117  modifiers(&SecurityAddon),
118  info(
119    title = "Manta API",
120    version = env!("CARGO_PKG_VERSION"),
121    description = "REST API for managing CSM/OpenCHAMI HPC clusters via manta.",
122  )
123)]
124pub struct ApiDoc;
125
126struct SecurityAddon;
127
128impl Modify for SecurityAddon {
129  fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
130    if let Some(components) = openapi.components.as_mut() {
131      components.add_security_scheme(
132        "bearerAuth",
133        SecurityScheme::Http(
134          HttpBuilder::new()
135            .scheme(HttpAuthScheme::Bearer)
136            .bearer_format("JWT")
137            .build(),
138        ),
139      );
140    }
141    // Declare the /api/v1 base path as the server so that Swagger UI
142    // constructs full URLs like /api/v1/sessions when trying out calls.
143    openapi.servers = Some(vec![
144      utoipa::openapi::ServerBuilder::new()
145        .url("/api/v1")
146        .description(Some("manta API v1"))
147        .build(),
148    ]);
149  }
150}