From c8b123df654a4de3a32b08ecc3ab99a2dac8ca1b Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Tue, 9 Feb 2016 14:42:56 -0500 Subject: [PATCH] Add new API call to start a iohyve guest REST Request: ------------------------------- PUT /sysadm/iohyve { "action" : "start", "name" : "bsdguest" } WebSocket Request: ------------------------------- { "name" : "iohyve", "id" : "fooid", "args" : { "action" : "start", "name" : "bsdguest" }, "namespace" : "sysadm" } Response: ------------------------------- { "args": { "start": { "name": "bsdguest" } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/server/WebBackend.cpp | 4 ++++ src/server/library/sysadm-iohyve.cpp | 27 +++++++++++++++++++++++++++ src/server/library/sysadm-iohyve.h | 1 + 3 files changed, 32 insertions(+) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 70d3c95..f5e7736 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -533,6 +533,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIohyveRequest(const QJsonVal ok = true; out->insert("setup", sysadm::Iohyve::setupIohyve(in_args.toObject())); } + if(act=="start"){ + ok = true; + out->insert("start", sysadm::Iohyve::startGuest(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 3bddd62..167dd03 100644 --- a/src/server/library/sysadm-iohyve.cpp +++ b/src/server/library/sysadm-iohyve.cpp @@ -229,3 +229,30 @@ QJsonObject Iohyve::setupIohyve(QJsonObject jsin) { retObject.insert("nic", nic); return retObject; } + +// Start a guest +QJsonObject Iohyve::startGuest(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(); + + // Do the setup right now + QStringList output = General::RunCommand("iohyve start " + name).split("\n"); + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("Not a valid") != -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 20ffd6a..1cbe8e0 100644 --- a/src/server/library/sysadm-iohyve.h +++ b/src/server/library/sysadm-iohyve.h @@ -22,6 +22,7 @@ public: static QJsonObject renameISO(QJsonObject); static QJsonObject rmISO(QJsonObject); static QJsonObject setupIohyve(QJsonObject); + static QJsonObject startGuest(QJsonObject); }; } //end of pcbsd namespace