diff --git a/src/rc.d/sysadm-restserver b/src/rc.d/sysadm-restserver index 4d5ddae..8362ffd 100755 --- a/src/rc.d/sysadm-restserver +++ b/src/rc.d/sysadm-restserver @@ -37,7 +37,7 @@ ssl_keygen() sysadm_restserver_stop() { if [ -e "/var/run/sysadm-rest.pid" ] ; then - pkill -9 -F /var/run/sysadm-rest.pid + pkill -9 -F /var/run/sysadm-rest.pid >/dev/null 2>/dev/null fi } diff --git a/src/rc.d/sysadm-websocket b/src/rc.d/sysadm-websocket index 1e59a65..426a3ed 100755 --- a/src/rc.d/sysadm-websocket +++ b/src/rc.d/sysadm-websocket @@ -37,7 +37,7 @@ ssl_keygen() sysadm_websocket_stop() { if [ -e "/var/run/sysadm-websocket.pid" ] ; then - pkill -9 -F /var/run/sysadm-websocket.pid + pkill -9 -F /var/run/sysadm-websocket.pid >/dev/null 2>/dev/null fi } diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index f618e3e..cb8c529 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -11,6 +11,7 @@ //sysadm library interface classes #include "library/sysadm-general.h" #include "library/sysadm-iocage.h" +#include "library/sysadm-iohyve.h" #include "library/sysadm-lifepreserver.h" #include "library/sysadm-network.h" #include "library/sysadm-systeminfo.h" @@ -52,6 +53,11 @@ RestOutputStruct::ExitCode WebSocket::AvailableSubsystems(bool allaccess, QJsonO out->insert("sysadm/iocage", "read/write"); } + // - iohyve + if(QFile::exists("/usr/local/sbin/iohyve")){ + out->insert("sysadm/iohyve", "read/write"); + } + // - Generic system information out->insert("sysadm/systeminfo","read/write"); @@ -86,6 +92,8 @@ RestOutputStruct::ExitCode WebSocket::EvaluateBackendRequest(const RestInputStru return EvaluateDispatcherRequest(IN.fullaccess, IN.args, out); }else if(namesp=="sysadm" && name=="iocage"){ return EvaluateSysadmIocageRequest(IN.args, out); + }else if(namesp=="sysadm" && name=="iohyve"){ + return EvaluateSysadmIohyveRequest(IN.args, out); }else if(namesp=="sysadm" && name=="lifepreserver"){ return EvaluateSysadmLifePreserverRequest(IN.args, out); }else if(namesp=="sysadm" && name=="network"){ @@ -387,3 +395,27 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIocageRequest(const QJsonVal } return RestOutputStruct::OK; } + +//==== SYSADM -- iohyve ==== +RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIohyveRequest(const QJsonValue in_args, QJsonObject *out){ + if(in_args.isObject()){ + QStringList keys = in_args.toObject().keys(); + bool ok = false; + if(keys.contains("action")){ + QString act = JsonValueToString(in_args.toObject().value("action")); + if(act=="listvms"){ + ok = true; + out->insert("listvms", sysadm::Iohyve::listVMs()); + } + + } //end of "action" key usage + + //If nothing done - return the proper code + if(!ok){ + return RestOutputStruct::BADREQUEST; + } + }else{ // if(in_args.isArray()){ + return RestOutputStruct::BADREQUEST; + } + return RestOutputStruct::OK; +} diff --git a/src/server/WebSocket.h b/src/server/WebSocket.h index 4fb28a2..ed0fcc9 100644 --- a/src/server/WebSocket.h +++ b/src/server/WebSocket.h @@ -48,6 +48,8 @@ private: RestOutputStruct::ExitCode EvaluateDispatcherRequest(bool allaccess, const QJsonValue in_args, QJsonObject *out); // -- sysadm iocage API RestOutputStruct::ExitCode EvaluateSysadmIocageRequest(const QJsonValue in_args, QJsonObject *out); + // -- sysadm iohyve API + RestOutputStruct::ExitCode EvaluateSysadmIohyveRequest(const QJsonValue in_args, QJsonObject *out); // -- sysadm Network API RestOutputStruct::ExitCode EvaluateSysadmNetworkRequest(const QJsonValue in_args, QJsonObject *out); // -- sysadm LifePreserver API diff --git a/src/server/library/library.pri b/src/server/library/library.pri index 4874d46..2103b05 100644 --- a/src/server/library/library.pri +++ b/src/server/library/library.pri @@ -4,6 +4,7 @@ CONFIG += c++11 HEADERS += $${PWD}/sysadm-global.h \ $${PWD}/sysadm-general.h \ $${PWD}/sysadm-iocage.h \ + $${PWD}/sysadm-iohyve.h \ $${PWD}/sysadm-lifepreserver.h \ $${PWD}/sysadm-network.h \ $${PWD}/sysadm-firewall.h \ @@ -15,6 +16,7 @@ HEADERS += $${PWD}/sysadm-global.h \ SOURCES += $${PWD}/NetDevice.cpp \ $${PWD}/sysadm-general.cpp \ $${PWD}/sysadm-iocage.cpp \ + $${PWD}/sysadm-iohyve.cpp \ $${PWD}/sysadm-lifepreserver.cpp \ $${PWD}/sysadm-network.cpp \ $${PWD}/sysadm-firewall.cpp \ diff --git a/src/server/library/sysadm-iohyve.cpp b/src/server/library/sysadm-iohyve.cpp new file mode 100644 index 0000000..0b3213b --- /dev/null +++ b/src/server/library/sysadm-iohyve.cpp @@ -0,0 +1,42 @@ +//=========================================== +// PC-BSD source code +// Copyright (c) 2016, PC-BSD Software/iXsystems +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "sysadm-general.h" +#include "sysadm-iohyve.h" +#include "sysadm-global.h" + +using namespace sysadm; + +//PLEASE: Keep the functions in the same order as listed in pcbsd-general.h + +// List the VMs on the box +QJsonObject Iohyve::listVMs() { + QJsonObject retObject; + + QStringList output = General::RunCommand("iohyve list").split("\n"); + + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("VMM") != -1 ) + continue; + + if ( output.at(i).isEmpty() ) + break; + + QJsonObject vm; + QString line = output.at(i).simplified(); + QString guest = line.section(" ", 0, 0); + + vm.insert("vmm", line.section(" ", 1, 1)); + vm.insert("running", line.section(" ", 2, 2)); + vm.insert("rcboot", line.section(" ", 3, 3)); + vm.insert("description", line.section(" ", 4, -1)); + + retObject.insert(guest, vm); + } + + return retObject; +} diff --git a/src/server/library/sysadm-iohyve.h b/src/server/library/sysadm-iohyve.h new file mode 100644 index 0000000..7dec2fc --- /dev/null +++ b/src/server/library/sysadm-iohyve.h @@ -0,0 +1,22 @@ +//=========================================== +// PC-BSD source code +// Copyright (c) 2016, PC-BSD Software/iXsystems +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef __PCBSD_LIB_UTILS_IOHYVE_H +#define __PCBSD_LIB_UTILS_IOHYVE_H + +#include +#include "sysadm-global.h" + +namespace sysadm{ + +class Iohyve{ +public: + static QJsonObject listVMs(); +}; + +} //end of pcbsd namespace + +#endif diff --git a/src/server/server.pro b/src/server/server.pro index 41a492a..a1c42e2 100644 --- a/src/server/server.pro +++ b/src/server/server.pro @@ -1,7 +1,7 @@ TEMPLATE = app LANGUAGE = C++ -CONFIG += qt warn_on release +CONFIG += qt warn_off release QT = core network websockets concurrent HEADERS += globals.h globals-qt.h \