diff --git a/src/servers.cpp b/src/servers.cpp index cfe7b7f..e77d0a4 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -50,6 +50,26 @@ std::vector get_configured_servers() { return servers; } +ServerInfo get_server_info(const std::string &server_name) +{ + std::vector local_config_directories = gConfig().get_local_config_directories(); + if (local_config_directories.empty()) + return ServerInfo(); + + for (auto &config_dir : local_config_directories) { + std::string server_dir = config_dir + "/" + server_name; + if (std::filesystem::exists(server_dir)) { + server_env_manager env(server_name); + if (!env.is_valid()) { + std::cerr << "Error: Invalid server environment file: " << server_dir << std::endl; + continue; + } + return ServerInfo({server_name, env.get_SSH_HOST(), env.get_SSH_USER(), env.get_SSH_PORT()}); + } + } + return ServerInfo(); +} + // https://github.com/bloomen/transwarp?tab=readme-ov-file#range-functions void list_servers() { auto servers = get_configured_servers(); diff --git a/src/servers.hpp b/src/servers.hpp index bd2e72b..2a40400 100644 --- a/src/servers.hpp +++ b/src/servers.hpp @@ -17,6 +17,10 @@ namespace dropshell { }; std::vector get_configured_servers(); + + ServerInfo get_server_info(const std::string& server_name); + + void list_servers(); void show_server_details(const std::string& server_name); diff --git a/src/services.cpp b/src/services.cpp index 3745634..3c600e6 100644 --- a/src/services.cpp +++ b/src/services.cpp @@ -5,6 +5,8 @@ #include "config.hpp" #include "utils/utils.hpp" #include "server_env_manager.hpp" +#include "servers.hpp" + #include #include @@ -209,6 +211,11 @@ void get_all_service_env_vars(const std::string &server_name, const std::string all_env_vars["SERVER"] = server_name; all_env_vars["SERVICE"] = service_name; + ServerInfo server_info = get_server_info(server_name); + if (server_info.ssh_host.empty()) + std::cerr << "Error: Server " << server_name << " not found - ssh_host empty, so HOST_NAME not set" << std::endl; + all_env_vars["HOST_NAME"] = server_info.ssh_host; + // Lambda function to load environment variables from a file auto load_env_file = [&all_env_vars](const std::string& file) { if (!file.empty() && std::filesystem::exists(file)) { diff --git a/templates/simple-object-storage/install.sh b/templates/simple-object-storage/install.sh index cf18c2d..00e2fcf 100644 --- a/templates/simple-object-storage/install.sh +++ b/templates/simple-object-storage/install.sh @@ -8,14 +8,13 @@ source "$(dirname "$0")/_common.sh" # Required environment variables -check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" "VOLUME_NAME" +check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" "VOLUME_NAME" "HOST_NAME" "HOST_PORT" # Create volume if it doesn't exist -if ! docker volume ls | grep -q "^${VOLUME_NAME} "; then +if ! docker volume inspect "${VOLUME_NAME}" &>/dev/null; then echo "Volume ${VOLUME_NAME} does not exist, creating..." docker volume create "${VOLUME_NAME}" fi - if ! docker volume inspect "${VOLUME_NAME}" &>/dev/null; then die "Failed to create volume ${VOLUME_NAME}" fi @@ -33,4 +32,4 @@ _remove_container $CONTAINER_NAME || die "Failed to remove container ${CONTAINER bash ./start.sh || die "Failed to start container ${CONTAINER_NAME}" echo "Installation of ${CONTAINER_NAME} complete" -echo "You can access the service at http://${SERVER}:${HOST_PORT}" +echo "You can access the service at http://${HOST_NAME}:${HOST_PORT}"