diff --git a/src/library/sysadm-lifepreserver.cpp b/src/library/sysadm-lifepreserver.cpp index ab4c73a..a9bc8f5 100644 --- a/src/library/sysadm-lifepreserver.cpp +++ b/src/library/sysadm-lifepreserver.cpp @@ -83,6 +83,46 @@ QJsonObject LifePreserver::addReplication(QJsonObject jsin) { return values; } +// Re-init the LP replication target +QJsonObject LifePreserver::initReplication(QJsonObject jsin) { + QJsonObject retObject; + QString dset, rhost; + + QStringList keys = jsin.keys(); + if(! keys.contains("dataset") || ! keys.contains("host")){ + retObject.insert("error", "Missing dataset or host key"); + return retObject; + } + + // Check which pool we are looking at + dset = jsin.value("dataset").toString(); + rhost = jsin.value("host").toString(); + + // Make sure we have the pool key + if ( dset.isEmpty() || rhost.isEmpty()) { + retObject.insert("error", "Missing dataset or host key"); + return retObject; + } + + // TODO - This command can take a LONG TIME. Find a way to queue / background it and return an event + // via websockets later, or block here and return when finished if this is REST + QStringList output = General::RunCommand("lpreserver replicate init " + dset + " " + rhost).split("\n"); + + // Check for any errors + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("ERROR:") != -1 ) { + retObject.insert("error", output.at(i)); + return retObject; + } + } + + QJsonObject values; + values.insert("dataset", dset); + values.insert("host", rhost); + return values; +} + // Build list of scheduled cron snapshot jobs QJsonObject LifePreserver::listCron() { QJsonObject retObject; diff --git a/src/library/sysadm-lifepreserver.h b/src/library/sysadm-lifepreserver.h index 3954d4f..66708b8 100644 --- a/src/library/sysadm-lifepreserver.h +++ b/src/library/sysadm-lifepreserver.h @@ -15,6 +15,7 @@ namespace sysadm{ class LifePreserver{ public: static QJsonObject addReplication(QJsonObject jsin); + static QJsonObject initReplication(QJsonObject jsin); static QJsonObject listCron(); static QJsonObject listSnap(QJsonObject jsin); static QJsonObject removeSnapshot(QJsonObject jsin); diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index f4ef0a2..9ffc94a 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -189,6 +189,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmLifePreserverRequest(const Q ok = true; out->insert("cronsnap", sysadm::LifePreserver::scheduleSnapshot(in_args.toObject())); } + if(act=="initreplication"){ + ok = true; + out->insert("initreplication", sysadm::LifePreserver::initReplication(in_args.toObject())); + } if(act=="listcron"){ ok = true; out->insert("listcron", sysadm::LifePreserver::listCron());