From f9e5dc615d1a79d5f39f2a69e6b3d0c0f03be220 Mon Sep 17 00:00:00 2001 From: JoshDW19 Date: Tue, 9 Feb 2016 10:35:37 -0500 Subject: [PATCH] API call for activating a different boot environment REST Request: ------------------------------- PUT /sysadm/beadm { "target" : "bootthingy", "action" : "activatebe" } WebSocket Request: ------------------------------- { "name" : "beadm", "args" : { "action" : "activatebe", "target" : "bootthingy" }, "namespace" : "sysadm", "id" : "fooid" } Response: ------------------------------- { "args": { "activatebe": { "target": "bootthingy" } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/server/WebBackend.cpp | 8 ++++--- src/server/library/sysadm-beadm.cpp | 33 ++++++++++++++++++++++++++++- src/server/library/sysadm-beadm.h | 1 + 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 689cf5c..9549d01 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -197,14 +197,16 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmBEADMRequest(const QJsonValu QStringList keys = in_args.toObject().keys(); bool ok = false; if(keys.contains("action")){ - QString act = JsonValueToString(in_args.toObject().value("action")); + QString act = JsonValueToString(in_args.toObject().value("action")).toLower(); if(act=="listbes"){ ok = true; out->insert("listbes", sysadm::BEADM::listBEs()); - } - if(act=="renamebe"){ + }else if(act=="renamebe"){ ok = true; out->insert("renamebe", sysadm::BEADM::renameBE(in_args.toObject())); + }else if(act=="activatebe"){ + ok = true; + out->insert("activatebe", sysadm::BEADM::activateBE(in_args.toObject())); } } //end of "action" key usage diff --git a/src/server/library/sysadm-beadm.cpp b/src/server/library/sysadm-beadm.cpp index 56316aa..4dd92e8 100644 --- a/src/server/library/sysadm-beadm.cpp +++ b/src/server/library/sysadm-beadm.cpp @@ -48,6 +48,8 @@ QJsonObject BEADM::listBEs() { return retObject; } +// Rename the specified source BE to a a new target BE name + QJsonObject BEADM::renameBE(QJsonObject jsin) { QJsonObject retObject; @@ -61,7 +63,6 @@ QJsonObject BEADM::renameBE(QJsonObject jsin) { QString source = jsin.value("source").toString(); QString target = jsin.value("target").toString(); - QStringList output = General::RunCommand("beadm rename " + source + " " + target).split("\n"); for ( int i = 0; i < output.size(); i++) { @@ -75,3 +76,33 @@ QJsonObject BEADM::renameBE(QJsonObject jsin) { retObject.insert("target", target); return retObject; } + +// Activate the given BeName for the next boot + +QJsonObject BEADM::activateBE(QJsonObject jsin) { + QJsonObject retObject; + + QStringList keys = jsin.keys(); + if (! keys.contains("target") ) { + retObject.insert("error", "Missing required key(s) 'target'"); + return retObject; +} + + // Get the key values + + QString target = jsin.value("target").toString(); + + + QStringList output = General::RunCommand("beadm activate " + target).split("\n"); + + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("ERROR") != -1 ) { + retObject.insert("error", output.at(i)); + return retObject; + } + } + + retObject.insert("target", target); + return retObject; +} \ No newline at end of file diff --git a/src/server/library/sysadm-beadm.h b/src/server/library/sysadm-beadm.h index 488bcf7..c3c4f9c 100644 --- a/src/server/library/sysadm-beadm.h +++ b/src/server/library/sysadm-beadm.h @@ -16,6 +16,7 @@ class BEADM{ public: static QJsonObject listBEs(); static QJsonObject renameBE(QJsonObject); + static QJsonObject activateBE(QJsonObject); }; } //end of pcbsd namespace