use std::collections::HashMap;
use manta_backend_dispatcher::error::Error;
use manta_backend_dispatcher::interfaces::apply_sat_file::{
ApplyConfigurationParams, ApplyImageCreateSessionParams,
ApplyImageStampParams, ApplySessionTemplateParams, SatTrait,
};
use manta_backend_dispatcher::types::bos::{
session::BosSession, session_template::BosSessionTemplate,
};
use manta_backend_dispatcher::types::cfs::cfs_configuration_response::CfsConfigurationResponse;
use manta_backend_dispatcher::types::cfs::session::CfsSessionGetResponse;
use manta_backend_dispatcher::types::ims::Image;
use crate::server::common::app_context::InfraContext;
use crate::service::authorization;
#[allow(clippy::too_many_arguments)]
pub async fn apply_configuration(
infra: &InfraContext<'_>,
token: &str,
vault_base_url: &str,
k8s_api_url: &str,
gitea_token: &str,
configuration: serde_json::Value,
dry_run: bool,
overwrite: bool,
) -> Result<CfsConfigurationResponse, Error> {
infra
.backend
.apply_configuration(ApplyConfigurationParams {
shasta_token: token,
vault_base_url,
site_name: infra.site_name,
k8s_api_url,
gitea_base_url: infra.gitea_base_url,
gitea_token,
configuration,
dry_run,
overwrite,
})
.await
}
#[allow(clippy::too_many_arguments)]
pub async fn create_image_cfs_session(
infra: &InfraContext<'_>,
token: &str,
vault_base_url: &str,
k8s_api_url: &str,
image: serde_json::Value,
ref_lookup: HashMap<String, String>,
ansible_verbosity: Option<u8>,
ansible_passthrough: Option<&str>,
dry_run: bool,
) -> Result<CfsSessionGetResponse, Error> {
infra
.backend
.apply_sat_image_create_session(ApplyImageCreateSessionParams {
shasta_token: token,
vault_base_url,
site_name: infra.site_name,
k8s_api_url,
image,
ref_lookup,
ansible_verbosity,
ansible_passthrough,
dry_run,
})
.await
}
pub async fn stamp_image_from_session(
infra: &InfraContext<'_>,
token: &str,
cfs_session_name: &str,
) -> Result<Image, Error> {
infra
.backend
.apply_sat_image_stamp_from_session(ApplyImageStampParams {
shasta_token: token,
cfs_session_name,
})
.await
}
pub async fn apply_session_template(
infra: &InfraContext<'_>,
token: &str,
session_template: serde_json::Value,
ref_lookup: HashMap<String, String>,
target_groups: &[String],
reboot: bool,
dry_run: bool,
) -> Result<(BosSessionTemplate, Option<BosSession>), Error> {
let hsm_group_available_vec =
authorization::fetch_group_names_and_validate_access(
infra,
token,
target_groups,
)
.await?;
infra
.backend
.apply_session_template(ApplySessionTemplateParams {
shasta_token: token,
session_template,
ref_lookup,
hsm_group_available_vec: &hsm_group_available_vec,
reboot,
dry_run,
})
.await
}