use {
crate::utils::ssh_deploy::{
client::SshClient,
dependencies::install_dependencies,
errors::DeploymentError,
types::{DeploymentConfig, NetworkType, ServerConfig},
validators::validate_system_requirements,
},
std::error::Error,
};
pub fn deploy_node(
host: &str,
svm_name: &str,
node_type: &str,
network: NetworkType,
) -> Result<String, Box<dyn Error>> {
let node_id = format!("{}-{}-{}-{}", svm_name, node_type, network, host);
Ok(node_id)
}
pub async fn deploy_svm_node(
server_config: ServerConfig,
deployment_config: DeploymentConfig,
progress_callback: Option<crate::prelude::ProgressCallback>,
) -> Result<(), Box<dyn Error>> {
let mut client = SshClient::new(server_config.clone())?;
client.connect()?;
if let Some(callback) = &progress_callback {
callback(0, "Connected to server");
}
let system_info = client.get_system_info()?;
if let Some(callback) = &progress_callback {
callback(5, "Retrieved system information");
}
validate_system_requirements(&system_info, &deployment_config)?;
if let Some(callback) = &progress_callback {
callback(10, "Validated system requirements");
}
install_dependencies(&mut client, &deployment_config)?;
if let Some(callback) = &progress_callback {
callback(30, "Installed dependencies");
}
client.create_directory(&server_config.install_dir)?;
match deployment_config.svm_type.as_str() {
"solana" => {
crate::utils::ssh_deploy::deployments::solana::deploy_solana(
&mut client,
&server_config,
&deployment_config,
progress_callback.as_ref(),
)
.await?;
}
"sonic" => {
crate::utils::ssh_deploy::deployments::sonic::deploy_sonic(
&mut client,
&server_config,
&deployment_config,
progress_callback.as_ref(),
)
.await?;
}
"eclipse" => {
crate::utils::ssh_deploy::deployments::eclipse::deploy_eclipse(
&mut client,
&server_config,
&deployment_config,
progress_callback.as_ref(),
)
.await?;
}
"s00n" => {
crate::utils::ssh_deploy::deployments::s00n::deploy_s00n(
&mut client,
&server_config,
&deployment_config,
progress_callback.as_ref(),
)
.await?;
}
_ => {
return Err(Box::new(DeploymentError::ValidationError(format!(
"Unsupported SVM type: {}",
deployment_config.svm_type
))));
}
}
if let Some(callback) = &progress_callback {
callback(100, "Deployment completed successfully");
}
client.close();
Ok(())
}