Fix Vault re-init to preserve other services + simplify shutdown message
- When Vault unseal fails, only restart Vault - NOT full bootstrap - Preserve PostgreSQL, Redis, MinIO, etc. when Vault needs re-init - Simplify shutdown message to 3 lines with pragmatismo.com.br - Never kill all stack processes just for Vault issues
This commit is contained in:
parent
0bbaaf4878
commit
49304a70b5
2 changed files with 36 additions and 33 deletions
|
|
@ -377,24 +377,39 @@ impl BootstrapManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always try to unseal Vault (it may have restarted)
|
// Always try to unseal Vault (it may have restarted)
|
||||||
// If unseal fails, Vault may need re-initialization (data deleted)
|
// If unseal fails, try to restart Vault process only - NEVER delete other services
|
||||||
if let Err(e) = self.ensure_vault_unsealed().await {
|
if let Err(e) = self.ensure_vault_unsealed().await {
|
||||||
warn!("Vault unseal failed: {} - re-initializing Vault only", e);
|
warn!("Vault unseal failed: {} - attempting Vault restart only", e);
|
||||||
|
|
||||||
// Kill only Vault process - NEVER delete user data
|
// Kill ONLY Vault process - preserve all other services
|
||||||
let _ = Command::new("pkill")
|
let _ = Command::new("pkill")
|
||||||
.args(["-9", "-f", "botserver-stack/bin/vault"])
|
.args(["-9", "-f", "botserver-stack/bin/vault"])
|
||||||
.output();
|
.output();
|
||||||
|
|
||||||
// Reset only Vault credentials, preserve everything else
|
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
|
||||||
|
|
||||||
|
// Try to restart Vault without full bootstrap
|
||||||
|
let pm = PackageManager::new(self.install_mode.clone(), self.tenant.clone())?;
|
||||||
|
if let Err(e) = pm.start("vault") {
|
||||||
|
warn!("Failed to restart Vault: {}", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
|
||||||
|
|
||||||
|
// Try unseal again
|
||||||
|
if let Err(e) = self.ensure_vault_unsealed().await {
|
||||||
|
warn!("Vault still not responding after restart: {}", e);
|
||||||
|
|
||||||
|
// Only now reset Vault credentials and re-initialize ONLY Vault
|
||||||
Self::reset_vault_only()?;
|
Self::reset_vault_only()?;
|
||||||
|
|
||||||
// Run bootstrap to re-initialize Vault
|
// Install/configure ONLY Vault - NOT full bootstrap
|
||||||
self.bootstrap().await?;
|
info!("Re-initializing Vault only (preserving other services)...");
|
||||||
|
if let Err(e) = pm.install("vault").await {
|
||||||
|
return Err(anyhow::anyhow!("Failed to re-initialize Vault: {}", e));
|
||||||
|
}
|
||||||
|
|
||||||
// After bootstrap, services are already running
|
tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
|
||||||
info!("Vault re-initialization complete, verifying...");
|
|
||||||
tokio::time::sleep(tokio::time::Duration::from_secs(2)).await;
|
|
||||||
|
|
||||||
if let Err(e) = self.ensure_vault_unsealed().await {
|
if let Err(e) = self.ensure_vault_unsealed().await {
|
||||||
return Err(anyhow::anyhow!(
|
return Err(anyhow::anyhow!(
|
||||||
|
|
@ -402,9 +417,9 @@ impl BootstrapManager {
|
||||||
e
|
e
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Services were started by bootstrap, no need to restart them
|
info!("Vault re-initialization complete");
|
||||||
return Ok(());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize SecretsManager so other code can use Vault
|
// Initialize SecretsManager so other code can use Vault
|
||||||
|
|
|
||||||
16
src/main.rs
16
src/main.rs
|
|
@ -135,21 +135,9 @@ async fn health_check_simple() -> (StatusCode, Json<serde_json::Value>) {
|
||||||
|
|
||||||
/// Print beautiful shutdown message
|
/// Print beautiful shutdown message
|
||||||
fn print_shutdown_message() {
|
fn print_shutdown_message() {
|
||||||
let version = env!("CARGO_PKG_VERSION");
|
|
||||||
println!();
|
println!();
|
||||||
println!("\x1b[36m╔════════════════════════════════════════════════════════════════╗\x1b[0m");
|
println!("\x1b[33m✨ Thank you for using General Bots!\x1b[0m");
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m");
|
println!("\x1b[36m pragmatismo.com.br\x1b[0m");
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[33m✨ Thank you for using General Bots! ✨\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[37mVersion: {:<10}\x1b[0m \x1b[36m║\x1b[0m", version);
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[37mGraceful shutdown completed.\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[34m🌐 https://github.com/GeneralBots\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[34m📧 contato@pragmatismo.cloud\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[32mSee you next time! 👋\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m");
|
|
||||||
println!("\x1b[36m╚════════════════════════════════════════════════════════════════╝\x1b[0m");
|
|
||||||
println!();
|
println!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue