This commit is contained in:
Your Name 2025-05-03 20:13:21 +12:00
parent ec779e51c2
commit 866046b505
7 changed files with 84 additions and 2 deletions

View File

@ -144,6 +144,48 @@ bool service_runner::uninstall() {
return true; return true;
} }
bool service_runner::nuke()
{
maketitle("Nuking " + mService + " (" + mServiceInfo.template_name + ") on " + mServer);
if (!mServerEnv.is_valid()) return false; // should never hit this.
// 2. Check if service directory exists on server
if (!mServerEnv.check_remote_dir_exists(remotepath::service(mServer, mService)))
std::cerr << "Service is not installed: " << mService << std::endl;
else
{
// try uninstalling.
mServerEnv.run_remote_template_command(mService, "uninstall", {});
mServerEnv.run_remote_template_command(mService, "nuke", {});
std::string rm_cmd = "rm -rf " + quote(remotepath::service(mServer, mService));
if (!mServerEnv.execute_ssh_command(rm_cmd)) {
std::cerr << "Failed to remove service directory" << std::endl;
return false;
}
}
std::cout << "Service " << mService << " successfully nuked from " << mServer << std::endl;
std::cout << "Now deleteing local files..." << std::endl;
std::string local_service_path = localpath::service(mServer,mService);
if (local_service_path.empty() || !fs::exists(local_service_path)) {
std::cerr << "Error: Service directory not found: " << local_service_path << std::endl;
}
else
{
std::string rm_cmd = "rm -rf " + quote(local_service_path);
if (!mServerEnv.execute_local_command(rm_cmd)) {
std::cerr << "Failed to remove service directory" << std::endl;
return false;
}
}
std::cout << "Service " << mService << " successfully nuked from " << mServer << std::endl;
return true;
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Run a command on the service. // Run a command on the service.
@ -193,6 +235,10 @@ bool service_runner::run_command(const std::string& command, std::vector<std::st
if (command == "uninstall") if (command == "uninstall")
return uninstall(); return uninstall();
if (command == "nuke")
return nuke();
if (command == "ssh") { if (command == "ssh") {
interactive_ssh_service(); interactive_ssh_service();
return true; return true;
@ -531,6 +577,7 @@ bool service_runner::restore(std::string backup_file, bool silent)
return true; return true;
} }
bool name_breaks_backups(std::string name) bool name_breaks_backups(std::string name)
{ {
// if name contains -_-, return true // if name contains -_-, return true

View File

@ -84,6 +84,9 @@ class service_runner {
bool backup(bool silent=false); bool backup(bool silent=false);
bool restore(std::string backup_file, bool silent=false); bool restore(std::string backup_file, bool silent=false);
// nuke the service
bool nuke();
// launch an interactive ssh session on a server or service // launch an interactive ssh session on a server or service
// replaces the current dropshell process with the ssh process // replaces the current dropshell process with the ssh process
void interactive_ssh_service(); void interactive_ssh_service();

View File

@ -18,7 +18,7 @@ install_prerequisites() {
# - wget # - wget
# - docker # - docker
PREREQUISITES=("bash" "curl" "wget" "docker") PREREQUISITES=("bash" "curl" "wget" "jq" "docker")
# check if all prerequisites are installed # check if all prerequisites are installed
for prerequisite in "${PREREQUISITES[@]}"; do for prerequisite in "${PREREQUISITES[@]}"; do

View File

@ -0,0 +1,6 @@
#!/bin/bash
# NUKE SCRIPT
# run after uninstall.sh to delete all data.

View File

@ -0,0 +1,14 @@
#!/bin/bash
# NUKE SCRIPT
# This is run after the uninstall.sh script to delete all data.
# dropshell handles the configuration files, so we just need to remove
# any docker volumes and any custom local data folders.
source "$(dirname "$0")/_common.sh"
check_required_env_vars "LOCAL_DATA_FOLDER" "CONTAINER_NAME"
# remove the local data folder
rm -rf $LOCAL_DATA_FOLDER || die "Failed to remove local data folder ${LOCAL_DATA_FOLDER}"
echo "Nuking of ${CONTAINER_NAME} complete."

View File

@ -6,7 +6,7 @@
# It is called with the path to the server specific env file as an argument. # It is called with the path to the server specific env file as an argument.
source "$(dirname "$0")/_common.sh" source "$(dirname "$0")/_common.sh"
check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" "LOCAL_DATA_FOLDER"
_remove_container $CONTAINER_NAME || die "Failed to remove container ${CONTAINER_NAME}" _remove_container $CONTAINER_NAME || die "Failed to remove container ${CONTAINER_NAME}"
_is_container_running && die "Couldn't stop existing container" _is_container_running && die "Couldn't stop existing container"

View File

@ -0,0 +1,12 @@
#!/bin/bash
# NUKE SCRIPT
# Gets run after uninstall.sh
source "$(dirname "$0")/_common.sh"
check_required_env_vars "CONTAINER_NAME" "VOLUME_NAME"
docker volume rm $VOLUME_NAME || die "Failed to remove volume ${VOLUME_NAME}"
echo "Nuking of ${CONTAINER_NAME} complete."