From 2cc00244c638ba73fe5a6da2b9e1fe37852b5e84 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 14 May 2025 23:34:10 +1200 Subject: [PATCH] Experimental? --- agent/{remote => }/_allservicesstatus.sh | 0 agent/{remote => }/_autocommands.sh | 0 agent/{remote => }/_common.sh | 0 agent/{remote => }/_nuke_other.sh | 0 make_createagent.sh | 89 ++++++++++++++++++++++++ src/utils/directories.hpp | 2 + 6 files changed, 91 insertions(+) rename agent/{remote => }/_allservicesstatus.sh (100%) rename agent/{remote => }/_autocommands.sh (100%) rename agent/{remote => }/_common.sh (100%) rename agent/{remote => }/_nuke_other.sh (100%) create mode 100644 make_createagent.sh diff --git a/agent/remote/_allservicesstatus.sh b/agent/_allservicesstatus.sh similarity index 100% rename from agent/remote/_allservicesstatus.sh rename to agent/_allservicesstatus.sh diff --git a/agent/remote/_autocommands.sh b/agent/_autocommands.sh similarity index 100% rename from agent/remote/_autocommands.sh rename to agent/_autocommands.sh diff --git a/agent/remote/_common.sh b/agent/_common.sh similarity index 100% rename from agent/remote/_common.sh rename to agent/_common.sh diff --git a/agent/remote/_nuke_other.sh b/agent/_nuke_other.sh similarity index 100% rename from agent/remote/_nuke_other.sh rename to agent/_nuke_other.sh diff --git a/make_createagent.sh b/make_createagent.sh new file mode 100644 index 0000000..8d7eef8 --- /dev/null +++ b/make_createagent.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +# This script creates two files: +# src/utils/createagent.hpp +# src/utils/createagent.cpp +# + +SCRIPT_DIR=$(dirname "$0") + + +# heredoc to create the createagent.hpp file. +cat < "$SCRIPT_DIR/src/utils/createagent.hpp" +#ifndef CREATEAGENT_HPP +#define CREATEAGENT_HPP + +namespace dropshell { + int create_agent(const std::string &server_name); +} + +#endif // CREATEAGENT_HPP +EOF + + +# heredoc to create the createagent.cpp file. +cat < "$SCRIPT_DIR/src/utils/createagent.cpp" +#include "createagent.hpp" + + +namespace dropshell { + + void load_agent_file_contents(std::vector &agent_file_contents); + + + struct AgentFile { + std::string filename; + std::string content; + }; + + int remote_write_file(const SSH_INFO &ssh_info, AgentFile &file); + + int create_agent(const std::string &server_name) { + // create the sh file on the remote server. + server_env_manager server_env(server_name); + if (!server_env.is_valid()) { + std::cerr << "Invalid server environment for " << server_name << std::endl; + return 1; + } + + // create the agent directory. + std::string agent_dir = remotepath::agent(server_name); + remote_create_directory(server_env.get_SSH_INFO(), agent_dir); + + std::vector agent_files; + load_agent_file_contents(agent_files); + + // create the sh file on the remote server. + for (const auto &file : agent_files) { + // write out the file contents in the file. + remote_write_file(server_env.get_SSH_INFO(), file); + } + + return 0; + } + + int remote_write_file(const SSH_INFO &ssh_info, AgentFile &file) + { + std::string generate_command = "cat <<'GENERATE_EOF' > " + file.filename + "\n" + file.content + "\nGENERATE_EOF\n"; // use heredoc to write the file. + return execute_ssh_command(ssh_info, sCommand(generate_command), cMode::Defaults); + } + + // auto generated load_agent_file_contents function goes here, followed by closing } for namespace dropshell. + int load_agent_file_contents(std::vector &agent_files) + { + agent_files={ +CPPEOF + +AGENT_SOURCE_FOLDER="$SCRIPT_DIR/agent" + +# find all the files in the agent source folder. +find "$AGENT_SOURCE_FOLDER" -type f | while read -r file; do + # get the filename without the path. + filename=$(basename "$file") + echo " AgentFile { \"$filename\", R\"AGENTFILE(" >> "$SCRIPT_DIR/src/utils/createagent.cpp" + cat "$file" >> "$SCRIPT_DIR/src/utils/createagent.cpp" + echo ")AGENTFILE\" }," >> "$SCRIPT_DIR/src/utils/createagent.cpp" +done + +# close the namespace dropshell. +echo "}; return 0;} // namespace dropshell" >> "$SCRIPT_DIR/src/utils/createagent.cpp" diff --git a/src/utils/directories.hpp b/src/utils/directories.hpp index 49848a2..7e8ab07 100644 --- a/src/utils/directories.hpp +++ b/src/utils/directories.hpp @@ -66,6 +66,8 @@ namespace dropshell { // |-- backups // |-- temp_files // |-- agent + // | |-- bb64 + // | |-- (other agent files, including _allservicesstatus.sh) // |-- services // |-- service name // |-- config