From 04ee45494f58ab0be985d4795e69e91a55863782 Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 3 Mar 2016 13:24:02 -0500 Subject: [PATCH] Add new API call to add/create a disk for a VM REST Request: ------------------------------- PUT /sysadm/iohyve { "name" : "bsdguest", "action" : "adddisk", "size" : "10G" } WebSocket Request: ------------------------------- { "args" : { "size" : "10G", "name" : "bsdguest", "action" : "adddisk" }, "id" : "fooid", "namespace" : "sysadm", "name" : "iohyve" } Response: ------------------------------- { "args": { "adddisk": { "bsdguest": { "size": "10G" } } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/server/WebBackend.cpp | 4 ++++ src/server/library/sysadm-iohyve.cpp | 34 ++++++++++++++++++++++++++++ src/server/library/sysadm-iohyve.h | 1 + 3 files changed, 39 insertions(+) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 57ae141..ce6b35d 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -581,6 +581,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIohyveRequest(const QJsonVal if(keys.contains("action")){ QString act = JsonValueToString(in_args.toObject().value("action")); //qDebug() << " - iohyve action:" << act; + if(act=="adddisk"){ + ok = true; + out->insert("adddisk", sysadm::Iohyve::addDisk(in_args.toObject())); + } if(act=="create"){ ok = true; out->insert("create", sysadm::Iohyve::createGuest(in_args.toObject())); diff --git a/src/server/library/sysadm-iohyve.cpp b/src/server/library/sysadm-iohyve.cpp index 0a43ae6..55bf0ef 100644 --- a/src/server/library/sysadm-iohyve.cpp +++ b/src/server/library/sysadm-iohyve.cpp @@ -14,6 +14,40 @@ using namespace sysadm; //PLEASE: Keep the functions in the same order as listed in pcbsd-general.h +// Add a new disk for a VM +QJsonObject Iohyve::addDisk(QJsonObject jsin) { + QJsonObject retObject; + + QStringList keys = jsin.keys(); + if (! keys.contains("name") || ! keys.contains("size") ) { + retObject.insert("error", "Missing required key(s) 'name', 'size'"); + return retObject; + } + + // Get the key values + QString name = jsin.value("name").toString(); + QString size = jsin.value("size").toString(); + QString pool = jsin.value("pool").toString(); + + QStringList output = General::RunCommand("iohyve add " + name + " " + size + " " + pool).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; + } + } + + QJsonObject vm; + vm.insert("size", size); + if ( ! pool.isEmpty() ) + vm.insert("pool", pool); + retObject.insert(name, vm); + + return retObject; +} + // Create a new guest VM QJsonObject Iohyve::createGuest(QJsonObject jsin) { QJsonObject retObject; diff --git a/src/server/library/sysadm-iohyve.h b/src/server/library/sysadm-iohyve.h index 06eb3af..b5024c0 100644 --- a/src/server/library/sysadm-iohyve.h +++ b/src/server/library/sysadm-iohyve.h @@ -15,6 +15,7 @@ namespace sysadm{ class Iohyve{ public: + static QJsonObject addDisk(QJsonObject); static QJsonObject createGuest(QJsonObject); static QJsonObject deleteGuest(QJsonObject); static QJsonObject fetchISO(QJsonObject, DProcess *);