manta_server/backend_dispatcher/
cfs.rs

1//! Dispatches `CfsTrait` methods to csm-rs or ochami-rs.
2
3use std::pin::Pin;
4
5use manta_backend_dispatcher::{
6  error::Error,
7  interfaces::cfs::CfsTrait,
8  types::{
9    Group, K8sDetails,
10    bos::session_template::BosSessionTemplate,
11    bss::BootParameters,
12    cfs::{
13      cfs_configuration_details::LayerDetails,
14      cfs_configuration_request::CfsConfigurationRequest,
15      cfs_configuration_response::{CfsConfigurationResponse, Layer},
16      component::Component as CfsComponent,
17      session::{CfsSessionGetResponse, CfsSessionPostRequest},
18    },
19    ims::Image,
20  },
21};
22
23use StaticBackendDispatcher::*;
24use chrono::NaiveDateTime;
25use futures::AsyncBufRead;
26
27use crate::manta_backend_dispatcher::StaticBackendDispatcher;
28
29impl CfsTrait for StaticBackendDispatcher {
30  type T = Pin<Box<dyn AsyncBufRead + Send>>;
31
32  async fn get_session_logs_stream(
33    &self,
34    shasta_token: &str,
35    site_name: &str,
36    cfs_session_name: &str,
37    timestamps: bool,
38    k8s: &K8sDetails,
39  ) -> Result<Pin<Box<dyn AsyncBufRead + Send>>, Error> {
40    dispatch!(
41      self,
42      get_session_logs_stream,
43      shasta_token,
44      site_name,
45      cfs_session_name,
46      timestamps,
47      k8s
48    )
49  }
50
51  async fn get_session_logs_stream_by_xname(
52    &self,
53    auth_token: &str,
54    site_name: &str,
55    xname: &str,
56    timestamps: bool,
57    k8s: &K8sDetails,
58  ) -> Result<Pin<Box<dyn AsyncBufRead + Send>>, Error> {
59    dispatch!(
60      self,
61      get_session_logs_stream_by_xname,
62      auth_token,
63      site_name,
64      xname,
65      timestamps,
66      k8s
67    )
68  }
69
70  async fn post_session(
71    &self,
72    shasta_token: &str,
73    shasta_base_url: &str,
74    shasta_root_cert: &[u8],
75    session: &CfsSessionPostRequest,
76  ) -> Result<CfsSessionGetResponse, Error> {
77    dispatch!(
78      self,
79      post_session,
80      shasta_token,
81      shasta_base_url,
82      shasta_root_cert,
83      session
84    )
85  }
86
87  async fn get_sessions(
88    &self,
89    auth_token: &str,
90    base_url: &str,
91    root_cert: &[u8],
92    session_name_opt: Option<&String>,
93    limit_opt: Option<u8>,
94    after_id_opt: Option<String>,
95    min_age_opt: Option<String>,
96    max_age_opt: Option<String>,
97    status_opt: Option<String>,
98    name_contains_opt: Option<String>,
99    is_succeded_opt: Option<bool>,
100    tags_opt: Option<String>,
101  ) -> Result<Vec<CfsSessionGetResponse>, Error> {
102    dispatch!(
103      self,
104      get_sessions,
105      auth_token,
106      base_url,
107      root_cert,
108      session_name_opt,
109      limit_opt,
110      after_id_opt,
111      min_age_opt,
112      max_age_opt,
113      status_opt,
114      name_contains_opt,
115      is_succeded_opt,
116      tags_opt
117    )
118  }
119
120  async fn get_and_filter_sessions(
121    &self,
122    shasta_token: &str,
123    shasta_base_url: &str,
124    shasta_root_cert: &[u8],
125    hsm_group_name_vec: Vec<String>,
126    xname_vec: Vec<&str>,
127    min_age_opt: Option<&String>,
128    max_age_opt: Option<&String>,
129    type_opt: Option<&String>,
130    status_opt: Option<&String>,
131    cfs_session_name_opt: Option<&String>,
132    limit_number_opt: Option<&u8>,
133    is_succeded_opt: Option<bool>,
134  ) -> Result<Vec<CfsSessionGetResponse>, Error> {
135    dispatch!(
136      self,
137      get_and_filter_sessions,
138      shasta_token,
139      shasta_base_url,
140      shasta_root_cert,
141      hsm_group_name_vec,
142      xname_vec,
143      min_age_opt,
144      max_age_opt,
145      type_opt,
146      status_opt,
147      cfs_session_name_opt,
148      limit_number_opt,
149      is_succeded_opt
150    )
151  }
152
153  async fn delete_and_cancel_session(
154    &self,
155    shasta_token: &str,
156    shasta_base_url: &str,
157    shasta_root_cert: &[u8],
158    group_available_vec: &[Group],
159    cfs_session: &CfsSessionGetResponse,
160    cfs_component_vec: &[CfsComponent],
161    bss_bootparameter_vec: &[BootParameters],
162    dry_run: bool,
163  ) -> Result<(), Error> {
164    dispatch!(
165      self,
166      delete_and_cancel_session,
167      shasta_token,
168      shasta_base_url,
169      shasta_root_cert,
170      group_available_vec,
171      cfs_session,
172      cfs_component_vec,
173      bss_bootparameter_vec,
174      dry_run
175    )
176  }
177
178  async fn create_configuration_from_repos(
179    &self,
180    gitea_token: &str,
181    gitea_base_url: &str,
182    shasta_root_cert: &[u8],
183    repo_name_vec: &[&str],
184    local_git_commit_vec: &[&str],
185    playbook_file_name_opt: Option<&str>,
186  ) -> Result<CfsConfigurationRequest, Error> {
187    dispatch!(
188      self,
189      create_configuration_from_repos,
190      gitea_token,
191      gitea_base_url,
192      shasta_root_cert,
193      repo_name_vec,
194      local_git_commit_vec,
195      playbook_file_name_opt
196    )
197  }
198
199  async fn get_configuration(
200    &self,
201    auth_token: &str,
202    base_url: &str,
203    root_cert: &[u8],
204    cfs_configuration_name_opt: Option<&String>,
205  ) -> Result<Vec<CfsConfigurationResponse>, Error> {
206    dispatch!(
207      self,
208      get_configuration,
209      auth_token,
210      base_url,
211      root_cert,
212      cfs_configuration_name_opt
213    )
214  }
215
216  async fn get_and_filter_configuration(
217    &self,
218    auth_token: &str,
219    base_url: &str,
220    root_cert: &[u8],
221    configuration_name: Option<&str>,
222    configuration_name_pattern: Option<&str>,
223    hsm_group_name_vec: &[String],
224    since_opt: Option<NaiveDateTime>,
225    until_opt: Option<NaiveDateTime>,
226    limit_number_opt: Option<&u8>,
227  ) -> Result<Vec<CfsConfigurationResponse>, Error> {
228    dispatch!(
229      self,
230      get_and_filter_configuration,
231      auth_token,
232      base_url,
233      root_cert,
234      configuration_name,
235      configuration_name_pattern,
236      hsm_group_name_vec,
237      since_opt,
238      until_opt,
239      limit_number_opt
240    )
241  }
242
243  async fn get_configuration_layer_details(
244    &self,
245    shasta_root_cert: &[u8],
246    gitea_base_url: &str,
247    gitea_token: &str,
248    layer: Layer,
249    site_name: &str,
250  ) -> Result<LayerDetails, Error> {
251    dispatch!(
252      self,
253      get_configuration_layer_details,
254      shasta_root_cert,
255      gitea_base_url,
256      gitea_token,
257      layer,
258      site_name
259    )
260  }
261
262  async fn update_runtime_configuration(
263    &self,
264    auth_token: &str,
265    base_url: &str,
266    root_cert: &[u8],
267    xnames: &[String],
268    desired_configuration: &str,
269    enabled: bool,
270  ) -> Result<(), Error> {
271    dispatch!(
272      self,
273      update_runtime_configuration,
274      auth_token,
275      base_url,
276      root_cert,
277      xnames,
278      desired_configuration,
279      enabled
280    )
281  }
282
283  async fn put_configuration(
284    &self,
285    shasta_token: &str,
286    shasta_base_url: &str,
287    shasta_root_cert: &[u8],
288    configuration: &CfsConfigurationRequest,
289    configuration_name: &str,
290    overwrite: bool,
291  ) -> Result<CfsConfigurationResponse, Error> {
292    dispatch!(
293      self,
294      put_configuration,
295      shasta_token,
296      shasta_base_url,
297      shasta_root_cert,
298      configuration,
299      configuration_name,
300      overwrite
301    )
302  }
303
304  // Get all CFS sessions, IMS images and BOS sessiontemplates
305  // related to a CFS configuration
306  async fn get_derivatives(
307    &self,
308    auth_token: &str,
309    base_url: &str,
310    root_cert: &[u8],
311    configuration_name: &str,
312  ) -> Result<
313    (
314      Option<Vec<CfsSessionGetResponse>>,
315      Option<Vec<BosSessionTemplate>>,
316      Option<Vec<Image>>,
317    ),
318    Error,
319  > {
320    dispatch!(
321      self,
322      get_derivatives,
323      auth_token,
324      base_url,
325      root_cert,
326      configuration_name
327    )
328  }
329
330  async fn get_cfs_components(
331    &self,
332    shasta_token: &str,
333    shasta_base_url: &str,
334    shasta_root_cert: &[u8],
335    configuration_name: Option<&str>,
336    components_ids: Option<&str>,
337    status: Option<&str>,
338  ) -> Result<
339    Vec<manta_backend_dispatcher::types::cfs::component::Component>,
340    Error,
341  > {
342    dispatch!(
343      self,
344      get_cfs_components,
345      shasta_token,
346      shasta_base_url,
347      shasta_root_cert,
348      configuration_name,
349      components_ids,
350      status
351    )
352  }
353}