From c3c809fcbc36c5c43096dd4c577330f70c9533ff Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Tue, 9 Feb 2016 12:07:12 -0500 Subject: [PATCH] Add new API call to do the initial setup of Iohyve Both the pool/nic are required for setup to complete. REST Request: ------------------------------- PUT /sysadm/iohyve { "nic" : "re0", "pool" : "tank", "action" : "setup" } WebSocket Request: ------------------------------- { "id" : "fooid", "name" : "iohyve", "args" : { "pool" : "tank", "nic" : "re0", "action" : "setup" }, "namespace" : "sysadm" } Response: ------------------------------- { "args": { "setup": { "nic": "re0", "pool": "tank" } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/server/WebBackend.cpp | 4 ++++ src/server/library/sysadm-iohyve.cpp | 35 +++++++++++++++++++++++++++- src/server/library/sysadm-iohyve.h | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 276bdec..2cb0b00 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -511,6 +511,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIohyveRequest(const QJsonVal ok = true; out->insert("rmiso", sysadm::Iohyve::rmISO(in_args.toObject())); } + if(act=="setup"){ + ok = true; + out->insert("setup", sysadm::Iohyve::setupIohyve(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 739d3f2..c28d393 100644 --- a/src/server/library/sysadm-iohyve.cpp +++ b/src/server/library/sysadm-iohyve.cpp @@ -13,7 +13,6 @@ using namespace sysadm; //PLEASE: Keep the functions in the same order as listed in pcbsd-general.h - // Queue the fetch of an ISO QJsonObject Iohyve::fetchISO(QJsonObject jsin) { QJsonObject retObject; @@ -123,3 +122,37 @@ QJsonObject Iohyve::rmISO(QJsonObject jsin) { return retObject; } +// setup iohyve +QJsonObject Iohyve::setupIohyve(QJsonObject jsin) { + QJsonObject retObject; + + QStringList keys = jsin.keys(); + if (! keys.contains("pool") || ! keys.contains("nic") ) { + retObject.insert("error", "Missing required key(s) 'pool / nic'"); + return retObject; + } + + // Get the key values + QString pool = jsin.value("pool").toString(); + QString nic = jsin.value("nic").toString(); + + // Enable the rc.conf values + if ( ! General::setConfFileValue("/etc/rc.conf", "iohyve_flags=", "iohyve_flags=\"kmod=1 net=" + nic + "\"", -1 ) ) { + retObject.insert("error", "Failed enabling rc.conf iohyve_flags"); + return retObject; + } + + // Do the setup right now + QStringList output = General::RunCommand("iohyve setup pool=" + pool + " kmod=1 net=" + nic).split("\n"); + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("cannot create") != -1 ) { + retObject.insert("error", output.at(i)); + return retObject; + } + } + + retObject.insert("pool", pool); + retObject.insert("nic", nic); + return retObject; +} diff --git a/src/server/library/sysadm-iohyve.h b/src/server/library/sysadm-iohyve.h index 292397e..ecd5051 100644 --- a/src/server/library/sysadm-iohyve.h +++ b/src/server/library/sysadm-iohyve.h @@ -18,6 +18,7 @@ public: static QJsonObject listVMs(); static QJsonObject renameISO(QJsonObject); static QJsonObject rmISO(QJsonObject); + static QJsonObject setupIohyve(QJsonObject); }; } //end of pcbsd namespace