Add generic run
This commit is contained in:
parent
5e21c1a306
commit
2e652be9f9
@ -7,7 +7,7 @@ _dropshell_completions() {
|
|||||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
|
||||||
# List of main commands
|
# List of main commands
|
||||||
opts="help version status servers templates autocomplete_list_servers autocomplete_list_services autocomplete_list_commands run install backup"
|
opts="help version status servers templates autocomplete_list_servers autocomplete_list_services autocomplete_list_commands install backup"
|
||||||
|
|
||||||
# add all commands to opts
|
# add all commands to opts
|
||||||
local commands=($(dropshell autocomplete_list_commands))
|
local commands=($(dropshell autocomplete_list_commands))
|
||||||
@ -32,7 +32,7 @@ _dropshell_completions() {
|
|||||||
COMPREPLY=( $(compgen -W "${servers[*]}" -- ${cur}) )
|
COMPREPLY=( $(compgen -W "${servers[*]}" -- ${cur}) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
run|install|backup)
|
install|backup)
|
||||||
# Handle completion for run/install/backup commands
|
# Handle completion for run/install/backup commands
|
||||||
if [[ ${COMP_CWORD} -eq 2 ]]; then
|
if [[ ${COMP_CWORD} -eq 2 ]]; then
|
||||||
# Second argument is server name
|
# Second argument is server name
|
||||||
@ -45,10 +45,6 @@ _dropshell_completions() {
|
|||||||
local services=($(dropshell autocomplete_list_services "$server_name"))
|
local services=($(dropshell autocomplete_list_services "$server_name"))
|
||||||
COMPREPLY=( $(compgen -W "${services[*]}" -- ${cur}) )
|
COMPREPLY=( $(compgen -W "${services[*]}" -- ${cur}) )
|
||||||
return 0
|
return 0
|
||||||
elif [[ ${COMP_CWORD} -eq 4 && "${COMP_WORDS[1]}" == "run" ]]; then
|
|
||||||
# Fourth argument is command name - only for run command
|
|
||||||
COMPREPLY=( $(compgen -W "${commands[*]}" -- ${cur}) )
|
|
||||||
return 0
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
101
src/main.cpp
101
src/main.cpp
@ -40,6 +40,27 @@ void print_help() {
|
|||||||
|
|
||||||
} // namespace dropshell
|
} // namespace dropshell
|
||||||
|
|
||||||
|
|
||||||
|
bool parseargs(std::string arg2, std::string arg3, std::string & server_name, std::vector<std::string>& servicelist)
|
||||||
|
{
|
||||||
|
if (arg2.empty()) return false;
|
||||||
|
server_name = arg2;
|
||||||
|
|
||||||
|
if (arg3.empty()) {
|
||||||
|
servicelist = dropshell::get_server_services(server_name);
|
||||||
|
} else {
|
||||||
|
servicelist.push_back(arg3);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string safearg(int argc, char *argv[], int index)
|
||||||
|
{
|
||||||
|
if (index >= argc) return "";
|
||||||
|
return argv[index];
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
try {
|
try {
|
||||||
// Load configuration
|
// Load configuration
|
||||||
@ -57,6 +78,8 @@ int main(int argc, char* argv[]) {
|
|||||||
// Handle commands
|
// Handle commands
|
||||||
std::string cmd = argv[1];
|
std::string cmd = argv[1];
|
||||||
|
|
||||||
|
auto commands = dropshell::autocomplete_list_commands();
|
||||||
|
|
||||||
if (cmd == "help" || cmd == "-h" || cmd == "--help") {
|
if (cmd == "help" || cmd == "-h" || cmd == "--help") {
|
||||||
dropshell::print_help();
|
dropshell::print_help();
|
||||||
return 0;
|
return 0;
|
||||||
@ -118,7 +141,6 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cmd == "autocomplete_list_commands") {
|
if (cmd == "autocomplete_list_commands") {
|
||||||
auto commands = dropshell::autocomplete_list_commands();
|
|
||||||
for (const auto& command : commands) {
|
for (const auto& command : commands) {
|
||||||
std::cout << command << std::endl;
|
std::cout << command << std::endl;
|
||||||
}
|
}
|
||||||
@ -126,22 +148,12 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cmd == "install") {
|
if (cmd == "install") {
|
||||||
if (argc < 3) {
|
std::string server_name;
|
||||||
|
std::vector<std::string> servicelist;
|
||||||
|
if (!parseargs(safearg(argc, argv, 2), safearg(argc, argv, 3), server_name, servicelist)) {
|
||||||
std::cerr << "Error: install command requires server name and optionally service name" << std::endl;
|
std::cerr << "Error: install command requires server name and optionally service name" << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
std::string server_name = argv[2];
|
|
||||||
|
|
||||||
std::vector<std::string> servicelist;
|
|
||||||
if (argc <= 3) {
|
|
||||||
servicelist = dropshell::get_server_services(server_name);
|
|
||||||
if (servicelist.empty()) {
|
|
||||||
std::cerr << "Error: No services found for server " << server_name << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
servicelist.push_back(argv[3]);
|
|
||||||
|
|
||||||
for (const auto& service_name : servicelist) {
|
for (const auto& service_name : servicelist) {
|
||||||
dropshell::server_service service;
|
dropshell::server_service service;
|
||||||
if (!service.init(server_name, service_name)) {
|
if (!service.init(server_name, service_name)) {
|
||||||
@ -157,44 +169,13 @@ int main(int argc, char* argv[]) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd == "run") {
|
|
||||||
if (argc < 5) {
|
|
||||||
std::cerr << "Error: run command requires server name, service name, and command" << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
std::string server_name = argv[2];
|
|
||||||
std::string service_name = argv[3];
|
|
||||||
std::string command = argv[4];
|
|
||||||
|
|
||||||
dropshell::server_service service;
|
|
||||||
if (!service.init(server_name, service_name)) {
|
|
||||||
std::cerr << "Error: Failed to initialize service" << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!service.run_command(command)) {
|
|
||||||
std::cerr << command +" failed." << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd == "backup") {
|
if (cmd == "backup") {
|
||||||
if (argc < 3) {
|
std::string server_name;
|
||||||
|
std::vector<std::string> servicelist;
|
||||||
|
if (!parseargs(safearg(argc, argv, 2), safearg(argc, argv, 3), server_name, servicelist)) {
|
||||||
std::cerr << "Error: backup command requires server name and optionally service name" << std::endl;
|
std::cerr << "Error: backup command requires server name and optionally service name" << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
std::string server_name = argv[2];
|
|
||||||
|
|
||||||
std::vector<std::string> servicelist;
|
|
||||||
if (argc <= 3) {
|
|
||||||
servicelist = dropshell::get_server_services(server_name);
|
|
||||||
if (servicelist.empty()) {
|
|
||||||
std::cerr << "Error: No services found for server " << server_name << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
servicelist.push_back(argv[3]);
|
|
||||||
|
|
||||||
for (const auto& service_name : servicelist) {
|
for (const auto& service_name : servicelist) {
|
||||||
dropshell::server_service service;
|
dropshell::server_service service;
|
||||||
@ -210,6 +191,30 @@ int main(int argc, char* argv[]) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto& command : commands) {
|
||||||
|
if (cmd == command) {
|
||||||
|
std::string server_name;
|
||||||
|
std::vector<std::string> servicelist;
|
||||||
|
if (!parseargs(safearg(argc, argv, 2), safearg(argc, argv, 3), server_name, servicelist)) {
|
||||||
|
std::cerr << "Error: " << command << " command requires server name and optionally service name" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& service_name : servicelist) {
|
||||||
|
dropshell::server_service service;
|
||||||
|
if (!service.init(server_name, service_name)) {
|
||||||
|
std::cerr << "Error: Failed to initialize service" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!service.run_command(command)) {
|
||||||
|
std::cerr << command +" failed." << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Unknown command
|
// Unknown command
|
||||||
std::cerr << "Error: Unknown command '" << cmd << "'" << std::endl;
|
std::cerr << "Error: Unknown command '" << cmd << "'" << std::endl;
|
||||||
dropshell::print_help();
|
dropshell::print_help();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user