diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index f5e7736..0fd60f1 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -537,6 +537,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIohyveRequest(const QJsonVal ok = true; out->insert("start", sysadm::Iohyve::startGuest(in_args.toObject())); } + if(act=="stop"){ + ok = true; + out->insert("stop", sysadm::Iohyve::stopGuest(in_args.toObject())); + } } //end of "action" key usage //If nothing done - return the proper code diff --git a/src/server/library/sysadm-iohyve.cpp b/src/server/library/sysadm-iohyve.cpp index 167dd03..a90d165 100644 --- a/src/server/library/sysadm-iohyve.cpp +++ b/src/server/library/sysadm-iohyve.cpp @@ -256,3 +256,38 @@ QJsonObject Iohyve::startGuest(QJsonObject jsin) { retObject.insert("name", name); return retObject; } + +// Stop a guest +QJsonObject Iohyve::stopGuest(QJsonObject jsin) { + QJsonObject retObject; + + QStringList keys = jsin.keys(); + if (! keys.contains("name") ) { + retObject.insert("error", "Missing required key 'name'"); + return retObject; + } + + // Get the key values + QString name = jsin.value("name").toString(); + + QString stoparg = "stop"; + if (! keys.contains("force") ) { + if ( jsin.value("force").toString() == "true" ) { + stoparg = "forcekill"; + } + } + + // Do the stop right now + QStringList output = General::RunCommand("iohyve " + stoparg + " " + name).split("\n"); + for ( int i = 0; i < output.size(); i++) + { + // This doesn't work, iohyve doesn't return error message right now + if ( output.at(i).indexOf("No such guest") != -1 ) { + retObject.insert("error", output.at(i)); + return retObject; + } + } + + retObject.insert("name", name); + return retObject; +} diff --git a/src/server/library/sysadm-iohyve.h b/src/server/library/sysadm-iohyve.h index 1cbe8e0..8878b34 100644 --- a/src/server/library/sysadm-iohyve.h +++ b/src/server/library/sysadm-iohyve.h @@ -23,6 +23,7 @@ public: static QJsonObject rmISO(QJsonObject); static QJsonObject setupIohyve(QJsonObject); static QJsonObject startGuest(QJsonObject); + static QJsonObject stopGuest(QJsonObject); }; } //end of pcbsd namespace