diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 2cb0b00..f936ccf 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -91,7 +91,7 @@ RestOutputStruct::ExitCode WebSocket::EvaluateBackendRequest(const RestInputStru }else{ QJsonObject avail; AvailableSubsystems(IN.fullaccess, &avail); - if(!avail.contains(namesp+"/"+name)){ return RestOutputStruct::BADREQUEST; } + if(!avail.contains(namesp+"/"+name)){ return RestOutputStruct::NOTFOUND; } } //Go through and forward this request to the appropriate sub-system @@ -207,6 +207,9 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmBEADMRequest(const QJsonValu }else if(act=="activatebe"){ ok = true; out->insert("activatebe", sysadm::BEADM::activateBE(in_args.toObject())); + }else if(act=="createbe"){ + ok = true; + out->insert("createbe", sysadm::BEADM::createBE(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 4dd92e8..92d2ac1 100644 --- a/src/server/library/sysadm-beadm.cpp +++ b/src/server/library/sysadm-beadm.cpp @@ -105,4 +105,41 @@ QJsonObject BEADM::activateBE(QJsonObject jsin) { retObject.insert("target", target); return retObject; +} + +// createbe (optional flag -e for cloning from an inactive BE) : Create a new Boot environment + +QJsonObject BEADM::createBE(QJsonObject jsin) { + QJsonObject retObject; + + QStringList keys = jsin.keys(); + if (! keys.contains("newbe") ) { + retObject.insert("error", "Missing required key(s) 'target'"); + return retObject; + } + + // Get the key values + + QString newbe = jsin.value("newbe").toString(); + QString flags; + if ( keys.contains("clonefrom") ) { + flags = "-e " + jsin.value("clonefrom").toString(); + } + + QStringList output = General::RunCommand("beadm create " + flags + " " + newbe).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("newbe", newbe); + if ( keys.contains("clonefrom") ) { + retObject.insert("clonefrom", jsin.value("clonefrom").toString()); + } + 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 c3c4f9c..d113889 100644 --- a/src/server/library/sysadm-beadm.h +++ b/src/server/library/sysadm-beadm.h @@ -17,6 +17,7 @@ public: static QJsonObject listBEs(); static QJsonObject renameBE(QJsonObject); static QJsonObject activateBE(QJsonObject); + static QJsonObject createBE(QJsonObject); }; } //end of pcbsd namespace