From d9f6897de0da9b9e5bc2664ea29f48ba882ff8d9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Apr 2025 20:59:17 +1200 Subject: [PATCH] add create-server --- src/servers.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- src/servers.hpp | 2 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/servers.cpp b/src/servers.cpp index e713c3c..0b8ff3d 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -13,7 +13,7 @@ #include #include #include - +#include namespace fs = boost::filesystem; namespace dropshell { @@ -146,4 +146,44 @@ void show_server_details(const std::string& server_name) { } // end of list services } // end of show_server_details +void create_server(const std::string &server_name) +{ + // 1. check if server name already exists + std::string server_existing_dir = get_local_server_path(server_name); + if (!server_existing_dir.empty()) { + std::cerr << "Error: Server name already exists: " << server_name << std::endl; + std::cerr << "Current server path: " << server_existing_dir << std::endl; + return; + } + + // 2. create a new directory in the user config directory + std::string config_dir = get_local_config_path(0); + std::string server_dir = config_dir + "/" + server_name; + fs::create_directory(server_dir); + + // 3. create a template server.env file in the server directory + std::string user = getenv("USER"); + std::string server_env_path = server_dir + "/server.env"; + std::ofstream server_env_file(server_env_path); + server_env_file << "SSH_HOST=" << server_name << std::endl; + server_env_file << "SSH_USER=" << user << std::endl; + server_env_file << "SSH_PORT=" << 22 << std::endl; + server_env_file << std::endl; + server_env_file << "DROPSHELL_PATH=/home/"+user+"/.dropshell" << std::endl; + server_env_file.close(); + + // 4. add dropshell-agent service to server + std::string service_dir = server_dir + "/dropshell-agent"; + fs::create_directory(service_dir); + std::string service_env_path = service_dir + "/service.env"; + std::filesystem::copy(get_local_system_templates_path() + "/dropshell-agent/service.env", service_env_path); + + std::cout << "Server created successfully: " << server_name << std::endl; + std::cout << "Please edit the server.env file to configure the server, it is located at: "< get_configured_servers(); void list_servers(); void show_server_details(const std::string& server_name); +void create_server(const std::string& server_name); + } // namespace dropshell #endif // SERVERS_HPP